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

Forumthread: Makro Excel per Mail versenden und dabei xlsm zu xlsx

Makro Excel per Mail versenden und dabei xlsm zu xlsx
20.10.2023 12:10:18
Martina
Hallo liebe Forumsteilnehmer:innen,
heute habe ich wieder eine Spezialfrage, zu der ich seit Stunden einfach keine Lösung finde.
Und zwar muss ich täglich eine xlsm-Datei per Mail an viele Empfänger versenden (Empfänger lesen Großteils nur noch; Bearbeitung höchstens für Diagramme). Einige Empfänger können keine Dateien mit Makros öffnen und benötigen die Datei als xlsx.
Nach vielen Versuchen habe ich im Internet einen Code gefunden, der fast funktioniert (es funktioniert fast alles, nur die Datei lässt sich aufgrund des Versandformates "xlsx" bei ursprünglich "xlsm") nicht öffnen. Wenn ich im Code wie ursprünglich "xlsm" einschreibe, funktionierts.... nur dann das Problem auf der Empfängerseit.
Frage: kann ich in den Code irgendetwas einfügen (automatisches Konvertieren im Versand?) um diese "Ecke" zu lösen? Wichtig: die Ursprungsdatei muss xlsm bleiben.
verwendeter Code unterbei

Für eine Hilfe wäre ich sehr dankbar!
Lg, Martina

Sub MappeViaOutlookSenden()
Const AN$ = "max.mustermann@gmx.at"
Const BETREFF$ = "Testdatei"
Const TEXT$ = "Im Anhang die aktuellen Untersuchungsergebnisse."
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 + 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
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Excel per Mail versenden und dabei xlsm zu xlsx
20.10.2023 12:39:23
peter
Hallo

SaveCopyAs kann den Dateityp nicht ändern!

Du musst eine Kopie Deines Workbooks erzeugen und dann mit SaveAs den Dateityp ändern.

WbQ.Copy 'erzeugt eine Kopie, die Kopie ist jetzt das aktive Workbook
ActiveWorkbook.SaveAs Filename:=Anhang,FileFormat:=xlOpenXMLWorkbook 'xlsx Datei
ActiveWorkbook.Close false

Peter
Anzeige
AW: Makro Excel per Mail versenden und dabei xlsm zu xlsx
20.10.2023 12:58:56
MCO
Hallo Martina!

Ich hab die Erfahrung gemacht, dass eine xlsm oder xltm sich nach "savecopyas" nicht als xls oder xlsx öffnen lässt. Daher musst du die Methode ändern.

"saveas" speichert sie korrekt ab. Allerdings ist das dann auch die Datei, die nach Ablauf deines Makros geöffnet ist.
Daher musst du auf das sofortige löschen der Datei verzichten (da sie ja zur Laufzeit des Makros geöffnet ist). Außerdem wäre es ratsam, vor dem "kopie_Speichern" noch einmal deine Originaldatei zu speichern, damit beim nächsten öffnen auch der aktuelle Stand noch da ist.

Mit diesen Baustellen im Sinn stell ich dir folgenden Code zur Verfügung:

Sub MappeViaOutlookSenden()

Const AN$ = "max.mustermann@gmx.at"
Const BETREFF$ = "Testdatei"
Const TEXT$ = "Im Anhang die aktuellen Untersuchungsergebnisse."
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 + 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
WbQ.Save
kopie_speichern 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
Sub kopie_speichern(Pfad As String)
Dim objFileDialog As FileDialog
Set objFileDialog = Application.FileDialog(msoFileDialogSaveAs)

Application.ScreenUpdating = False
Application.DisplayAlerts = False
With objFileDialog
.FilterIndex = 1 '1 = .xlsx, 10 = .xltm
.InitialFileName = Pfad 'log_pfad & "\BA-Übersicht.xltm"
If .Show Then Call .Execute
End With
Application.DisplayAlerts = True

End Sub


Gruß, MCO
Anzeige
AW: Makro Excel per Mail versenden und dabei xlsm zu xlsx
20.10.2023 13:30:58
Martina
Vielen Dank an Peter und MCO !
MCO: habe ich eingefügt und hat auf Anhieb geklappt :-)
Problem gelöst!!!!!

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel: Makro zum Versenden von XLSM als XLSX per E-Mail


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei im Format XLSM per E-Mail zu versenden und gleichzeitig eine Kopie im Format XLSX zu erstellen, folge diesen Schritten:

  1. Öffne Excel und erstelle ein neues Makro oder öffne dein bestehendes Makro.
  2. Verwende den folgenden Code in deinem VBA-Editor:
Sub MappeViaOutlookSenden()
    Const AN$ = "max.mustermann@gmx.at"
    Const BETREFF$ = "Testdatei"
    Const TEXT$ = "Im Anhang die aktuellen Untersuchungsergebnisse."
    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 + 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.Save
    kopie_speichern Anhang
    Set Ol = CreateObject("Outlook.Application")
    Set Eml = Ol.CreateItem(0)
    With Eml
        .To = AN
        .Subject = BETREFF & " " & Date
        .Attachments.Add Anhang
        .Body = TEXT & vbLf & vbLf
        .Display
    End With
    Set Ol = Nothing
    Set Eml = Nothing
End Sub

Sub kopie_speichern(Pfad As String)
    Dim objFileDialog As FileDialog
    Set objFileDialog = Application.FileDialog(msoFileDialogSaveAs)

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    With objFileDialog
        .FilterIndex = 1 '1 = .xlsx
        .InitialFileName = Pfad
        If .Show Then Call .Execute
    End With
    Application.DisplayAlerts = True
End Sub
  1. Passe die Konstanten im Code an, um die E-Mail-Adresse, den Betreff und den gewünschten Text zu ändern.
  2. Führe das Makro aus, um die Datei als XLSX zu speichern und per E-Mail zu versenden.

Häufige Fehler und Lösungen

  • Fehler beim Speichern der Datei: Stelle sicher, dass der Pfad zur Datei korrekt ist. Vergewissere dich, dass die Datei nicht bereits geöffnet ist.
  • E-Mail wird nicht gesendet: Überprüfe die E-Mail-Adresse und stelle sicher, dass Outlook korrekt konfiguriert ist.
  • Dateiformat nicht kompatibel: Vergewissere dich, dass du den richtigen FileFormat verwendest. Für XLSX lautet dieser xlOpenXMLWorkbook.

Alternative Methoden

Falls du kein Makro verwenden möchtest, kannst du die Datei manuell speichern und per E-Mail versenden:

  1. Speichere die Datei als XLSX über "Datei" > "Speichern unter".
  2. Öffne dein E-Mail-Programm und füge die gespeicherte Datei als Anhang hinzu.

Praktische Beispiele

Wenn du nur ein einzelnes Tabellenblatt versenden möchtest, kannst du den Code wie folgt anpassen:

Dim ws As Worksheet
Set ws = WbQ.Sheets("Tabellenblattname") ' Ersetze "Tabellenblattname" durch den Namen des gewünschten Blatts
ws.Copy
ActiveWorkbook.SaveAs Filename:=Anhang, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close False

Tipps für Profis

  • E-Mail-Anhang mit Passwort schützen: Du kannst den E-Mail-Anhang mit einem Passwort schützen, indem du die Datei vor dem Versenden verschlüsselst.
  • Automatisierung: Überlege, das Makro zu automatisieren, indem du es zu einem bestimmten Zeitpunkt täglich ausführst.

FAQ: Häufige Fragen

1. Kann ich das Makro so anpassen, dass es automatisch täglich versendet wird?
Ja, du kannst das Makro mit dem Windows Task Scheduler oder einer externen Software planen.

2. Wie kann ich sicherstellen, dass die Datei als XLSX und nicht als XLSM gespeichert wird?
Verwende die Methode SaveAs und setze den FileFormat auf xlOpenXMLWorkbook.

3. Ist es möglich, nur ein einzelnes Tabellenblatt per E-Mail zu versenden?
Ja, das ist möglich, indem du das gewünschte Tabellenblatt kopierst und dann speicherst, wie im obigen Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige