Outlook 2013 で IMAP アカウントで Outlook オブジェクト モデルが使用されている場合の0x80040109エラー

現象

Outlook オブジェクト モデルを使用して、Microsoft Outlook 2013の IMAP アカウントの電子メール メッセージに UserProperty オブジェクトを追加すると、次のエラー メッセージが表示されます。

実行時エラー '-2147221239 (80040109)': メッセージが変更されたため、操作を実行できません。

注:

  • この問題は、2 回目に同じ電子メール メッセージに UserProperty オブジェクトを追加するために、コードを連続して実行する場合にのみ発生します。
  • この問題は、プレビュー ウィンドウが無効になっている場合や、2 回目にコードを実行する前に電子メール メッセージを切り替えた場合には発生しません。

回避策

この問題を回避するには、コードを実行して UserProperty オブジェクトを電子メール メッセージに追加した後、すべての項目を閉じます。 または、同じ電子メール メッセージに対してコードを 1 回だけ実行します。 この問題は、IMAP アカウントに対して電子メール メッセージを複数回編集して保存することは非効率的であるために発生します。 電子メール メッセージを保存するときは、完全に新しい電子メール メッセージとしてサーバーにアップロードする必要があり、元の電子メール メッセージが削除されます。 プレビュー ウィンドウが有効になっている場合、元の電子メール メッセージはメモリ内に残りますが、基になる電子メール メッセージは複数のアップロードのために変更されます。

この問題を再現するには、次の手順に従います。

  1. メッセージ一覧で電子メール メッセージを選択します。

  2. プレビュー ウィンドウが有効になっていることを確認します。

  3. 同じメール メッセージに対して次のコードを 2 回連続して実行します。

    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 のサポート エンジニアが、特定の手順の機能をわかりやすく説明します。 ユーザー固有の要件に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。