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:
Selezionare un messaggio di posta elettronica nell'elenco dei messaggi.
Assicurarsi che il riquadro di anteprima sia abilitato.
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.