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

? Mit VBA Outlook-Nachricht öffnen ...

Forumthread: ? Mit VBA Outlook-Nachricht öffnen ...

? Mit VBA Outlook-Nachricht öffnen ...
09.05.2022 13:46:52
Micha
Einen schönen Gruss ins Forum :-)
In der Hoffnung, dass mir hier geholfen werden kann eine kleine Anfrage. Für hilfreiche Antworten schon jetzt herzlichen Dank.
Was möchte ich machen:
In einem Tabellenblatt habe ich einen Button (Textfeld mit VBA-Code verbunden). Beim Link auf diesen Button soll Outlook geöffnet und die aktuelle Excel-Datei als Anlage angehängt werden. Zudem sollen folgende Informationen in der Mail vorausgefüllt werden:
a) Empfänger der Mail
b) Betreff der Mail
c) Text der Mail
Insgesamt gibt es mehrere Tabellenblätter, jeweils mit Buttons. Je nachdem, in welchem Tabellenblatt der Button gedrückt wird, gehen die Mails an verschiedene Empfänger.
Für a) und b) habe ich bereits an anderer Stelle eine Lösung gefunden:

Sub Mappe_per_Email_verschicken()
Application.Dialogs(xlDialogSendMail).Show "jemand@irgendwo", "Betreff"
End Sub
Kann mir jemand verraten, wie ich in diesen Code noch einen vordefinierten Nachrichtentext einfügen kann?
Der Text soll z.B. so aussehen (d.h. mit definierten Zeilenumbrüchen):
Achtung:
Dieser Nachricht müssen vor dem Versand als weitere Anlagen noch beigefügt werden:
- Vorlage xy als PDF-Datei
- Vorlage yz als PDF-Datei
- ...


Auf makro-excel.de habe ich noch etwas anderes gefunden:

Sub EmailManuellAbsenden()
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = deinname@deinedomain.de
.Subject = "Betreff"
.Body = "Ihre Nachricht."
.Display        'Erstellt die Email und öffnet diese. Der Versand erfolgt anschließend manuell vom User!
End With
End Sub
Bei dieser Lösung verstehe ich nun nicht,
- wie man die Excel-Datei, aus der heraus man die Mail generieren will, anhängen kann
- wie man den Text mit Zeilenumbrüche gestalten kann (siehe oben)
Kann hier jemand helfen?
Gibt es vielleicht noch eine ganz andere, bessere, Möglichkeit?
Vielen Dank
Micha
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ? Mit VBA Outlook-Nachricht öffnen ...
09.05.2022 13:52:50
Nepumuk
Hallo Micha,
so geht das:

Sub EmailManuellAbsenden()
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject(Class:="Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = "deinname@deinedomain.de"
.Subject = "Betreff"
.Body = "Hallo," & vbLf & vbLf & "Ihre Nachricht." & vbLf & vbLf & "Gruß Micha"
.Attachment.Add ThisWorkbook.FullName
.Display
End With
Set objMail = Nothing
Set objOutlook = Nothing
End Sub
Gruß
Nepumuk
Anzeige
AW: ? Mit VBA Outlook-Nachricht öffnen ...
09.05.2022 13:55:17
Nepumuk
Oooooooops,
ein s vergessen. Also so:
Attachments.Add ThisWorkbook.FullName
Gruß
Nepumuk
AW: ? Mit VBA Outlook-Nachricht öffnen ...
09.05.2022 14:21:00
Micha
Vielen Dank, das funktioniert schon gut.
Geht es auch, dass ich die Mailadresse nicht als Festwert eingebe, sondern Excel die automatisch z.B. aus Zelle F2 des aktuellen Arbeitsblattes holen soll?
Viele Grüsse
Micha
Anzeige
AW: ? Mit VBA Outlook-Nachricht öffnen ...
09.05.2022 14:25:50
Nepumuk
Hallo Micha,
klar:

.To = Range("F2").Text
Gruß
Nepumuk
Mehr als perfekt, 1001 Dank!
09.05.2022 14:54:55
Micha
Mehr als perfekt!
Detailfragen ...
10.05.2022 07:15:57
Micha
Guten Morgen in die Runde,
nach "kreativer Nacht" und nach wie vor begeistert von
a) der Hilfsbereitschaft hier
und
b) den Möglichkeiten in Excel
hätte ich nochmals ein paar Nachfragen.
Geht es, dass am Beispiel oben
.Body = "Hallo," & vbLf & vbLf & "Ihre Nachricht." & vbLf & vbLf & "Gruß Micha"
das Wort "Hallo" in roter Farbe + Fett
das Wort "Nachricht" unterstrichen
und am Ende statt "Gruß Micha" automatisch die Outlook-Signatur des Anwenders (und damit Absenders der Mail) eingefügt wird?
Vielen Dank für jedwede hilfreiche Antwort schon jetzt.
Herzliche Grüsse
Micha
Anzeige
AW: Detailfragen ...
10.05.2022 09:26:23
peterk
Hallo

Sub EmailManuellAbsenden()
Dim objOutlook As Object
Dim objMail As Object
Dim olOldbody As String
Set objOutlook = CreateObject(Class:="Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.GetInspector.Display
olOldbody = .htmlBody
.To = "deinname@deinedomain.de"
.Subject = "Betreff"
.htmlBody = "Hallo, #br>#br>" & _
"Ihre #span style=""color: red;"">Nachricht #b>fett#/b> #/span> von heute #br>#br>" & _
"Gruß #u>Micha #/u>" & _
olOldbody
.Attachment.Add ThisWorkbook.FullName
.Display
End With
Set objMail = Nothing
Set objOutlook = Nothing
End Sub
Und alle "#"durch " Peter
Anzeige
AW: Detailfragen ...
17.05.2022 09:26:22
Micha
Kann erst heute reagieren.
Vielen Dank für die Hilfe!
Das funktioniert soweit ganz gut, die Mail wird geöffnet usw ... alles fein.
In Excel selber poppt aber ein Fehlerfenster auf "Objekt unterstützt diese Eigenschaft oder Methode nicht".
Was ist da jetzt noch falsch?
Besten Dank für weitere Hilfestellung!
Micha
Anzeige
AW: Detailfragen ...
17.05.2022 09:30:58
Micha
noch offenes Thema
AW: Detailfragen ...
17.05.2022 09:32:16
Oberschlumpf
Hi
ich weiß nicht, ob meine Antwort hier noch eingetragen wird.
Micha , du musst n neuen Beitrag erstellen, da dieser, zu dem du weiterhin Hilfe brauchst, ins Archiv verschoben wurde.
Ciao
Thorsten
AW: Detailfragen ...
17.05.2022 09:39:54
peterk
Hallo
.Attachments.Add ThisWorkbook.FullName
statt
.Attachment.Add ThisWorkbook.FullName
Peter
Anzeige
AW: ? Mit VBA Outlook-Nachricht öffnen ...
09.05.2022 13:54:30
mumpel
Hallo!
Stichwort: .Attachments.Add
Gruß, René
;
Anzeige
Anzeige

Infobox / Tutorial

Mit VBA Outlook-Nachricht öffnen und automatisieren


Schritt-für-Schritt-Anleitung

Um eine Outlook-Nachricht mit VBA aus Excel heraus zu öffnen und automatisch Informationen wie Empfänger, Betreff und Nachrichtentext einzufügen, kannst du das folgende Makro verwenden. Stelle sicher, dass du die notwendigen Referenzen in deinem Excel VBA-Editor aktiviert hast.

  1. Öffne den VBA-Editor in Excel durch Drücken von ALT + F11.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" klickst und "Einfügen" > "Modul" wählst.

  3. Kopiere den folgenden Code in das Modul:

    Sub EmailManuellAbsenden()
       Dim objOutlook As Object
       Dim objMail As Object
       Set objOutlook = CreateObject("Outlook.Application")
       Set objMail = objOutlook.CreateItem(0)
       With objMail
           .To = Range("F2").Text  ' Empfänger aus Zelle F2
           .Subject = "Betreff"
           .Body = "Achtung:" & vbLf & _
                   "Dieser Nachricht müssen vor dem Versand als weitere Anlagen noch beigefügt werden:" & vbLf & _
                   "- Vorlage xy als PDF-Datei" & vbLf & _
                   "- Vorlage yz als PDF-Datei" & vbLf & _
                   "Gruß Micha"
           .Attachments.Add ThisWorkbook.FullName  ' Aktuelle Excel-Datei anhängen
           .Display  ' Zeigt die Email zur Überprüfung an
       End With
       Set objMail = Nothing
       Set objOutlook = Nothing
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Füge einen Button (z.B. ein Textfeld) ein, und verknüpfe diesen mit deinem Makro.

Jetzt kannst du den Button anklicken, und es öffnet sich eine neue Outlook-Nachricht mit den vordefinierten Informationen.


Häufige Fehler und Lösungen

  • Fehler: "Objekt unterstützt diese Eigenschaft oder Methode nicht."

    • Prüfe, ob du die Attachments.Add-Methode korrekt verwendet hast. Der korrekte Befehl lautet .Attachments.Add.
  • Fehler: Outlook öffnet sich nicht.

    • Stelle sicher, dass Outlook korrekt installiert ist und du die richtige Version verwendest. Das Makro ist für Outlook 2022 optimiert.

Alternative Methoden

Falls du eine andere Methode ausprobieren möchtest, kannst du auch die SendMail-Funktion nutzen. Diese Methode ist einfacher, erlaubt jedoch weniger Anpassungen.

Sub Mappe_per_Email_verschicken()
    Application.Dialogs(xlDialogSendMail).Show "jemand@irgendwo", "Betreff"
End Sub

Diese Methode öffnet den Standard-Mail-Client und sendet die Datei an die angegebene E-Mail-Adresse.


Praktische Beispiele

  1. E-Mail mit HTML-Formatierung:

    Wenn du eine E-Mail im HTML-Format senden möchtest, kannst du folgendes Beispiel verwenden:

    Sub EmailManuellAbsendenHTML()
       Dim objOutlook As Object
       Dim objMail As Object
       Set objOutlook = CreateObject("Outlook.Application")
       Set objMail = objOutlook.CreateItem(0)
       With objMail
           .To = "deinname@deinedomain.de"
           .Subject = "Betreff"
           .HTMLBody = "<p>Hallo,</p><p>Ihre <span style='color:red;'>Nachricht</span> ist hier!</p>"
           .Attachments.Add ThisWorkbook.FullName
           .Display
       End With
       Set objMail = Nothing
       Set objOutlook = Nothing
    End Sub
  2. Automatisierung der Signatur:

    Um die Outlook-Signatur automatisch hinzuzufügen, kannst du die folgende Erweiterung nutzen:

    Dim olOldbody As String
    .GetInspector.Display
    olOldbody = .HTMLBody
    .HTMLBody = "Hier steht dein Text" & olOldbody

Tipps für Profis

  • Nutze Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Teste dein Makro in einer sicheren Umgebung, bevor du es in der Produktion verwendest.
  • Verwende Kommentare im Code, um die Funktionalität zu erklären und die Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Frage
Kann ich die E-Mail-Adresse dynamisch aus einer anderen Zelle beziehen?
Antwort: Ja, verwende einfach Range("F2").Text, um die Adresse aus Zelle F2 zu entnehmen.

2. Frage
Kann ich den Nachrichtentext formatieren?
Antwort: Ja, du kannst die HTMLBody-Eigenschaft verwenden, um HTML-Formatierungen anzuwenden, z.B. für Farben und Schriftarten.

3. Frage
Wie kann ich mehrere Empfänger hinzufügen?
Antwort: Trenne die E-Mail-Adressen mit einem Semikolon: .To = "email1@domain.com; email2@domain.com".

4. Frage
Was muss ich tun, wenn ich eine Fehlermeldung erhalte?
Antwort: Überprüfe den Code auf Tippfehler und stelle sicher, dass alle Objekte korrekt initialisiert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige