2012-12-07 46 views
4

我收到此对象必需的错误。见下面的代码。我不明白我为什么得到它。 oitem变量被声明为Object,并且在尝试移动它之前对“MailItem”类型进行测试。请指教。outlook outlook vba中的对象所需错误

艾伦

Public StatsArchiveFolder As Outlook.Folder 
'StatsArchiveFolder is set to equal an Outlook.Folder elsewhere 
_____________________________________ 

Sub MoveHarpStatMail() 

Dim olapp As Outlook.Application 
Dim olappns As Outlook.NameSpace 
Dim oitem As Object 
Dim ItemsToProcess As Outlook.Items 
Dim myFolder As MAPIFolder 
Dim sFilter As String 
Dim tempMailItem As Outlook.MailItem 

On Error GoTo LocalErr 

'set outlook objects 

Set olapp = New Outlook.Application 
Set olappns = olapp.GetNamespace("MAPI") 
Set myFolder = olappns.GetDefaultFolder(olFolderInbox) 
'Filter or only MailItems received today 
sFilter = "[ReceivedTime] >= " & AddQuotes(Format(Date, "ddddd")) 
Set ItemsToProcess = Session.GetDefaultFolder(olFolderInbox).Items.Restrict(sFilter) 

For Each oitem In ItemsToProcess 
If TypeName(oitem) = "MailItem" Then 
    Set tempMailItem = oitem 
    If CheckSubject(tempMailItem.Subject) Then 
    MoveToArchiveFolder (tempMailItem) '<<<Error 424 Object Required ??? 
    End If 
End If 
Next oitem 

ExitProc: 
Set olapp = Nothing 
Set olappns = Nothing 
Set myFolder = Nothing 
Set ItemsToProcess = Nothing 

... 
End Sub 

_________________________________ 

Function CheckSubject(Subject As String) As Boolean 

    If (LCase(Trim(Subject)) = LCase(SubjectTitle)) Then 
    CheckSubject = True 
    Else 
    CheckSubject = False 
    End If 

End Function 

______________________________ 

Sub MoveToArchiveFolder(Item As Outlook.MailItem) 

    If (ArchiveFolder = Nothing) Then 
    MsgBox ("The ArchiveFolder object is not set.") 
    End If 

    Item.Move (StatsArchiveFolder) 

End Sub 

回答

5

删除括号:

MoveToArchiveFolder tempMailItem 

基本上括号说来评估tempMailItem值。 MailItem的默认属性是电子邮件的主题,因此您的代码将通过tempMailItem的主题访问您的功能,而不是MailItem本身。

这里有一个有趣的Daily Dose后有关为什么。请务必阅读Rick Rothstein的评论。