web-dev-qa-db-fra.com

Travailler avec un email ouvert

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
10
dnLL

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
16
Joshua Honig

Voulez-vous dire le message actuellement sélectionné? Dans ce cas, vous devez utiliser la collection Application.ActiveExplorer.Selection et non Application.ActiveInspector.CurrentItem.

3
            '
            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
0
Restevao