E-Mail-Versand über Outlook mit Excel VBA
Schritt-für-Schritt-Anleitung
Um eine E-Mail über Outlook aus Excel zu versenden, kannst du den folgenden VBA-Code verwenden. Dieser Code speichert die aktive Tabelle als Datei und versendet sie als Anhang:
Sub SendMail()
Dim MyMessage As Object, MyOutApp As Object
Dim SavePath As String
Dim AWS As String
SavePath = "C:\Dein\Speicherort" ' Ändere dies auf deinen gewünschten Speicherort
' Kopiert aktuelles Sheet in eine neue Mappe
ActiveSheet.Copy
' Speichert die Datei unter dem Tabellennamen und einem Zeitstempel
ActiveWorkbook.SaveAs SavePath & "\" & ActiveSheet.Name & "_" & Format(Now, "ddmmyyyy_hhmm") & ".xls"
' Mappenname wird an Variable übergeben und anschließend gleich geschlossen
With ActiveWorkbook
AWS = .FullName
.Close
End With
' Outlook Anwendung initialisieren
Set MyOutApp = CreateObject("Outlook.Application")
' Nachrichtenobject erstellen
Set MyMessage = MyOutApp.CreateItem(0)
With MyMessage
.To = "max.mustermann@gmail.com"
.Subject = "Täglicher Test am " & Date
' Hier wird die temporär gespeicherte Datei als Attachment zugefügt
.Attachments.Add AWS
.HTMLBody = "Das ist ein Test." & vbCrLf & "Bitte ignorieren."
.Display ' Zeige die E-Mail an
' .Send ' Verwende dies, um die E-Mail direkt zu versenden
Kill AWS ' Löscht die temporäre Datei
End With
MyOutApp.Quit
Set MyOutApp = Nothing
Set MyMessage = Nothing
End Sub
Häufige Fehler und Lösungen
Ein häufig auftretender Laufzeitfehler ist '1004', welcher anzeigt, dass Excel nicht auf die Datei zugreifen kann. Mögliche Ursachen sind:
- Der Name des Dokuments oder der Pfad ist nicht korrekt.
- Die Datei wird von einem anderen Programm verwendet.
- Der Name der Arbeitsmappe ist identisch mit einem anderen, schreibgeschützten Dokument.
Stelle sicher, dass der SavePath
korrekt gesetzt ist und dass du Schreibrechte für diesen Ordner hast.
Alternative Methoden
Wenn du an einer Methode interessiert bist, die die E-Mail automatisch sendet, kannst du die .Send
-Methode statt .Display
verwenden. Hier ein Beispiel:
.Send ' Diese Zeile sendet die E-Mail direkt
Stelle sicher, dass du die E-Mail-Adresse und den Betreff korrekt einstellst, bevor du diese Methode anwendest.
Praktische Beispiele
Hier ist ein Beispiel, wie du ein Makro mit einer anderen Arbeitsmappe verknüpfen kannst. Dazu kannst du den folgenden Code verwenden, um eine E-Mail mit einem Screenshot der aktiven Tabelle zu versenden:
Sub SendScreenshot()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.UsedRange.Copy ' Kopiert den verwendeten Bereich
With CreateObject("Outlook.Application").CreateItem(0)
.To = "max.muster@test.de"
.Subject = "Screenshot der Tabelle"
.GetInspector.WordEditor.Range.Paste
.Display ' Oder .Send um direkt zu senden
End With
End Sub
Tipps für Profis
- Verwendung von Gmail: Du kannst auch einen Gmail-Verteiler erstellen, ohne Kontakte hinzuzufügen, indem du die E-Mail-Adressen direkt im Code speicherst.
- Debugging: Nutze den VBA-Editor und setze Haltepunkte, um den Code Schritt für Schritt zu überprüfen, wenn etwas nicht funktioniert.
- Makros optimieren: Verwende den Makrorecorder, um dir eigene Makros zu erstellen und zu lernen, wie du VBA effizient nutzen kannst.
FAQ: Häufige Fragen
1. Kann ich den E-Mail-Versand anpassen?
Ja, du kannst den Betreff, die Empfängeradresse und den Body der E-Mail ganz nach deinen Wünschen anpassen.
2. Wie kann ich die E-Mail direkt senden, ohne sie vorher anzuzeigen?
Ersetze die .Display
-Methode mit .Send
in deinem VBA-Code.
3. Was mache ich, wenn der Speicherort nicht verfügbar ist?
Stelle sicher, dass der angegebene Speicherort existiert und dass du über die nötigen Berechtigungen verfügst, um dort zu speichern.