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

Excel VBA Email - wenn kein Anhang, dann..

Forumthread: Excel VBA Email - wenn kein Anhang, dann..

Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 09:31:27
Hauser
Guten Morgen allerseits,
ich habe eine Excel-Datei, aus welcher per Button in Outlook eine Email mit Inhalten dieser Datei erstellt wird.
Dim OutApp As Object, Mail As Object, i
Dim Nachricht
If ActiveWorkbook.ActiveSheet.Range("G6") = "Bestätigt" Then
Set OutApp = CreateObject("Outlook.Application")
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = "" & Range("M8") & ""
.CC = "Max Mustermann"
.Subject = "Bestellnummer" & Range("D6") & ""
.Display
End With
Set OutApp = Nothing
Set Nachricht = Nothing
Sowohl "An" als auch "CC" und "Betreff" füllen sich automatisch, der Text der Email ist abhängig vom Inhalt der Range G6 ("In Bearbeitung" oder "Bestätigt") und wird mit Application.SendKeys eingegeben. So weit so gut.
Alle Emails, die mit dem Status "Bestätigt" rausgehen, erhalten auch immer einen Anhang (eine bestimmte PDF-Datei).
Kann ich eine Warnmeldung einbauen, falls jemand versucht diese Email ohne einen Anhang zu versenden? Ich könnte natürlich eine Msgbox erscheinen lassen, die den Nutzer daran erinnert ("Denk an den Anhang!"), aber gibt es auch eine Möglichkeit, dies in Abhängigkeit zum Anhang zu setzen?
Gruß
Hauser

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 09:38:02
Michael
Hallo Hauser!
Würde ich in Outlook (über Outlook-VBA) prüfen. Wie das umzusetzen ist, kann ich nicht exakt sagen, da ich in Outlook-VBA de facto keine Kenntnisse habe. Ich kann Dir nur u.a. Makro für Outlook anbieten, dass ich mir mal zusammengebastelt habe, um beim Senden von Nachrichten zu warnen, wenn keine Anlagen hinzugefügt sind - hierbei wird nach entsprechenden Schlüsselwörtern im Text gesucht. Sowas könnte für Dich evtl. auch funktionieren.
Muss in "ThisOutlookSession"
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
' Checkt ob Anlagen vorhanden sind (für Outlook 2010)
Dim Warnung As Variant
If InStr(1, Item.Body, "Beilage", vbTextCompare) > 0 _
Or InStr(1, Item.Body, "beiliegend", vbTextCompare) > 0 _
Or InStr(1, Item.Body, "Anlage", vbTextCompare) > 0 _
Or InStr(1, Item.Body, "Anhang", vbTextCompare) > 0 _
Or InStr(1, Item.Body, "angefügt", vbTextCompare) > 0 _
Or InStr(1, Item.Body, "anbei", vbTextCompare) > 0 _
Or InStr(1, Item.Body, "beigefügt", vbTextCompare) > 0 Then
If Item.Attachments.Count = 0 Then
Warnung = MsgBox("Es wurden keine Anlagen hinzugefügt, trotzdem senden?", _
vbYesNo, "Fehlende E-Mail Anlagen?")
If Warnung = vbNo Then Cancel = True
End If
End If
End Sub
LG
Michael

Anzeige
AW: Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 10:33:37
Nepumuk
Hallo,
wenn du einen Verweis auf die Library setzt, kannst du das auch in Excel selbst überwachen und musst nicht noch zusätzlich etwas in Outlook programmieren. Ich würde aber eher dazu tendieren den Anhang automatisch hinzuzufügen. Leider geht aus dem Codefragment nicht hervor was anschließend noch passiert, sprich wo der Status wie eingetragen wird.
Gruß
Nepumuk

Anzeige
AW: Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 11:38:44
Hauser
Hallo,
vielen Dank für die beiden Lösungsvorschläge.
Leider sind beide keine Option für mich. Ein Outlook-Makro (wusste gar nicht dass es das gibt, sehr cool) ist nicht möglich, da nicht nur ich alleine mit der Excel-Datei arbeite.
Ein Verweis auf die Library geht leider auch nicht, da Speicherort und Name der anzuhängenden PDF-Datei stark variieren.
Trotzdem vielen Dank und beste Grüße
Hauser

Anzeige
AW: Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 12:06:41
Nepumuk
Hallo,
ein Verweis auf die Library bedeutet einen Verweis auf Outlook. Und der sollte innerhalb einer Firma kein Problem darstellen weil alle mit der selben Office-Version arbeiten. Oder?
Dann bleibt immer noch die Frage wo sich der Status befindet. Im Betreff in Body .... ?
Gruß
Nepumuk

Anzeige
AW: Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 12:32:37
Hauser
Hi Nepumuk,
in der Email selbst steht der Status nicht als String, weder im Betreff noch im Text.
Stattdessen wird ein Tabellenbereich kopiert und als Image in die Email eingefügt. In diesem steht dann Besteller, Kosten, Status usw.
In der Excel-Datei steht der Status wie erwähnt in der Range G6.
Ich hoffe das hilft dir weiter.
Gruß
Hauser

Anzeige
AW: Excel VBA Email - wenn kein Anhang, dann..
19.05.2015 13:41:02
Nepumuk
Hallo,
hier mal ein Beispiel: https://www.herber.de/bbs/user/97717.xlsm
Wenn du den Code in deine Mappe übernehmen willst, musst du im VBA-Editor unter Extras - Verweise ein Häkchen bei "Microsoft Outlook 14.0 Object Library" setzen. In der Prozedur in der du die Mail erstellst musst du am Ende die Prozedur "InitClass" starten.
Gruß
Nepumuk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Excel VBA: Warnung bei fehlendem Anhang in Outlook


Schritt-für-Schritt-Anleitung

  1. Öffne den VBA-Editor in Excel:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge den folgenden Code in dein Modul ein:

    Dim OutApp As Object, Mail As Object
    Dim Nachricht
    If ActiveWorkbook.ActiveSheet.Range("G6") = "Bestätigt" Then
       Set OutApp = CreateObject("Outlook.Application")
       Set Nachricht = OutApp.CreateItem(0)
       With Nachricht
           .To = "" & Range("M8") & ""
           .CC = "Max Mustermann"
           .Subject = "Bestellnummer " & Range("D6") & ""
           .Display
       End With
       ' Hier wird der Anhang überprüft
       If Mail.Attachments.Count = 0 Then
           MsgBox "Denk an den Anhang!", vbExclamation
       End If
       Set OutApp = Nothing
       Set Nachricht = Nothing
    End If
  3. Speichere die Datei als Makro-aktivierte Arbeitsmappe:

    • Wähle “Datei” > “Speichern unter” und wähle den Dateityp „Excel-Makro-aktivierte Arbeitsmappe (*.xlsm)“.
  4. Teste den Button, um eine E-Mail zu senden:

    • Klicke auf den Button, um die E-Mail zu generieren, und prüfe, ob die Warnung erscheint, wenn kein Anhang vorhanden ist.

Häufige Fehler und Lösungen

  • Fehler: E-Mail wird ohne Anhang gesendet

    • Lösung: Stelle sicher, dass die Überprüfung der Anhänge im Code implementiert ist, wie im Beispiel oben.
  • Fehler: Der Code funktioniert nicht in Excel

    • Lösung: Überprüfe, ob du die richtige Outlook-Bibliothek referenziert hast. Gehe zu „Extras“ > „Verweise“ und aktiviere „Microsoft Outlook xx.x Object Library“.

Alternative Methoden

  • Verwendung von Outlook VBA: Du kannst auch ein Makro in Outlook erstellen, das prüft, ob der Text der E-Mail bestimmte Schlüsselwörter enthält, und somit eine Warnung gibt, wenn der Anhang fehlt. Hier ist ein Beispiel:
    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
       If Item.Attachments.Count = 0 Then
           If InStr(1, Item.Body, "Beilage", vbTextCompare) > 0 Then
               If MsgBox("Es wurden keine Anlagen hinzugefügt, trotzdem senden?", vbYesNo) = vbNo Then
                   Cancel = True
               End If
           End If
       End If
    End Sub

Praktische Beispiele

  • Beispiel für SAP-Mails: Wenn du SAP E-Mails mit Anhängen versenden möchtest, kannst du den gleichen Code anpassen, um die spezifischen Anforderungen von SAP zu berücksichtigen. Achte darauf, dass die PDFs korrekt referenziert sind, z.B.:
    Mail.Attachments.Add "C:\Pfad\zur\Datei.pdf"

Tipps für Profis

  • Automatisiere das Hinzufügen von Anhängen: Wenn du häufig denselben Anhang verwendest, kannst du den Pfad zur Datei in eine Zelle in Excel schreiben und den Code anpassen, um die Datei automatisch anzuhängen.

  • Verwende Fehlerbehandlung: Integriere On Error Resume Next und On Error GoTo 0, um sicherzustellen, dass dein Code robust ist und nicht bei einem Fehler abstürzt.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die E-Mail immer einen Anhang hat? Die einfachste Methode ist, den Code so zu schreiben, dass er vor dem Senden der E-Mail prüft, ob ein Anhang vorhanden ist. Wenn nicht, kann eine Warnmeldung erscheinen.

2. Funktioniert dieser Code in allen Excel-Versionen? Der Code sollte in den meisten modernen Versionen von Excel und Outlook funktionieren, die VBA unterstützen. Achte darauf, dass die Outlook-Bibliothek korrekt referenziert ist.

3. Kann ich auch mehrere Anhänge hinzufügen? Ja, du kannst mehrere Anhänge hinzufügen, indem du die Attachments.Add-Methode mehrmals aufrufst. Achte darauf, den richtigen Pfad für jede Datei zu verwenden.

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