wake-up-neo.net

Senden von E-Mail-Anhängen aus Excel über VBA

Ich habe ein Makro geschrieben, das auf Knopfdruck eine automatisierte E-Mail über Outlook versendet. Alles läuft reibungslos, außer ich kann einfach nicht herausfinden, wie ich eine Datei an die E-Mail anhängen kann. Überall, wo ich nachgesehen habe, bezieht sich der Beispielcode zum Anhängen von Dateien an eine E-Mail auf statisch benannte Dateien, da Sie jedes Mal denselben Dateinamen mit demselben Pfad senden.

Wenn es bequemer ist, befindet sich die Schaltfläche, mit der dieses Makro ausgeführt wird, in der Arbeitsmappe, die ich anfügen möchte. Ich bin mir nicht sicher, ob das Öffnen eines Windows Explorer-Fensters am einfachsten ist und ob es am besten ist, die Datei auf diese Weise anzuhängen.

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("[email protected]")
        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

Du brauchst das Attachments.Add Code, der in das MailItem-Setup eingefügt wurde:

With objOutlookMsg
    Set objOutlookRecip = .Recipients.Add("[email protected]")
    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

In einem meiner eigenen Skripte übergebe ich eine Sammlung von Anhängen an das MailItem, die mit einem Dictionary-Objekt und dem folgenden Code angehängt werden sollen:

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