簡體   English   中英

Outlook 2010-奇怪的項目。附件錯誤

[英]Outlook 2010 - strange item.Attachments error

我有以下代碼,應該保存附加到電子郵件的特定Excel文件。 該代碼與一條規則結合在一起,當收到具有特定主題的電子郵件時,該規則將觸發此腳本。

代碼被觸發,但是這是我最近看到的最奇怪的錯誤:itm.Attachments.Count看起來為零,顯然文件未保存! 但是...如果我在“ For each ...”行上放置一個斷點並添加itm.Attachments.Count來監視窗口,它將顯示為零。 如果僅添加它,則瀏覽到Attachments屬性,然后到Count屬性,它顯示Count(應為1),並且代碼執行得很好。 我花了半天的時間來了解發生了什么,但我無法弄清楚。

在Windows 7 x64上的Outlook 2010 x64和Windows 7 x86上的Outlook 2010 x86上,行為都是相同的。 在信任中心中啟用了宏。 我已經在代碼和規則設置中附加了一些屏幕截圖,還附帶了顯示監視窗口異常的電影。

該腳本是在一段時間之前構建的,並且在兩台PC上運行良好,並且基於此處的步驟:iterrors.com/outlook-automatically-save-an-outlook-attachment-to-disk/。 有任何想法嗎?

規則畫面在這里
1分鍾。 電影在這里

Public Sub Kona(itm As Outlook.MailItem)
    Dim objAtt As Outlook.Attachment
    Dim saveFolder As String
    saveFolder = "C:\test"
    For Each objAtt In itm.Attachments
        If InStr(objAtt.DisplayName, "Kona Preferred Fixed Price Matrix (ALL)") Then
            objAtt.SaveAsFile saveFolder & "\" & objAtt.DisplayName
        End If
        Set objAtt = Nothing
    Next
End Sub

如果您在Outlook中配置了IMAP帳戶,則“脫機設置”可能設置為在本地磁盤上最多只存儲1個月,3個月,12個月的電子郵件。

如果磁盤上有足夠的空間,並且想在本地緩存更多電子郵件,則可以通過以下方式設置同步滑塊:“文件”->“帳戶設置”->“帳戶設置...”->雙擊您的IMAP帳戶。

嘗試增加Outlook中的脫機存儲。 有關詳細信息,請參閱Outlook 2013中的“空收件箱”和其他IMAP同步問題

我對此行為的最佳理解是Microsoft Outlook(至少是我測試的2010版本)存在錯誤。 可能還有其他因素導致我不知道導致此問題,但是我能夠使用Windows Vista上不同的Service Pack級別/內部版本的Outlook 2010重現此錯誤。 Office 2013似乎沒有受到影響。

我設法創建了一個解決方法。

我發現通過在調試模式下單步執行代碼時顯示消息,使用

objMailItem.GetInspector.Activate

隨后正確地檢測到附件的數量(無需做任何奇怪的事情,例如為對象變量設置監視,然后在IDE中單擊它)。

但是,這僅在單步執行代碼時有效,而在正常執行期間則無效。

因此,我懷疑該消息在正常的代碼執行過程中可能顯示的時間不足以使Outlook擺脫困境。 我認為可能有可能插入延遲以留出足夠的時間進行此操作。

我嘗試了幾種插入延遲的方法。 這是為我工作的人。 我創建了一個名為

frmTimer

並向其中添加了免費軟件RSTimer OCX控件( http://www.softpedia.com/get/Programming/Components-Libraries/RS-Timer.shtml )。

我設定

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

該表單只有一個事件處理程序:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM