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

Forumthread: Makro EMail versenden via Outlook

Makro EMail versenden via Outlook
14.07.2016 10:54:48
amintire
Hallo, ich habe folgenden VBA Code der nicht richtig funktioniert.
Wo muss ich was ändern:
- Es soll Tabelle 1 verschickt werden
- Datei soll abgespeichert werden Test
- Mappe soll sich nach dem verschicken schließen
- Email Programm ist Outlook
Vielen Dank schon mal.
Grüße
Amintire
Option Explicit
Sub SendMail()
Dim MyMessage As Object, MyOutApp As Object
Dim SavePath As String
Dim AWS As String
'    SavePath = "H:" '"H:\Test\"
'Kopiert aktuelles Sheet in eine neue Mappe
'welche nur diese Tabelle enthält
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 anschliessend gleich geschlossen
With ActiveWorkbook
AWS = .FullName
.Close
End With
'InitializeOutlook = True
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
'Hier wird eine normale Text Mail erstellt
'.body = "Das ist ein Test" & vbCrLf & "Bitte ignorieren"
'Hier wird die HTML Mail erstellt
.HTMLBody = "Das ist ein Test." & vbCrLf & "Bitte ignorieren."
'Hier wird die Mail nochmals angezeigt
.Display
'Hier wird die Mail gleich in den Postausgang gelegt
'.Send
'Hier wird die temporäre Datei wieder gelöscht
Kill AWS
End With
MyOutApp.Quit
Set MyOutApp = Nothing
Set MyMessage = Nothing
End Sub

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro EMail versenden via Outlook
14.07.2016 12:36:02
baschti007
Wlecher Fehler und wo kommt er ``?
Gruß Basti

AW: Makro EMail versenden via Outlook
14.07.2016 13:58:23
amintire
Hallo Basti,
als Laufzeitfehler '1004' kommt die Meldung
Excel kann auf die Datei C:F9844100 nicht zugreifen. Dies kann mehrere Gründe haben:
- Der Name des Dokuments oder der Pfad ist nicht vorhanden
- Das Dokument wird von einem anderen Programm verwendet.
- Der Name der Arbeitsmappe, die gespeichert werden soll, ist identisch zu dem Namen eines anderen Dokuments, welches Schreibgeschützt ist.
Folgendes ist Gelb markiert:
ActiveWorkbook.SaveAs SavePath & "\" & ActiveSheet.Name & "_" & Format(Now, "ddmmyyyy_hhmm") _
& ".xls"

Anzeige
AW: Makro EMail versenden via Outlook
14.07.2016 14:44:55
baschti007
Lad mal deine Beispiel Datei hoch dann ist so was einfacher.
Gruß Basti

AW: Makro EMail versenden via Outlook
14.07.2016 15:39:51
baschti007
Guck mal ob das bei dir geht
Gruß basti
Sub SendMyMail()
Dim ws As Worksheet
Set ws = ActiveSheet
Set objOL = CreateObject("Outlook.Application")
Set objMail = objOL.CreateItem(0)
ws.UsedRange.Copy
With objMail
.To = "max.muster@test.de"
.Subject = "Betreff"
.GetInspector().WordEditor.Range.Paste
.Display
End With
Set objOL = Nothing
End Sub

Anzeige
AW: Makro EMail versenden via Outlook
14.07.2016 15:46:50
amintire
Hallo Basti,
also damit wird Outlook geöffnet, kann nicht automatisch auch gleich verschickt werden?
Und wo wird die Datei gespeichert? Also, senden, drucken, speichern, schließen sollte dabei sein.
Grüße
Amintire
AW: Makro EMail versenden via Outlook
15.07.2016 07:30:14
baschti007
So was kann man immer sehr gut selber mit dem Makrorecorder herausfinden musst du mal versuchen dadurch lernt/versteht man besser VBA.
Sub datei_save()
Application.DisplayAlerts = False '-- Wenn datei vorhanden wird sie überschieben und es wird  _
nicht nachgefragt
ActiveWorkbook.SaveAs Filename:="C:\Users\" & Environ("USERNAME") & "\Desktop\Mappe1.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False                           _
'-- Wird auf dem Desktop gespeichert
End Sub

Sub datei_drucken()
Application.ActivePrinter = "\\S123456\P0001235 auf Ne08:" '----- Drucker Name anpassen
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

Gruß Basti
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige