web-dev-qa-db-fra.com

Envoi de pièces jointes à partir d'Excel via VBA

J'ai écrit une macro qui, en cliquant sur un bouton, envoie un e-mail automatisé via Outlook. Tout se passe bien, sauf que je n'arrive pas à comprendre comment joindre un fichier à l'e-mail. Partout où j'ai regardé, un exemple de code pour joindre des fichiers à un e-mail concerne des fichiers nommés statiques, comme dans, vous envoyez le même nom de fichier, avec le même chemin à chaque fois.

Si cela le rend plus pratique, le bouton qui exécute cette macro se trouve dans le classeur que j'essaie de joindre. Je ne suis pas sûr que l'ouverture d'une fenêtre de l'Explorateur Windows soit plus facile et attacher le fichier de cette façon serait préférable.

Sub mySub
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.recipient
    Dim objOutlookAttach As Outlook.Attachment
    Dim WeekendingDate As Date

    With Worksheets("Macro Buttons")
        WeekendingDate = Range("N2").Value
    End With

    Set objOutlook = CreateObject("Outlook.Application")

    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)

    With objOutlookMsg
        Set objOutlookRecip = .Recipients.Add("blah@blah")
        objOutlookRecip.Type = olTo
       .Subject = "Blah " & WeekendingDate
       .Body = "blah blah blah"

       'Add attachments to the message
       [some code]


       For Each objOutlookRecip In .Recipients
           objOutlookRecip.Resolve
       Next
       If DisplayMsg Then
           .Display
       Else
           .Save
       End If
    End With
    Set objOutlook = Nothing
End Sub
6
Davey

Vous avez besoin du Attachments.Add code inséré dans la configuration de MailItem:

With objOutlookMsg
    Set objOutlookRecip = .Recipients.Add("blah@blah")
    objOutlookRecip.Type = olTo
   .Subject = "Blah " & WeekendingDate
   .Body = "blah blah blah"
'Add attachments to the message [some code]
   .Attachments.Add "pathToFile"
   For Each objOutlookRecip In .Recipients
       objOutlookRecip.Resolve
   Next
   If DisplayMsg Then
       .Display
   Else
       .Save
   End If
End With
Set objOutlook = Nothing

Dans l'un de mes propres scripts, je passe une collection de pièces jointes au MailItem à attacher en utilisant un objet Dictionary et le code suivant:

With oMailItem
        Set .SendUsingAccount = oOutlook.Session.Accounts.Item(iAccount)
        .To = EmailData("To")
        .CC = EmailData("CC")
        .BCC = EmailData("BCC")
        .Subject = EmailData("Subject")
        .Body = EmailData("Body")
        sAttachArray = Split(EmailData("AttachmentPaths"), ";")
        For Each sAttachment In sAttachArray
            .Attachments.Add(sAttachment)
        Next
        .Recipients.ResolveAll
        .Display    ' debug mode - uncomment this to see email before it's sent out
    End With
10
Dave