outlook VBA 脚本 运行-在 public 文件夹中迭代电子邮件时随机出现错误 13

outlook VBA script run-time error 13 randomly while iterating emails in a public folder

我在执行以下子例程时收到随机 运行 时间错误 13(类型不匹配)。这个例程大部分时间都有效。作为参数传入的文件夹在失败时是合法的。从我在调试器中看到的情况来看,objitem 在 运行 时间内缺少一些字段。在调试器中断点后,我可以立即单步执行(重新执行违规行)并且没有错误。

我尝试使用 'on error goto' 休眠然后重试各种行,错误一直存在,直到它在调试器中停止。

我也尝试过在循环命令的 For ii 和 For Each 形式之间切换。

我也被杀毒暂时禁用了

我正在遍历大量 public 个文件夹。我的outlook客户端是XP下的2003运行ning,我挂的是Exchange server版本7654.

谁能告诉我我做不到的事情(或者我尝试的事情是不可能的)?

下面的代码根据@dmitry 的建议进行了修改,现在可以使用了。

Sub SearchFolders(objFolder As Outlook.MAPIFolder)
    Dim objFolders As Outlook.Folders
    Dim subFolder As Outlook.MAPIFolder
    Dim Objitem As Outlook.MailItem
    Dim ii As Integer
    Dim ThisItem As Object
    Dim Items As Outlook.Items

' Recurse through all subfolders
    Set objFolders = objFolder.Folders
    For Each subFolder In objFolders
    Call SearchFolders(subFolder)
    Next subFolder

' Search the emails
    Set Items = objFolder.Items
    For ii = 1 To Items.Count
    Set ThisItem = Items.item(ii)
    If ThisItem.Class = olMail Then
        If VarType(ThisItem) = 9 Then GoTo NextdblLoop
        Set Objitem = ThisItem
        CheckEmailForErrorReports (objFolder.Items(ii))
        Set Objitem = Nothing
    End If
    Set ThisItem = Nothing
NextdblLoop:
    Next ii
    Set Items = Nothing
End Sub

首先,不要使用多点符号;在进入循环之前缓存 Items 集合。

其次,用完后尽快释放变量

    dim item As Object
    dim Items as Outlook.Items
    set Items = objFolder.Items
    For ii = 1 To Items.Count
        set item = Items.Item(ii)
        If item.Class = olMail Then
            If TypeName(item) <> "MailItem" Then
                'THIS CAN NEVER HAPPEN. The check above is sufficient
                MsgBox ("Type mismatch: object s/b MailItem and is " & TypeName(item))
                GoTo NextdblLoop
            End If
            Set objitem = item 
            CheckEmailForErrorReports (objitem)
            Set objitem = Nothing
        End If
        Set item = Nothing
NextdblLoop:
    Next ii
End Sub