當 Outlook 物件模型與 Outlook 2013 中的 IMAP 帳戶搭配使用時,0x80040109錯誤

徵狀

當您使用 Outlook 物件模型UserProperty 物件新增至 Microsoft Outlook 2013 中 IMAP 帳戶的電子郵件訊息時,您會收到下列錯誤訊息:

運行時錯誤 『-2147221239 (80040109) 』:無法執行作業,因為訊息已變更。

注意事項

  • 只有在您第二次快速連續執行程式碼以將UserProperty物件新增至相同的電子郵件訊息時,才會發生此問題。
  • 當 [預覽] 窗格停用,或您在第二次執行程序代碼之前切換電子郵件訊息時,就不會發生此問題。

因應措施

若要解決此問題,請在執行程式碼之後關閉所有專案,以將UserProperty物件新增至電子郵件訊息。 或者,針對相同的電子郵件訊息只執行一次程序代碼。 之所以發生此問題,是因為編輯和儲存 IMAP 帳戶的電子郵件訊息沒有效率。 儲存電子郵件訊息時,它必須以全新的電子郵件訊息方式上傳至伺服器,並刪除原始的電子郵件訊息。 如果啟用預覽窗格,原始電子郵件訊息會保留在記憶體中,而基礎電子郵件訊息則會因為多重上傳而變更。

若要重現此問題,請遵循下列步驟:

  1. 選取郵件清單中的電子郵件訊息。

  2. 請確定已啟用預覽窗格。

  3. 針對相同的電子郵件訊息連續執行下列兩次程式代碼:

    Function ReproCode()
    Dim oExp As Outlook.Explorer
    Dim oSel As Outlook.Selection
    Dim oMail As Outlook.MailItem
    Dim oProp As UserProperty
    Dim oProps As UserProperties
    
    Set oExp = Application.ActiveExplorer
    Set oSel = oExp.Selection
    
    For iCount = 1 To oSel.Count
    If oSel.Item(iCount).Class = OlObjectClass.olMail Then
    Set oMail = oSel.Item(iCount)
    Set oProps = oMail.UserProperties
    Set oProp = oProps.Add("TextProp", olText, False, 1)
    oProp.Value = "Sample Text"
    oMail.Save
    End If
    Next iCount
    
    Set oExp = Nothing
    Set oSel = Nothing
    Set oMail = Nothing
    Set oProp = Nothing
    Set oProps = Nothing
    
    End Function
    

注意事項

Microsoft 提供的程式設計範例僅供說明之用,並不具任何明示或暗示的責任擔保。 這包括 (但不限於) 任何目的之適售性及適用性的暗示責任擔保。 本文假設您熟悉示範的程式設計語言,也熟悉用以建立和偵錯程序的工具。 Microsoft 支援工程師可協助說明特定程序的功能。 不過,他們不會修改這些範例以提供附加功能或建構程序來滿足您的特定需求。