Je voudrais obtenir le MailItem ouvert actif (que ce soit un nouveau courrier ou un courrier reçu). J'ai besoin d'ajouter du contenu à ce courrier lorsque l'utilisateur exécute ma macro. J'utilise Outlook 2003 et VBA.
J'ai trouvé ceci: Comment obtenez-vous une référence à l'élément de courrier dans la fenêtre actuellement ouverte dans Outlook en utilisant VBA? Cela ne fonctionne pas cependant car TypeName(Application.ActiveWindow)
est réglé sur rien. J'ai aussi essayé Set Mail = Application.ActiveInspector.currentItem
mais ça ne marche pas non plus.
Il doit y avoir quelque chose que je ne comprends pas à propos de la chose ActiveInspector.
Comme demandé, il s'agit de la procédure/macro située dans un module dédié, appelé lorsque l'utilisateur clique sur un bouton de menu ajouté à la méthode Application_Startup()
:
Sub myMacro()
Dim NewMail As Outlook.MailItem
Set NewMail = Application.ActiveInspector.currentItem
End Sub
Je ne sais pas exactement ce qui ne va pas avec votre code. D'une part, vous ne validez pas qu'un nouvel e-mail modifiable est même ouvert. La preuve de concept suivante fait exactement ce que je pense que vous cherchez à faire: insérer du texte dans le courrier électronique en cours de composition. Si ce n'est pas possible, une boîte de message expliquant pourquoi.
La partie qui insère du texte ne fonctionnera que si Word est utilisé comme éditeur de courrier électronique (ce qui sera TOUJOURS le cas dans Outlook 2010+ ). Si ce n'est pas le cas, vous devrez analyser et mettre à jour directement le texte Body ou HTMLBody.
Sub InsertText()
Dim myText As String
myText = "Hello world"
Dim NewMail As MailItem, oInspector As Inspector
Set oInspector = Application.ActiveInspector
If oInspector Is Nothing Then
MsgBox "No active inspector"
Else
Set NewMail = oInspector.CurrentItem
If NewMail.Sent Then
MsgBox "This is not an editable email"
Else
If oInspector.IsWordMail Then
' Hurray. We can use the rich Word object model, with access
' the caret and everything.
Dim oDoc As Object, oWrdApp As Object, oSelection As Object
Set oDoc = oInspector.WordEditor
Set oWrdApp = oDoc.Application
Set oSelection = oWrdApp.Selection
oSelection.InsertAfter myText
oSelection.Collapse 0
Set oSelection = Nothing
Set oWrdApp = Nothing
Set oDoc = Nothing
Else
' No object model to work with. Must manipulate raw text.
Select Case NewMail.BodyFormat
Case olFormatPlain, olFormatRichText, olFormatUnspecified
NewMail.Body = NewMail.Body & myText
Case olFormatHTML
NewMail.HTMLBody = NewMail.HTMLBody & "<p>" & myText & "</p>"
End Select
End If
End If
End If
End Sub
Voulez-vous dire le message actuellement sélectionné? Dans ce cas, vous devez utiliser la collection Application.ActiveExplorer.Selection et non Application.ActiveInspector.CurrentItem.
'
Dim myOlExp As Outlook.Explorer
Dim myOlSel As Outlook.Selection
Set myOlExp = Application.ActiveExplorer
Set myOlSel = myOlExp.Selection
'MsgBox myOlSel.item(1)
Dim selectedFolder As Outlook.MAPIFolder
Set selectedFolder = myOlExp.CurrentFolder
Dim itemMessage As String
itemMessage = "Item is unknown."
Dim expMessage As String
expMessage = "Your current folder is " & selectedFolder.Name & "." & vbCrLf
If myOlSel.Count > 0 Then
Dim selObject As Object
Set selObject = myOlSel.item(1)
If (TypeOf selObject Is Outlook.mailItem) Then
Dim mailItem As Outlook.mailItem
Set mailItem = selObject
itemMessage = "The item is an e-mail message." & " The subject is " & mailItem.Subject & "."
mailItem.Display (False)
ElseIf (TypeOf selObject Is Outlook.contactItem) Then
Dim contactItem As Outlook.contactItem
Set contactItem = selObject
itemMessage = "The item is a contact." & " The full name is " & contactItem.Subject & "."
contactItem.Display (False)
ElseIf (TypeOf selObject Is Outlook.AppointmentItem) Then
Dim apptItem As Outlook.AppointmentItem
Set apptItem = selObject
itemMessage = "The item is an appointment." & apptItem.Subject & "."
ElseIf (TypeOf selObject Is Outlook.taskItem) Then
Dim taskItem As Outlook.taskItem
Set taskItem = selObject
itemMessage = "The item is a task." & " The body is " & taskItem.Body & "."
ElseIf (TypeOf selObject Is Outlook.meetingItem) Then
Dim meetingItem As Outlook.meetingItem
Set meetingItem = selObject
itemMessage = "The item is a meeting item. " & "The subject is " & meetingItem.Subject & "."
End If
End If
expMessage = expMessage & itemMessage
MsgBox (expMessage)
End Sub