Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: E-Mail-Anhang per Makro individuell ändern

E-Mail-Anhang per Makro individuell ändern
05.04.2017 17:08:34
Marcus
Hallo zusammen,
ich bitte um eure Hilfe.
Ich habe eine xls. Datei die über ein Makro per Mail durch das Klicken eines Steuerelements verschickt werden soll.
Der Dateiname im Anhang soll durch den Klick auf den Button über eine Abfrage (Msgbox o.ä.) individuell geändert werden. Bsp:
Dateiname roh: Bauklötze
Dateiname im Anhang: Bauklötze_Stuttgart
Der Zusatz "Stuttgart" soll über diese Box an den Dateinamen mit "_" dran gehangen werden. Bei Eintippen "Berlin" dann entsprechend Bauklötze_Berlin. Diese Datei soll dann automatisch in eine Mail angehangen werden. Diese Mail soll dann die Empfänger und den Text automatisch füllen.
Geht sowas?
Viele Grüße
P.S.
Mein E-Mail Makro sieht bisher so aus:
Sub Excel_Workbook_via_Outlook_Senden()
Dim Nachricht As Object, OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
Dim AWS As String
AWS = ThisWorkbook.FullName
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = "max.mustermann@gmail.com"
.Subject = "Datenbank vom " & Date
.attachments.Add AWS
.Body = "Hallo zusammen," & vbCrLf & "" & vbCrLf & "anbei erhalten Sie die aktuelle Datenbank   _
_
für Ihre weitere Verwendung." & vbCrLf & "" & vbCrLf & "Mit freundlichen Grüßen"
.Display
End With
Set OutApp = Nothing
Set Nachricht = Nothing
End Sub

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mail-Anhang per Makro individuell ändern
06.04.2017 09:17:52
Michael
Hallo!
Habe Deinen Code auch gleich etwas aufgeräumt, inkl. Änderung des Dateinamens des Attachements per User-Eingabe: beim Starten dieses Makros wird der Benutzer zur Eingabe eines Textes aufgefordert, der dann an den Dateinamen des Attachements angefügt wird. Ein Abbruch der Eingabe-Aufforderung bricht das gesamte Makro (Mailversand) ab...
Sub MappeViaOutlookSenden()
Const AN$ = "max.mustermann@gmail.com"
Const BETREFF$ = "Datenbank vom "
Const ANREDE$ = "Hallo zusammen"
Const TEXT$ = "Anbei erhalten Sie die aktuelle Datenbank für Ihre weitere Verwendung."
Const GRUSS$ = "Mit freundlichen Grüßen"
Const TYP$ = ".xlsx"
Const SEP$ = "_"
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim Ol As Object, Eml As Object
Dim Suf$, Pfad$, Anhang$
Pfad = WbQ.Path & "\"
Suf = Application.InputBox("Dateinamen-Zusatz eingeben:", _
"Dateiname Email-Anhang", , , , , , 2)
If Suf = "" Or Suf = False Then Exit Sub
Anhang = Pfad & Left(WbQ.Name, InStr(1, WbQ.Name, ".") - 1) & SEP & Suf & TYP
WbQ.SaveCopyAs Anhang
Set Ol = CreateObject("Outlook.Application")
Set Eml = Ol.CreateItem(0)
With Eml
.To = AN
.Subject = BETREFF & Date
.Attachments.Add Anhang
.Body = ANREDE & vbLf & vbLf & TEXT & vbLf & vbLf & GRUSS
.Display
End With
Kill Anhang
Set Ol = Nothing
Set Eml = Nothing
End Sub
Anpassen müsstest Du ggf. den Dateityp, das ist bei mir aktuell ".xlsx", Du hast von .xls geschrieben, also bei Bedarf anpassen.
Grundsätzlich: Alle Variablen-Deklarationen IMMER in den Prozedur-Kopf, nicht zwischendrin im (fertigen) Code; das ist für die Wartung etc. nicht geeignet. Ich habe Dir auch einige Werte als Konstanten im Prozedurkopf angelegt, das macht das Makro etwas leichter handhabbar in der Wartung bzw. kannst Du es so schneller auf andere Anwendungsfälle anpassen.
Die grds. Vorgehensweise ist hier so: Zuerst speicherst Du eine Kopie Deiner Arbeitsmappe (am gleichen Ort) mit dem neuen Dateinamen, fügst diese Kopie als Attachement hinzu, und löschst danach die Dateikopie wieder (siehe Code).
Passt?
LG
Michael
Anzeige
AW: E-Mail-Anhang per Makro individuell ändern
06.04.2017 10:28:39
Marcus
Hallo Michael,
erstmal vielen Dank für deine tolle Unterstüzung.
Ich habe dein Makro jetzt mal in meine Excel-Mappe eingefügt. Erstmal eine Frage vorab: Wie speichert man Tabellen mit Makros in xls. oder xlsx Format ab? Der sagt dann bei mir immer das VBA nur mit einer entsprechenden xlsm Datei abgespeichert werden kann?!
So hab ich den Code kopiert und nach .xlsm angepasst.
Sub MappeViaOutlookSenden()
Const AN$ = "max.mustermann@gmail.com"
Const BETREFF$ = "Datenbank vom "
Const ANREDE$ = "Hallo zusammen"
Const TEXT$ = "Anbei erhalten Sie die aktuelle Datenbank für Ihre weitere Verwendung."
Const GRUSS$ = "Mit freundlichen Grüßen"
Const TYP$ = ".xlsm"
Const SEP$ = "_"
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim Ol As Object, Eml As Object
Dim Suf$, Pfad$, Anhang$
Pfad = WbQ.Path & "\"
Suf = Application.InputBox("Dateinamen-Zusatz eingeben:", _
"Dateiname Email-Anhang", , , , , , 2)
If Suf = "" Or Suf = False Then Exit Sub
Anhang = Pfad & Left(WbQ.Name, InStr(1, WbQ.Name, ".") - 1) & SEP & Suf & TYP
WbQ.SaveCopyAs Anhang
Set Ol = CreateObject("Outlook.Application")
Set Eml = Ol.CreateItem(0)
With Eml
.To = AN
.Subject = BETREFF & Date
.Attachments.Add Anhang
.Body = ANREDE & vbLf & vbLf & TEXT & vbLf & vbLf & GRUSS
.Display
End With
Kill Anhang
Set Ol = Nothing
Set Eml = Nothing
End Sub
Leider kommt dann eine Meldung "Laufzeitfehler 13: Typen unverträglichkeit".
Was bedeutet das?
Viele Grüße
Anzeige
AW: E-Mail-Anhang per Makro individuell ändern
06.04.2017 12:28:47
Michael
Hallo!
Die grds. Frage ist: Mit welcher Excel-Version arbeitest Du? Angegeben hast Du XL 14/2010, aber in Deinem Beitrag schreibst Du von einer ".xls"-Datei, was gilt?
.xls ist ein Dateiformat VOR Office 2007, seit Office 2007 gibt es die Dateiendungen .xlsx und .xlsm (und zugehörige Vorlagen-Dateitypen), wobei ersteres eine Arbeitsmappe OHNE Makros und Zweiteres eine Arbeitsmappe MIT Makros darstellt.
D.h.: Wenn in Deiner Original-Mappe das o.a. Makro enthalten ist, dann solltest Du diese Mappe als ".xlsm" speichern. Allerdings sollte dann auch die Kopie, die per Outlook versendet wird, den gleichen Dateityp haben, also
Const TYP$ = ".xlsm"
...denn sonst verschickst Du eine Datei, die nicht geöffnet werden kann, weil der Dateityp falsch ist.
Beachte, dass in diesem Fall dann auch die versendete Datei die Makros des Originals enthält. Wenn Du das nicht willst, geht es nicht so einfach über eine Kopie der Arbeitsmappe, sondern dann müsste mit Tabellenblättern des Originals eine gänzlich neue Mappe erzeugt werden, und diese dann versendet werden.
Hier der überarbeitete Code bzgl. Laufzeitfehler:
Sub MappeViaOutlookSenden()
Const AN$ = "max.mustermann@gmail.com"
Const BETREFF$ = "Datenbank vom "
Const ANREDE$ = "Hallo zusammen"
Const TEXT$ = "Anbei erhalten Sie die aktuelle Datenbank für Ihre weitere Verwendung."
Const GRUSS$ = "Mit freundlichen Grüßen"
Const TYP$ = ".xlsm"
Const SEP$ = "_"
Dim WbQ As Workbook: Set WbQ = ThisWorkbook
Dim Ol As Object, Eml As Object
Dim Suf$, Pfad$, Anhang$
Pfad = WbQ.Path & "\"
Suf = Application.InputBox("Dateinamen-Zusatz eingeben:", _
"Dateiname Email-Anhang", , , , , , 2 + 4)
Select Case Suf
Case Is = vbNullString: Exit Sub
Case Is = False: Exit Sub
End Select
Anhang = Pfad & Left(WbQ.Name, InStr(1, WbQ.Name, ".") - 1) & SEP & Suf & TYP
WbQ.SaveCopyAs Anhang
Set Ol = CreateObject("Outlook.Application")
Set Eml = Ol.CreateItem(0)
With Eml
.To = AN
.Subject = BETREFF & Date
.Attachments.Add Anhang
.Body = ANREDE & vbLf & vbLf & TEXT & vbLf & vbLf & GRUSS
.Display
End With
Kill Anhang
Set Ol = Nothing
Set Eml = Nothing
End Sub
Lg
Michael
Anzeige
AW: E-Mail-Anhang per Makro individuell ändern
07.04.2017 09:06:07
Marcus
Super jetzt klappt es. Danke für deine Hilfe!!
Gerne, lg und owT
07.04.2017 11:11:57
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

E-Mail-Anhang per Makro individuell ändern


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt oder öffne das bestehende Dokument.

  2. Aktiviere die Entwicklertools: Gehe zu Datei > Optionen > Menüband anpassen und aktiviere das Kästchen „Entwicklertools“.

  3. Füge einen Button hinzu: Wähle im Tab „Entwicklertools“ „Einfügen“ und ziehe einen Button auf dein Arbeitsblatt.

  4. VBA-Editor öffnen: Doppelklicke auf den Button, um den VBA-Editor zu öffnen.

  5. Füge den folgenden Code ein, um die E-Mail mit Anhang zu erstellen:

    Sub MappeViaOutlookSenden()
       Const AN$ = "max.mustermann@gmail.com"
       Const BETREFF$ = "Datenbank vom "
       Const ANREDE$ = "Hallo zusammen"
       Const TEXT$ = "Anbei erhalten Sie die aktuelle Datenbank für Ihre weitere Verwendung."
       Const GRUSS$ = "Mit freundlichen Grüßen"
       Const TYP$ = ".xlsm"
       Const SEP$ = "_"
       Dim WbQ As Workbook: Set WbQ = ThisWorkbook
       Dim Ol As Object, Eml As Object
       Dim Suf$, Pfad$, Anhang$
       Pfad = WbQ.Path & "\"
       Suf = Application.InputBox("Dateinamen-Zusatz eingeben:", "Dateiname Email-Anhang", , , , , , 2)
       If Suf = "" Or Suf = False Then Exit Sub
       Anhang = Pfad & Left(WbQ.Name, InStr(1, WbQ.Name, ".") - 1) & SEP & Suf & TYP
       WbQ.SaveCopyAs Anhang
       Set Ol = CreateObject("Outlook.Application")
       Set Eml = Ol.CreateItem(0)
       With Eml
           .To = AN
           .Subject = BETREFF & Date
           .Attachments.Add Anhang
           .Body = ANREDE & vbLf & vbLf & TEXT & vbLf & vbLf & GRUSS
           .Display
       End With
       Kill Anhang
       Set Ol = Nothing
       Set Eml = Nothing
    End Sub
  6. Schließe den VBA-Editor und teste das Makro, indem du auf den Button klickst.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Typen unverträglich: Stelle sicher, dass der Dateityp in deinem Code mit dem Format der Datei übereinstimmt. Bei der Verwendung von Makros sollte der Dateityp .xlsm sein.
  • Makro wird nicht ausgeführt: Überprüfe, ob die Makros in Excel aktiviert sind. Gehe zu Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen.
  • E-Mail-Anhang wird nicht angehängt: Vergewissere dich, dass der Pfad korrekt ist und dass die Datei tatsächlich gespeichert wird, bevor du versuchst, sie anzuhängen.

Alternative Methoden

  • Verwende VBA zur Erstellung einer neuen Datei: Wenn du nicht die Originaldatei versenden möchtest, erstelle eine neue Arbeitsmappe, kopiere die erforderlichen Blätter und speichere sie unter einem neuen Namen.
  • Automatisiere den E-Mail-Versand mit Outlook: Nutze VBA, um E-Mails direkt aus Excel zu versenden, ohne manuell Daten eingeben zu müssen.

Praktische Beispiele

Hier sind einige Beispiele für mögliche Anwendungsfälle:

  • Projektstatusbericht versenden: Verwende das Makro, um wöchentliche Statusberichte per E-Mail zu versenden, indem du den Namen des Projekts als Zusatz eingibst (z.B. Projekt_X_Status).
  • Monatliche Abrechnungen: Passe das Makro an, um monatliche Abrechnungen an verschiedene Empfänger zu senden, indem du den Monat als Zusatz eingibst (z.B. Abrechnung_März).

Tipps für Profis

  • Fehlerbehandlung einfügen: Füge Fehlerbehandlungsroutinen in dein Makro ein, um unerwartete Probleme während des E-Mail-Versands zu vermeiden.
  • Dynamische Empfängerliste: Nutze eine Excel-Tabelle, um die Empfängeradressen dynamisch zu verwalten und einfach zu ändern.
  • Signatur anpassen: Wenn du eine Groupwise-Signatur verwenden möchtest, stelle sicher, dass du den entsprechenden Code in dein Makro integrierst.

FAQ: Häufige Fragen

1. Wie kann ich Excel-Dateien mit Makros speichern?
Du musst die Datei als .xlsm speichern, um die Makros beizubehalten. Gehe zu Datei > Speichern unter und wähle den Dateityp „Excel-Arbeitsmappe mit Makros“.

2. Was mache ich, wenn das Makro nicht funktioniert?
Überprüfe den VBA-Code auf Syntaxfehler und stelle sicher, dass die notwendigen Bibliotheken für Outlook referenziert sind.

3. Kann ich auch andere Dateitypen als Anhang versenden?
Ja, passe den Const TYP$ Wert im Code an, um andere Dateitypen zu verwenden, wie .pdf oder .txt.

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