Condividi tramite


0x80040109 errore quando si usa il modello a oggetti di Outlook con un account IMAP in Outlook 2013

Sintomi

Quando si usa il modello a oggetti di Outlook per aggiungere un oggetto UserProperty a un messaggio di posta elettronica per un account IMAP in Microsoft Outlook 2013, viene visualizzato il messaggio di errore seguente:

Errore di runtime '-2147221239 (80040109)': impossibile eseguire l'operazione perché il messaggio è stato modificato.

Nota

  • Questo problema si verifica solo quando si esegue il codice in rapida successione per aggiungere un oggetto UserProperty allo stesso messaggio di posta elettronica la seconda volta.
  • Questo problema non si verifica quando il riquadro di anteprima è disabilitato o se si passa da un messaggio di posta elettronica all'altro prima di eseguire il codice per la seconda volta.

Soluzione alternativa

Per risolvere questo problema, chiudere tutti gli elementi dopo aver eseguito il codice per aggiungere un oggetto UserProperty a un messaggio di posta elettronica. In alternativa, eseguire il codice una sola volta per lo stesso messaggio di posta elettronica. Questo problema si verifica perché la modifica e il salvataggio di un messaggio di posta elettronica più volte per un account IMAP non è efficiente. Quando un messaggio di posta elettronica viene salvato, deve essere caricato nel server come messaggio di posta elettronica completamente nuovo e il messaggio di posta elettronica originale viene eliminato. Se il riquadro di anteprima è abilitato, il messaggio di posta elettronica originale rimane in memoria, mentre il messaggio di posta elettronica sottostante viene modificato a causa dei caricamenti multipli.

Per riprodurre questo problema, seguire questa procedura:

  1. Selezionare un messaggio di posta elettronica nell'elenco dei messaggi.

  2. Assicurarsi che il riquadro di anteprima sia abilitato.

  3. Eseguire il codice seguente per lo stesso messaggio di posta elettronica due volte in rapida successione:

    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
    

Nota

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. I tecnici di supporto tecnico Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessuno caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze.