Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Mail mit Anhang senden

Mail mit Anhang senden
13.08.2018 16:48:10
Marquardt
Hallo,
ich habe Problem mit folgenden Makro.

Sub ExcelMailsenden()
ChDir ThisWorkbook.Path 'anpassen 'oder thisworkbook.path
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Sheets("1. Mängelanzeige").Range("i1").Value & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.createItem(0)
With objMail
.GetInspector     ' sorgt für die Signatur
.To = Sheets("1. Mängelanzeige").Range("A4").Value
.CC = Sheets("1. Mängelanzeige").Range("A5").Value
.BCC = Sheets("1. Mängelanzeige").Range("A6").Value
.Subject = ThisWorkbook.Worksheets("1. Mängelanzeige").Range("i1")
.body = Sheets("1. Mängelanzeige").Range("k43").Value & .body
.Display        'Erstellt die Email und öffnet diese. Der Versand erfolgt anschließend  _
manuell vom User!
MsgBox ("Bitte Datei auswählen.")
Set fdOpen = Application.FileDialog(msoFileDialogOpen)
With fdOpen
.AllowMultiSelect = True
.InitialView = msoFileDialogViewList
.InitialFileName = ActiveWorkbook.Path
.Title = "Bitte die zu sendende(n) Datei(en) auswählen!"
.ButtonName = "per E-Mail senden"
If .Show = True Then
Dim i As Integer
If .SelectedItems.Count > 0 Then
For i = 1 To .SelectedItems.Count
Mail.attachments.Add .SelectedItems(i)
Next
End If
End If
End With
End With
SendKeys body
End Sub

Die MsgBox öffnet sich ich kann die Dateien auch auswählen. Aber die Dateien werden nicht in die Mail eingefügt.
Kann mir jemand helfen?
Vielen Dank.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mail mit Anhang senden
13.08.2018 17:13:44
mumpel
Hallo!
Da ist ja auch ein Fehler drin. Es muss heissen "objMail.Attachments.Add", und nicht "Mail.Attachments.Add".
Gruß, René
Option Explicit...
13.08.2018 17:16:50
{Boris}
...und das wäre sofort aufgefallen. ;-)
Bedingt natürlich, dass die anderen Variablen auch alle brav deklariert werden.
VG, Boris
AW: Option Explicit...
13.08.2018 17:23:33
Marquardt
Blind.
Vielen Dank.
Gruß
Anzeige
Kleine Codeanpassung
13.08.2018 17:24:47
mumpel
Option Explicit

Sub ExcelMailsenden()

ChDir ThisWorkbook.Path
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                Filename:=Sheets("1. Mängelanzeige").Range("I1").Value & ".pdf", _
                                Quality:=xlQualityStandard, _
                                IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                                OpenAfterPublish:=False



Dim objOutlook     As Object
Dim objMail        As Object
Dim strOldBody     As String
Dim lngFileCount   As Long
Dim fdOpen

Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.createItem(0)

With objMail
   .GetInspector.Display
    strOldBody = .htmlBody
   .To = Sheets("1. Mängelanzeige").Range("A4").Value
   .CC = Sheets("1. Mängelanzeige").Range("A5").Value
   .BCC = Sheets("1. Mängelanzeige").Range("A6").Value
   .Subject = ThisWorkbook.Worksheets("1. Mängelanzeige").Range("i1")
   .htmlBody = Sheets("1. Mängelanzeige").Range("k43").Value & strOldBody
   
    MsgBox ("Bitte Datei auswählen.")
    Set fdOpen = Application.FileDialog(msoFileDialogOpen)
        With fdOpen
            .AllowMultiSelect = True
            .InitialView = msoFileDialogViewList
            .InitialFileName = ActiveWorkbook.Path
            .Title = "Bitte die zu sendende(n) Datei(en) auswählen!"
            .ButtonName = "per E-Mail senden"
            If .Show = True Then
               If .SelectedItems.Count > 0 Then
                  For lngFileCount = 1 To .SelectedItems.Count
                     objMail.attachments.Add .SelectedItems(lngFileCount)
                  Next
               End If
            End If
        End With
End With

End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mail mit Anhang versenden in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine E-Mail mit Anhang über Excel VBA zu versenden, kannst du das folgende Makro verwenden. Es erstellt eine E-Mail in Outlook und ermöglicht es dir, Dateien als Anhang hinzuzufügen.

Sub ExcelMailsenden()
    ChDir ThisWorkbook.Path 'Aktuellen Ordner festlegen
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    Sheets("1. Mängelanzeige").Range("i1").Value & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

    Dim objOutlook As Object
    Dim objMail As Object
    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.createItem(0)

    With objMail
        .GetInspector ' sorgt für die Signatur
        .To = Sheets("1. Mängelanzeige").Range("A4").Value
        .CC = Sheets("1. Mängelanzeige").Range("A5").Value
        .BCC = Sheets("1. Mängelanzeige").Range("A6").Value
        .Subject = ThisWorkbook.Worksheets("1. Mängelanzeige").Range("i1")
        .Body = Sheets("1. Mängelanzeige").Range("k43").Value & .Body

        MsgBox "Bitte Datei auswählen."
        Dim fdOpen As FileDialog
        Set fdOpen = Application.FileDialog(msoFileDialogOpen)
        With fdOpen
            .AllowMultiSelect = True
            .InitialView = msoFileDialogViewList
            .InitialFileName = ActiveWorkbook.Path
            .Title = "Bitte die zu sendende(n) Datei(en) auswählen!"
            .ButtonName = "per E-Mail senden"
            If .Show = True Then
                Dim i As Integer
                For i = 1 To .SelectedItems.Count
                    .Attachments.Add .SelectedItems(i)
                Next i
            End If
        End With
    End With
End Sub

Achte darauf, dass du die richtigen Zellreferenzen in deinem Arbeitsblatt verwendest, um die E-Mail-Adresse und andere notwendige Informationen abzurufen.


Häufige Fehler und Lösungen

  1. Dateien werden nicht als Anhang hinzugefügt
    Stelle sicher, dass du objMail.Attachments.Add verwendest und nicht Mail.Attachments.Add. Der richtige Befehl sollte so aussehen:

    objMail.Attachments.Add .SelectedItems(i)
  2. Outlook öffnet sich nicht
    Überprüfe, ob Outlook korrekt installiert und konfiguriert ist. Du musst möglicherweise die Sicherheitswarnungen in Outlook anpassen, um Makros zuzulassen.


Alternative Methoden

Falls du kein VBA verwenden möchtest, kannst du auch die SendMail-Funktion in Excel nutzen, um einfache E-Mails ohne Anhänge zu senden. Diese Methode hat jedoch Einschränkungen hinsichtlich der Anpassbarkeit und des Anhangs.

Ein Beispiel für die Verwendung von SendMail:

ActiveWorkbook.SendMail "empfaenger@example.com", "Betreff der E-Mail"

Praktische Beispiele

Ein Beispiel für die Verwendung des Makros könnte die Erstellung eines PDF-Dokuments sein, das dann als Anhang versendet wird. Du kannst das Makro anpassen, um verschiedene Formate zu exportieren oder weitere Informationen zu den E-Mails hinzuzufügen.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Fehler beim Deklarieren von Variablen zu vermeiden.
  • Fehlerbehandlung einfügen: Verwende On Error Resume Next, um mögliche Laufzeitfehler zu handhaben und deine E-Mail-Funktion robuster zu machen.
  • Testen in einer Sandbox: Vor dem Einsatz in der Produktion solltest du das Makro in einer Testumgebung ausprobieren.

FAQ: Häufige Fragen

1. Kann ich mehrere Dateien gleichzeitig anhängen?
Ja, das Makro unterstützt das Anhängen mehrerer Dateien, wenn du die AllowMultiSelect-Eigenschaft auf True setzt.

2. Ist dieses Makro nur für Outlook?
Ja, dieses VBA-Skript ist speziell für Outlook konzipiert. Es wird nicht in anderen E-Mail-Programmen funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige