Skip to content

Daniels Tagesmeldungen

Kleine IT-Episoden, der Diabetes & das wahre Leben

  • Startseite
  • About me…
    • Lebenslauf
    • Weiterbildung
  • Diabetes melitus
    • Diabetes melitus – Definition/Typen
    • Diabetes melitus – Podcasts
    • Diabetes Typ-2 – Erläuterung
    • Medikament – Forxiga (Dapagliflozin)
    • Medikament – Eylea (Aflibercept)
    • Medikament – Lucentis (Ranibizumab )
    • Medikament – Metformin
  • Disclaimer
  • Toggle search form

E-Mail mit Anhang versenden über VBA

Posted on 19. Mai 20111. April 2012 By Daniel Lensing 15 Kommentare zu E-Mail mit Anhang versenden über VBA

Gestern bekam ich eine Anfrage, ob man eine E-Mail aus Excel versenden kann in der das Dokument als Anhang eingefügt ist.

Zu dieser Anforderung kann man folgenden Code verwenden:

Sub Mailversand()
Dim Nachricht As Object, OutlookApplication As Object
Set OutlookApplication = CreateObject("Outlook.Application")
Dim Anhang As String
Anhang = ThisWorkbook.FullName
Set Nachricht = OutlookApplication.CreateItem(0)
With Nachricht
.To = "mailadresse@domain.tld"
.Subject = "Betreff "
.attachments.Add Anhang
.Body = "Mailtext" & vbCrLf & vbCrLf
.Display
'.Mail.Send
End With
Set OutlookApplication = Nothing
Set Nachricht = Nothing
End Sub

Wenn man das Apostroph vor dem Befehl „.Mail.Send“ entfernt, wird die Mail direkt versandt.

VBA

Beitrags-Navigation

Previous Post: Twitter-Block-Funktion: falsch gedacht
Next Post: Central Store für Gruppenrichtlinien

Comments (15) on “E-Mail mit Anhang versenden über VBA”

  1. Thomas sagt:
    20. September 2012 um 18:29 Uhr

    Hallo und vielen Dank. Mögen potentielle Auftraggeber auf diesem Wege auf dich aufmerksam werden. Verdient hast du’s und die dann hoffentlich auch.

  2. Luli sagt:
    21. März 2017 um 17:03 Uhr

    Hallo

    Ich habe einen Befehlt im Word eingegeben, leider versendet es die E-Mail automatisch, ich würde diese jedoch davor noch gerne bearbeiten z.b. andere Attachements einfügen. Ich weiss nich wo der Fehler ist 🙁

    ____________________________________
    Sub CommandButton1_Click()

    ‚Working in Excel 2000-2013
    ‚This example send the last saved version of the Activeworkbook
    ‚For Tips see: http://www.rondebruin.nl/win/winmail/Outlook/tips.htm
    Dim OutApp As Object
    Dim OutMail As Object
    Dim toadresse As Variant
    Dim ccadresse As Variant
    Dim bccadresse As Variant
    Dim ssubject As Variant
    Dim sbody As Variant

    toadresse = „name.vorname@firma.net“
    ccadresse = „name.vorname@firma.net“
    ssubject = „Austrittsformular“
    sbody = „Im Anhang sende ich das Austrittsformular;“

    Set OutApp = CreateObject(„Outlook.Application“)
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
    .to = toadresse
    .CC = ccadresse
    .BCC = bccadresse
    .Subject = ssubject
    .Body = sbody
    .Attachments.Add ActiveDocument.FullName
    ‚You can add other files also like this
    ‚.Attachments.Add („C:\test.txt“)
    .Send ‚or use .Display
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

    End Sub

  3. Daniel Lensing sagt:
    22. März 2017 um 07:39 Uhr

    Hallo Luli,
    einfach die folgende Zeile ersetzen:
    alt – .Send ‚or use .Display
    neu – .Display ‚or use .Send

    Liebe Grüße
    Daniel

  4. Andreas sagt:
    24. September 2017 um 12:50 Uhr

    Herr Lensing
    Danke das Sie ihr Fachwissen zur Verfügung Stellen. Ich bin ein totaler Anfänger was VBA beinhaltet.
    Ich bin Lehrer und darf dauernd Bewertungen per Mail versenden an immer die gleichen Personen.
    Mit dem Code weis ich nicht umzugehen und daher funktioniert der bei mir nicht.
    Frage: Haben Sie Interesse mir zu helfen per Team Viewer? LG Andreas

  5. Markus Wolf sagt:
    26. November 2018 um 11:42 Uhr

    Hallo und guten Tag,

    ich möchte eine Mail an immer denselben Empfänger verschicken. Die attachements sind jedoch täglich Andere. Die Dateien können nur über folgende Suchbefehle zugeordnet werden: heute erstellt oder hat endweder endung1 oder endung2. Es handelt sich immer um min. 2 Dateien deren Namen in Abhängigkeit zur Laufzeit generiert werden. Der Name wird nicht von mir, sondern von einem Fremdprogramm generiert. Ich hoffe du kannst mir helfen.

    Gruß

  6. Lensing Daniel sagt:
    26. November 2018 um 17:10 Uhr

    Hallo,
    vielen Dank für deinen Kommentar.
    Es handelt sich bei deiner Anfrage um ein anderes Start- sowie Zielszenario.
    Gern helfe ich dir bei deiner Aufgabenstellung.

    Liebe Grüße
    Daniel

  7. Daniel Furrer sagt:
    14. März 2019 um 18:26 Uhr

    Hallo Daniel
    Ich habe Deinen Code gefunden und versucht in eine Excel Anwendung einzubauen, ein merkwürdiges Phänomen verhindert aber, dass meine Anforderungen erfüllt werden.
    Die versendete Datei entspricht nicht dem letzten Stand von derjenigen die ich auf dem Bildschirm habe, es fehlen diverse Eingaben?
    Gibt es dazu eine Erklärung, Lösung ?

  8. Lensing Daniel sagt:
    20. März 2019 um 16:35 Uhr

    Hallo Daniel,
    sorry für die Verzögerung.

    Vielleicht erst einmal eine doofe Frage:
    Vor der Nutzung des Makros hast du die Datei mit deinen fehlenden Eingaben gespeichert?
    Die Speicherung übernimmt das Skript aktuell nicht.

    Ausserdem wäre es interessant, welche Office-Version du im Einsatz hast.

    Liebe Grüße
    Daniel

  9. Kerstin Volkenand sagt:
    4. April 2019 um 08:40 Uhr

    Hallo,

    ich habe den Code ausprobiert und möchte meine Standard Signatur automatisch einfügen.
    Es funktioniert leider nicht so mit dem GetInspector.Display
    Für einen Tip wäre ich dankbar.

    ‚Code
    ‚try mail mail send auskommentiert für ansicht vor dem Senden
    Dim Nachricht As Object, OutlookApplication As Object
    Set OutlookApplication = CreateObject(„Outlook.Application“)

    Dim Anhang As String
    Anhang = ThisWorkbook.FullName
    Set Nachricht = OutlookApplication.CreateItem(0)
    With Nachricht

    .GetInspector.Display
    .To = „kerstin@test.de“
    .Subject = „TEst“
    ‚.Attachments.Add Anhang
    .HTMLBody = „Sehr geehrte Damen und Herren,im Anhang erhalten Sie die Liste.“
    .Attachments.Add („my.zip“)
    ‚Cursor ans Ende der EMail setzen
    VBA.SendKeys „^{END}“, True
    ‚Name der gespeicherten Signatur – bitte anpassen
    strSignatur = „KV“
    ‚Einfügen einer bestimmten Signatur
    .GetInspector.CommandBars.Item(„Insert“).Controls(„Signatur“).Controls(strSignatur). _
    Execute
    .Display

  10. Lensing Daniel sagt:
    4. April 2019 um 20:12 Uhr

    Hallo Frau Volkenand,
    ich hatte heute Abend etwas Zeit mir ihr Problem anzuschauen. Dabei ist eine Lösung für ihr Problem aufgetaucht. Ich habe mir erlaubt dieses in einen Blogartikel zu „verpacken“: https://www.dalecom.de/e-mail-mit-anhang-versenden-ueber-vba-mit-signatur/

    Liebe Grüße
    Daniel Lensing

  11. Michelle Pennewitz sagt:
    12. Januar 2021 um 15:39 Uhr

    Hallo Herr Lensing,

    ich arbeite bereits seit einem Jahr mit einem Baustein Ihres Makros und es klappt einwandfrei.

    Allerdings komme ich nun zu einem Punkt, der für mich nicht ganz verständlich ist. Ich benötige das Makro für meine Arbeit „Neues PoC“

    Die eine Abteilung füllt ein Excel Formular aus und schickt dieses per klick auf den „Send“ Button per Mail an uns raus.

    Nun soll jedoch noch ein weiteres Dokument automatisch via VBA hinzugefügt werden.

    Wenn ich die folgende angegebene Variante verwenden möchte:

    ‚You can add other files also like this
    ‚.Attachments.Add („C:\test.txt“)

    Und auf das Laufwerk sowie den Dateinamen verweisen möchte funktioniert es zwar, wenn ich das Makro mit dem „Send“ Button starte, jedoch funktioniert es nicht, wenn meine Kollegen dieses starten sollen.

    Können Sie mir eventuell hier weiterhelfen? Ich hoffe das dieses Forum noch aktiv ist.

    Hier nochmal das komplette Makro:

    Sub Send_active_sheet_via_Outlook()
    Dim FileExtStr As String
    Dim FileFormatNum As Long
    Dim Sourcewb As Workbook
    Dim Destwb As Workbook
    Dim TempFilePath As String
    Dim TempFileName As String
    Dim OutApp As Object
    Dim OutMail As Object

    With Application
    .ScreenUpdating = False
    .EnableEvents = False
    End With

    Set Sourcewb = ActiveWorkbook

    ‚Copy the ActiveSheet to a new workbook
    Sourcewb.Sheets(„Tabelle1“).Copy
    Set Destwb = ActiveWorkbook

    ‚Determine the Excel version and file extension/format
    With Destwb
    If Val(Application.Version) < 12 Then
    'You use Excel 97-2003
    FileExtStr = ".xls": FileFormatNum = -4143
    Else
    'You use Excel 2007-2016
    Select Case Sourcewb.FileFormat
    Case 51: FileExtStr = ".xlsx": FileFormatNum = 51
    Case 52:
    If .HasVBProject Then
    FileExtStr = ".xlsm": FileFormatNum = 52
    Else
    FileExtStr = ".xlsx": FileFormatNum = 51
    End If
    Case 56: FileExtStr = ".xls": FileFormatNum = 56
    Case Else: FileExtStr = ".xlsb": FileFormatNum = 50
    End Select
    End If
    End With

    ' 'Change all cells in the worksheet to values if you want
    ' With Destwb.Sheets(1).UsedRange
    ' .Cells.Copy
    ' .Cells.PasteSpecial xlPasteValues
    ' .Cells(1).Select
    ' End With
    ' Application.CutCopyMode = False

    'Save the new workbook/Mail it/Delete it
    TempFilePath = Environ$("temp") & "\"
    TempFileName = "Onboarding Formular " & Format(Now, "dd-mmm-yy")

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    strText = Sourcewb.Sheets("TextBox").Shapes("TextBox 1").TextFrame.Characters.Text
    'strText = TextBox.Shapes("TextBox 1").TextFrame2.TextRange.Text

    With Destwb
    .SaveAs TempFilePath & TempFileName & FileExtStr, FileFormat:=FileFormatNum
    On Error Resume Next
    With OutMail
    .to = "xx"
    .CC = "xx"
    .BCC = ""
    .Subject = "Set-up for POC"
    .Body = strText
    .Attachments.Add Destwb.FullName
    .Attachments.Add ("Y:\POC\TestFile.xltm")
    'You can add other files also like this
    '.Attachments.Add ("C:\test.txt")
    .Display 'or use .Send
    End With
    On Error GoTo 0
    .Close savechanges:=False
    End With

    'Delete the file you have send
    Kill TempFilePath & TempFileName & FileExtStr

    Set OutMail = Nothing
    Set OutApp = Nothing

    With Application
    .ScreenUpdating = True
    .EnableEvents = True
    End With

    End Sub

    Besten Dank!

    Liebe Grüße
    Michelle Pennewitz

  12. Detlef sagt:
    19. Oktober 2022 um 15:42 Uhr

    Hallo,

    ich bekomme in Zeile Anhang die Meldung Laufzeitfehler ‚438‘

  13. Daniel Lensing sagt:
    25. Oktober 2022 um 09:19 Uhr

    Hallo Detlef,
    welche Office-Version hast du im Einsatz?

    Viele Grüße
    Daniel

  14. Dennis sagt:
    26. Januar 2023 um 15:44 Uhr

    Guten Tag Herr Lensing,
    Ich habe den Code wie oben übernommen und lediglich die Bezüge wie Mail und Betreff verändert.

    Leider werden mit meinen Dokument Bestellungen ausgelöst weshalb es schreibgeschützt ist. Mit dem Code wird der Anhang versendet, dieser ist allerdings leer.

    Besteht die Möglichkeit, dass aktuelle Dokument mit den Eingaben vom Nutzer zu übernehmen und dieses dann zu versenden?

    Das Eingabeformular soll quasi ausgefüllt werden, anschließend versendet und beim nächsten öffnen leer sein, sodass die Eingaben mit sämtlichen Abfragen von neu beginnt.

    Beste Grüße
    Dennis

  15. Carlos De Almeida sagt:
    8. August 2024 um 12:46 Uhr

    Vielen Dank für die Bereitstellung des codes.
    Habe ich auf meine Bedürfnisse angepasst und bei dem Anhang werden die LERRZEICHEN mit %20 belegt. Wie kann das verhindert werden?
    Sub Mailversand()
    Dim Nachricht As Object, OutlookApplication As Object
    Set OutlookApplication = CreateObject(„Outlook.Application“)
    Dim Anhang As String
    Anhang = ThisWorkbook.FullName
    Set Nachricht = OutlookApplication.CreateItem(0)
    With Nachricht
    .To = Range(„F15“).Value
    .Subject = Format(Date, „YYYYMMDD“) & “ – “ & Range(„a20″).Value & “ – “ & Range(„b20″).Value & “ – “ & Range(„c20″).Value & “ – “ & Range(„h5″).Value & “ – “ & „Muster_Tabelle“
    .attachments.Add Anhang
    .Display
    End With
    Set OutlookApplication = Nothing
    Set Nachricht = Nothing
    End Sub
    Ergebnis:
    20240808%20-%20123%20-%20231%20-%20312%20-%20321%20-%20Muster_Tabelle.xlsm
    statt
    20240808 – 123 – 231 – 312 – 321 – Muster_Tabelle.xlsm

    Vielen Dank
    fG
    de Almeida

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Daniel Lensing

Ich betreibe diesen Blog, bei dem ich meine Erfahrungen aus der IT & dem Berufsalltag sowie dem Wahnsinn des Lebens mit Höhen und Tiefen. Darunter meine „Erlebnisreise“ zum Planeten „Diabetes mellitus Typ-2“.

Translate:

Follow us

Kategorien

  • Allgemein (1)
  • Client (235)
    • Android (7)
    • Fedora (Linux) (5)
    • iOS (5)
    • Mac OS X (5)
    • Peripherie (5)
    • Ubuntu (Linux) (8)
    • Windows 10 (60)
    • Windows 11 (21)
    • Windows 7 (100)
    • Windows 8 (36)
    • Windows 8.1 (28)
    • Windows Mobile (2)
    • Windows Vista (65)
    • Windows XP (21)
  • Cloud (15)
    • Amazon AWS (1)
    • Microsoft Azure (7)
    • Office 365 (9)
  • Fortbewegung (57)
    • Auto (18)
    • Bahn (18)
    • Beinarbeit (6)
    • Flugzeug (4)
    • Zweirad (14)
  • IT-Nachrichten (37)
  • Leben Beruf und Gesundheit (201)
    • #t2dhero (50)
    • Arbeitszimmer (30)
    • Audio (20)
    • Film / Kino (7)
    • Gedanken (78)
    • Gesundheit (31)
    • Internet (5)
    • Lebensmittel & Essen (22)
    • Lesestoff (18)
    • Sport (11)
    • Veranstaltung (3)
  • Lehren & Lernen (49)
    • Forschung (1)
    • Konferenzen (3)
    • Präsentation (4)
    • Zertifizierung (42)
  • Programme (325)
    • Android-Apps (27)
    • Eigene Tools (12)
    • iOS-Apps (6)
    • Office (86)
    • Patchday+Updates (74)
    • Software (150)
    • Spiele (3)
    • Windows Phone-Apps (2)
  • Programmierung (92)
    • AutoIT (1)
    • KiXtart (1)
    • PHP (3)
    • Power Automate (1)
    • Powershell (61)
    • VB.NET (10)
    • VBA (10)
    • VBS (10)
  • Server (159)
    • Citrix XenServer (2)
    • Exchange Server (26)
    • Lync Server (1)
    • System Center (4)
    • Ubuntu Server (2)
    • Windows Home Server (2)
    • Windows Server (92)
    • Windows Server 2012 (45)
    • Windows Server 2016 (15)
    • Windows Server 2019 (18)
    • Windows Server 2022 (15)
    • Windows Server 2025 (8)
  • Telekommunikation (38)
    • Festnetz (3)
    • Internet (13)
    • Mobilfunk (23)
  • Verkauf & Verlosung (1)
  • Web-Installationen (36)
    • Joomla (4)
    • Mastodon (1)
    • MediaWiki (9)
    • phpMyAdmin (2)
    • Piwik (4)
    • Wordpress (20)
Mastodon

Copyright © 2025 Daniels Tagesmeldungen.

Powered by PressBook WordPress theme