1

我在 Outlook VBA 中工作,并构建了一个 For Next 循环来读取 MailItems 的正文,这些邮件的格式类似于 Key=Value 对。在某种程度上它似乎正在工作,但是在第二次迭代结束时,当它到达“下一个项目”时,我得到了抛出“类型不匹配”的错误。好吧,还有第三个 MailItem 需要读入,所以我不知道为什么会出现这个错误。任何指导将不胜感激。

Sub ReadMailItems()

Dim olapp As Outlook.Application
Dim olappns As Outlook.NameSpace
Dim oitem As Outlook.MailItem
Dim ItemsToProcess As Outlook.Items
Dim myFolder As MAPIFolder
Dim sFilter As String
Dim dailyStats As CRBHA_Stats
Dim kvPairs As Collection
Dim Item As KeyValuePair
Dim today As Date
today = Date

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)
Set StatsCollection = New Collection

For Each oitem In ItemsToProcess
 If CheckSubject(oitem.Subject) Then
   Set kvPairs = GetKeyValuePairs(oitem.body)
   'Iterate over the Collection and load up
   'an instance of CRBHA_Stats object
   Set dailyStats = New CRBHA_Stats
   dailyStats.SubmissionDate = today
   For Each Item In kvPairs
     If LCase(Item.Key) = LCase("EmployeeID") Then
        dailyStats.EmployeeID = Item.Value
     ElseIf LCase(Item.Key) = LCase("Approved") Then
        dailyStats.Approved = Item.Value
     ElseIf LCase(Item.Key) = LCase("Declined") Then
        dailyStats.Declined = Item.Value
     ElseIf LCase(Item.Key) = LCase("PFA") Then
        dailyStats.PFAs = Item.Value
     ElseIf LCase(Item.Key) = LCase("Followups") Then
        dailyStats.FollowUps = Item.Value
     ElseIf LCase(Item.Key) = LCase("CRA") Then
        dailyStats.CRAs = Item.Value
     End If
    Next Item

    'Add each CRBHA_Stats object to the StatsCollection
    StatsCollection.Add dailyStats

    Debug.Print dailyStats.ToString
    Debug.Print "_____________" & vbCrLf
  End If
Next oitem   '<<<<This is where it cuts out

ExitProc:
Set olapp = Nothing
Set olappns = Nothing
Set myFolder = Nothing
Set ItemsToProcess = Nothing
Set dailyStats = Nothing
Exit Sub

LocalErr:
  If Err.Number <> 0 Then
   Msg = "Error # " & Str(Err.Number) & " was generated by " _
       & Err.Source & Chr(13) & "Error Line: " & Erl & Chr(13) & Err.Description
   MsgBox Msg, , "Error", Err.HelpFile, Err.HelpContext
   End If
   'Resume Next


End Sub
4

1 回答 1

8
Dim oitem As Object   'not Outlook.MailItem
'....
For Each oitem In ItemsToProcess
    if typename(oitem)="MailItem" then
        'process the mail
        '....
    end if
Next oitem
'........
于 2012-11-29T01:54:50.773 回答