2009-09-04 12 views
0

je code, similaire à ce qui suit, que je souhaite modifier:Enregistrer email après modification

Sub SendEmail() 

    Dim myOlApp As Outlook.Application 
    Dim myItem As Outlook.MailItem 

    'Create an Outlook application object 
    Set myOlApp = New Outlook.Application 

    'Create a new MailItem form 
    Set myItem = myOlApp.CreateItem(olMailItem) 

    'Build and display item 
    With myItem 
       .To = “[email protected]” 
       .Subject = “Test Subject” 
       .HTMLBody = “Test Body” 
       .Display 
       .SaveAs “C:\Test.msg”, olMSG 
    End With 

End Sub

Ce code est appelé à partir de différents boutons tout au long de l'application. Lorsqu'un bouton est cliqué, un nouvel e-mail est créé et enregistré. Malheureusement, l'e-mail est sauvegardé dès sa création et AVANT qu'il ne soit envoyé ... donc, si des modifications y sont apportées, elles ne figureront pas dans la version sauvegardée.

Que puis-je faire pour modifier ce code afin d'enregistrer SEULEMENT l'e-mail une fois qu'il a été envoyé?

N'hésitez pas à poser des questions de suivi si nécessaire et je vais répondre de votre mieux.

Merci!

Robert

+0

Décrivez l'erreur que vous recevez pour permettre une meilleure réponse. Aussi, quelle "application"? – AMissico

+0

Mes excuses, AMissico, ce code est dans une application développée dans MS Access. Il n'y a pas d'erreur ... il enregistre juste après la création de l'e-mail, mais je veux l'enregistrer après l'envoi de l'e-mail. – Sesame

Répondre

0

Le problème est qu'il n'y a pas EntryID pour l'élément nouvellement créé. Une fois que vous enregistrez/envoyez cet article, la référence n'est plus bonne. Pourquoi est probablement dû au fonctionnement de MAPI. Remou suggère d'utiliser l'événement ItemAdd pour gérer l'élément nouvellement ajouté au dossier spécial "Éléments envoyés". De cet événement, vous pouvez enregistrer le message. Le seul problème que je vois est comment voulez-vous savoir passé article est l'élément envoyé. Vous appelez Affichage, ce qui permet à l'utilisateur de prévisualiser, modifier, envoyer ou fermer le message sans l'envoyer. Par conséquent, l'article peut ne pas être l'article de courrier que vous avez créé. Pour contourner ce problème, ajoutez une propriété personnalisée à votre article de courrier. Lorsque l'événement ItemAdd est déclenché, vous pouvez inspecter l'élément transmis pour la propriété personnalisée et l'enregistrer si nécessaire.

2

Vous pouvez utiliser des événements Outlook avec Access. Pour cet exemple, vous aurez besoin d'un module de classe appelé clsOlMail avec ce code:

''Requires reference to the Microsoft Outlook x.x Object Library 
Dim WithEvents conItems As Outlook.Items 

Private Sub Class_Initialize() 
    Set oApp = Outlook.Application 
    Set oNS = oApp.GetNamespace("MAPI") 
    Set conFolder = oNS.GetDefaultFolder(olFolderSentMail) 
    Set conItems = conFolder.Items 
End Sub 

Private Sub Class_Terminate() 
    Set conItems = Nothing 
    Set conFolder = Nothing 
    Set oNS = Nothing 
    Set oApp = Nothing 
End Sub 

Sub ConItems_ItemAdd(ByVal Item As Object) 
Dim frm As Form 

    Set frm = Forms!frmEmailDetails 

    frm.txtSenderName = Item.SenderName 
    frm.txtSentOn = Item.SentOn 
    frm.txtTo = Item.To 
    frm.txtCreationTime = Item.CreationTime 
    frm.txtBCC = Item.BCC 
    frm.txtCC = Item.CC 
    frm.txtSentOnBehalfOfName = Item.SentOnBehalfOfName 
    frm.txtSubject = Item.Subject 
    frm.txtBody = Item.Body 
End Sub 

Vous aurez également besoin d'un formulaire appelé frmEmailDetails avec ces zones de texte:

txtSenderName, txtSentOn, txtTo, txtCreationTime, txtBCC, txtCC, txtSentOnBehalfOfName, txtSubject, txtBody

et ce code:

Private oEvent As clsOLMail 
''Requires reference to Microsoft Outlook x.x Object Library 

Public oApp As Outlook.Application 
Public oNS As Outlook.NameSpace 
Public conFolder As Outlook.MAPIFolder 

Private Sub Form_Open(Cancel As Integer) 
    Set oEvent = New clsOlMail 
End Sub 

Ouvrez le formulaire et envoyer un e-mail via Outlook, vous pouvez utiliser l'un des exemples ci-dessus. Les champs du formulaire doivent remplir avec les détails pertinents de l'email envoyé. Vous risquez d'obtenir un avertissement de sécurité Outlook.

De: http://wiki.lessthandot.com/index.php/Access_and_Email

+0

Et cela va enregistrer l'e-mail après qu'il a été envoyé? Je ne vois pas cela n'importe où dans votre exemple de code ... – Sesame

+0

Il utilise des événements Outlook. Considérez ces deux lignes dans le module de classe: Set conFolder = oNS.GetDefaultFolder (olFolderSentMail) Set conItems = conFolder.Items – Fionnuala

+0

Le code ne sauvegardera pas l'e-mail après son envoi en l'état, cependant, il devrait être assez facile d'ajouter une ligne ou deux. – Fionnuala