Excel Outlook 2010-奇怪的项目。附件错误

Excel Outlook 2010-奇怪的项目。附件错误,excel,vba,email,outlook,Excel,Vba,Email,Outlook,我有以下代码,它应该保存一个特定的Excel文件,并附在电子邮件中。该代码与一条规则相结合,该规则在收到带有特定主题的emai lw时触发该脚本 代码被触发了,但我最近看到的最奇怪的错误出现了:itm.Attachments.Count似乎为零,显然文件没有保存!但是如果我在“For each…”行上放置一个断点,并将itm.Attachments.Count添加到“监视”窗口,它将显示为零。如果我只添加itm,那么浏览到Attachments属性,然后到Count属性,它会显示Count为1(

我有以下代码,它应该保存一个特定的Excel文件,并附在电子邮件中。该代码与一条规则相结合,该规则在收到带有特定主题的emai lw时触发该脚本

代码被触发了,但我最近看到的最奇怪的错误出现了:itm.Attachments.Count似乎为零,显然文件没有保存!但是如果我在“For each…”行上放置一个断点,并将itm.Attachments.Count添加到“监视”窗口,它将显示为零。如果我只添加itm,那么浏览到Attachments属性,然后到Count属性,它会显示Count为1(应该是这样),代码执行得很好。我花了半天时间想弄明白发生了什么事,但我搞不懂

Windows 7 x64上的Outlook 2010 x64和Windows 7 x86上的Outlook 2010 x86上的行为都是相同的。宏已在信任中心中启用。我附上了一些代码和规则设置的屏幕截图,还有一部电影显示了watch windows的奇怪之处

该脚本是一段时间前构建的,在几台PC上运行良好,它基于以下步骤:iterrors.com/outlook自动将outlook附件保存到disk/。 有什么想法吗



如果您在Outlook中配置了IMAP帐户:您的脱机设置可能设置为仅在本地磁盘上存储最多1个月、3个月或12个月的电子邮件

如果您的磁盘上有足够的空间,并且希望在本地缓存更多电子邮件,则可以按以下方式设置同步滑块: 文件->帐户设置->帐户设置…->双击您的IMAP帐户


尝试增加Outlook中的脱机存储空间。有关更多信息,请参阅

我对这种行为的最佳理解是,Microsoft Outlook(至少是我测试的2010版本)有一个bug。可能还有其他我不知道的原因,但我能够在Windows Vista上使用Outlook 2010的不同service pack级别/版本重现错误。Office 2013似乎没有受到影响

我设法创造了一个变通办法

我发现,通过在调试模式下使用

objMailItem.GetInspector.Activate
随后正确地检测到了附件的数量(无需执行奇怪的操作,如设置对象变量的监视,然后在IDE中单击它)

但是,这只在单步执行代码时起作用,在正常执行期间不起作用

出于这个原因,我怀疑该消息在Outlook正常代码执行期间显示的时间可能不够长,无法让Outlook摆脱困境。我的理由是,可能会插入一个延迟,以便有足够的时间进行这项工作

我尝试了几种插入延迟的方法。这是为我工作的那个。我创建了一个名为

frmTimer
并在其中添加了免费软件RSTimer OCX控件()

我设定了

Interval
OCX的特性为1000毫秒

在显示如下消息后立即加载表单:

objMailItem.GetInspector.Activate
frmTimer.Show ' <-- form is loaded and displayed (it is not sufficient to just 'load' it)
objMailItem.Close OlInspectorClose.olDiscard
当事件激发时,表单将被卸载,代码执行将继续执行

objMailItem.GetInspector.Activate
frmTimer.Show
objMailItem.Close OlInspectorClose.olDiscard ' <-- code execution continues here

这是什么样的商店?IMAP4?如果是Exchange帐户,请转到文件>帐户设置>打开您的Exchange帐户>将“Mail to keep online”调整为“All”,重新启动Outlook以检查结果。这是一个gmail帐户,在Outlook中添加为IMAP。我在Outlook 2010中找不到该滑块
Private Sub RSTimer1_Timer()

    Unload frmTimer

End Sub
objMailItem.GetInspector.Activate
frmTimer.Show
objMailItem.Close OlInspectorClose.olDiscard ' <-- code execution continues here
Function EmailHasAttachments(ByVal objMailItem As Outlook.MailItem) As Boolean

    On Error GoTo ErrHandler

    objMailItem.GetInspector.Activate

    frmTimer.Show

    objMailItem.Close OlInspectorClose.olDiscard

    If objMailItem.Attachments.Count > 0 Then
        EmailHasAttachments = True
    Else
        EmailHasAttachments = False
    End If

ExitHere:
    Exit Function

ErrHandler:
    Debug.Print Err.Number, Err.Description
    Select Case Err.Number
    Case 12345
        ' handle the error
    Case Else
        MsgBox "An unknown error has occurred."
        Exit Function
    End Select

End Function