0x80040109 chyba při použití objektového modelu Outlooku s účtem IMAP v Outlooku 2013

Příznaky

Při použití objektového modelu aplikace Outlook přidat objekt UserProperty do e-mailové zprávy pro účet IMAP v Microsoft Outlook 2013, zobrazí se následující chybová zpráva:

Chyba -2147221239 (80040109): Operaci nelze provést, protože zpráva byla změněna.

Poznámka

  • K tomuto problému dochází pouze při spuštění kódu v rychlém sledu přidat objekt UserProperty do stejné e-mailové zprávy podruhé.
  • K tomuto problému nedochází, pokud je podokno náhledu zakázané nebo pokud před druhým spuštěním kódu přepnete mezi e-mailovými zprávami.

Řešení

Chcete-li tento problém vyřešit, zavřete všechny položky po spuštění kódu přidat objekt UserProperty e-mailové zprávy. Nebo spusťte kód jenom jednou pro stejnou e-mailovou zprávu. K tomuto problému dochází, protože úprava a uložení e-mailové zprávy vícekrát pro účet IMAP je neefektivní. Když se e-mailová zpráva uloží, musí se nahrát na server jako úplně nová e-mailová zpráva a původní e-mailová zpráva se odstraní. Pokud je podokno náhledu povolené, původní e-mailová zpráva zůstane v paměti, zatímco podkladová e-mailová zpráva se změní kvůli několika nahráváním.

Pokud chcete tento problém reprodukovat, postupujte takto:

  1. Vyberte e-mailovou zprávu v seznamu zpráv.

  2. Ujistěte se, že je povolené podokno náhledu.

  3. Spusťte následující kód pro stejnou e-mailovou zprávu dvakrát za sebou:

    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
    

Poznámka

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené, včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Technici podpory společnosti Microsoft mohou pomoci vysvětlit funkce konkrétního postupu. Nebudou však upravovat tyto příklady tak, aby poskytovaly přidanou funkcionalitu nebo sestavovaly postupy, které splňují vaše specifické požadavky.