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

Forumthread: VBA Macro Tabelle über Button als pdf sichern und

VBA Macro Tabelle über Button als pdf sichern und
18.03.2017 23:56:15
Andre
Hallo.
ich kenne mich noch sehr wenig mit der VBA Sprache aus und deshalb benötige ich ein wenig Hilfe.
Ich möchte in einer Excel Arbeitsmappe die Tabelle ZEF_Jan und die Tabelle SPE_Jan als PDF an einem bestimmten Ort sichern, beide Tabellen hintereinander in einer PDF Datei, diese gesicherte PDF Datei soll mir dann für die Kontrolle geöffnet werden und als E-Mail Anhang versendet werden.
Dafür möchte ich einen Button erstellen und diesem das Macro zuweisen.
Wie erstelle ich nun diesen Button und wie sollte so ein Marco aussehen.
Vielen Dank
Mfg Andre
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Macro Tabelle über Button als pdf sichern und
19.03.2017 09:55:01
fcs
Hallo Andre,
Wie erstelle ich nun diesen Button und wie sollte so ein Marco aussehen.

Fall noch nicht geschehen, dann musst du via Menü
Datei --&gt Optionen --&gt Menüband anpassen
die Hauptregisterkarte "Entwicklertools" einblenden.
In diesem Register kannst du unter "Einfügen" aus den Formularsteuerelementen die Schaltfläche wählen und dann auf dem Tabellenblatt plazieren.
Ein entsprechendes Makro kann dann wie folgt aussehen.
Die im Makro vorgegebenen Werte musst du an deine Anforderungen anpassen.
Der E-Mail-Versand erfolgt hier via MS Outlook.
Falls du ein anderes E-Mail-Programm verwendest, dann kann man evtl. das Makro anpassen.
Du kannst aber auch zum Beispiel vom AcrobatReader aus den Versand der Datei starten.
LG
Franz
'Erstellt unter Windows Vista / Microsoft Office 2010 professional / Excel 2010
Option Explicit
Sub Speichen_PDF_Jan()
' Speichen_PDF Makro und Versand als E-Mail-Anhang
Dim sPfad As String, sDatei As String
Dim sPDF_Datei As String
Dim objSheet As Object
Dim strBody As String
sPfad = "C:\Users\Public\Test\Data\"
sDatei = "ZEF_Jan_SPE_Jan_" & Format(Date, "YYYY-MM-DD") & ".pdf"
sPDF_Datei = sPfad & sDatei
Set objSheet = ActiveSheet
Sheets(Array("ZEF_Jan", "SPE_Jan")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=sPDF_Datei, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
objSheet.Select
If MsgBox("PDF jetzt als E-Mail-Anhang versenden?", vbQuestion + vbYesNo, _
"E-Mail-Versand") = vbYes Then
strBody = "Hallo xyZ," & Chr(10) & Chr(10) _
& "hier der aktuelle Stand der Dateien" & Chr(10) & Chr(10) _
& "mfg Andre"
Call E_Mail_Versand(varTo:="test@gmail.com", _
strSubject:="ZEF_Jan und SPE_Jan - Stand " & Format(Date, "YYYY-MM-DD"), _
varBody:=strBody, _
varAttachments:=sPDF_Datei, _
bolSend:=False)
End If
End Sub
Sub E_Mail_Versand(varTo, strSubject, _
Optional varBody, _
Optional varCC, Optional varBCC, _
Optional varAttachments, _
Optional bolSend As Boolean = False)
' ####          E-Mail-Versand via Microsoft Outlook      ####
'varTo      E-Mail-Adresse(n) der E-Mai-Empfäner
'varCC      E-Mail-Adresse(n) der Kopie-Empfäner
'varBCC     E-Mail-Adresse(n) der Blind-Kopie-Empfäner
'strSubject Betreff/Subject der E-Mail
'varBody    Text der E-Mail
'varAttachments Anhänge zur E-Mail - einzelner Dateiname (mit Pfad!) oder ein Array mit  _
mehreren Dateinamen
'bolSend    Wenn True wird die E-Mail espeichert und direkt gesendet _
Wenn False wird der Entwurf der E-Mail erstellt und in Outlook angezeigt
Dim objApp As Object 'Outlook.Application
Dim objMail As Object 'Outlook.MailItem
Dim varItem
Set objApp = VBA.CreateObject("Outlook.Application")
Set objMail = objApp.CreateItem(0) '0=olMailItem
With objMail
.To = varTo
If Not IsMissing(varCC) Then .CC = varCC
If Not IsMissing(varBCC) Then .BCC = varBCC
.Subject = strSubject
If Not IsMissing(varBody) Then .Body = varBody
If Not IsMissing(varAttachments) Then
If IsArray(varAttachments) Then
For Each varItem In varAttachments
.Attachments.Add varItem
Next
Else
.Attachments.Add varAttachments
End If
End If
If bolSend = True Then
.Save
.Send
Else
.Display
End If
End With
Set objApp = Nothing
Set objMail = Nothing
End Sub

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

VBA Makro: Tabelle über Button als PDF sichern


Schritt-für-Schritt-Anleitung

  1. Entwicklertools aktivieren:

    • Gehe zu Datei > Optionen > Menüband anpassen.
    • Aktiviere die Hauptregisterkarte „Entwicklertools“.
  2. Button erstellen:

    • Klicke im Register „Entwicklertools“ auf „Einfügen“.
    • Wähle die Schaltfläche (Button) aus und platziere sie auf deinem Tabellenblatt.
  3. Makro zuweisen:

    • Klicke mit der rechten Maustaste auf die Schaltfläche und wähle „Makro zuweisen“.
    • Wähle das entsprechende Makro aus oder erstelle ein neues.
  4. Makro-Code einfügen:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge den folgenden Code ein, um die Tabellen als PDF zu speichern und per E-Mail zu senden:
Option Explicit
Sub Speichen_PDF_Jan()
    Dim sPfad As String, sDatei As String
    Dim sPDF_Datei As String
    Dim objSheet As Object
    Dim strBody As String
    sPfad = "C:\Users\Public\Test\Data\"
    sDatei = "ZEF_Jan_SPE_Jan_" & Format(Date, "YYYY-MM-DD") & ".pdf"
    sPDF_Datei = sPfad & sDatei
    Set objSheet = ActiveSheet
    Sheets(Array("ZEF_Jan", "SPE_Jan")).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=sPDF_Datei, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=True
    objSheet.Select
    If MsgBox("PDF jetzt als E-Mail-Anhang versenden?", vbQuestion + vbYesNo, _
    "E-Mail-Versand") = vbYes Then
        strBody = "Hallo xyZ," & Chr(10) & Chr(10) _
        & "hier der aktuelle Stand der Dateien" & Chr(10) & Chr(10) _
        & "mfg Andre"
        Call E_Mail_Versand(varTo:="test@gmail.com", _
        strSubject:="ZEF_Jan und SPE_Jan - Stand " & Format(Date, "YYYY-MM-DD"), _
        varBody:=strBody, _
        varAttachments:=sPDF_Datei, _
        bolSend:=False)
    End If
End Sub
  1. E-Mail-Versand einrichten:
    • Der Versand erfolgt über Microsoft Outlook. Achte darauf, dass du Outlook korrekt konfiguriert hast.

Häufige Fehler und Lösungen

  • Fehler: Der Button funktioniert nicht:

    • Stelle sicher, dass du das Makro zugewiesen hast und dass die Makros in Excel aktiviert sind.
  • Fehler: PDF wird nicht gespeichert:

    • Überprüfe den angegebenen Speicherort im Code. Der Pfad muss existieren.
  • Fehler: E-Mail wird nicht versendet:

    • Stelle sicher, dass Outlook korrekt eingerichtet ist und du die richtigen Berechtigungen hast.

Alternative Methoden

  • Du kannst auch die Funktion Speichern unter verwenden, um eine Excel-Tabelle manuell als PDF zu speichern, ohne ein Makro zu verwenden.
  • Eine weitere Möglichkeit ist, das PDF über ein externes Tool wie Adobe Acrobat zu erstellen und dann den E-Mail-Versand über VBA zu automatisieren.

Praktische Beispiele

  1. PDF mit benutzerdefiniertem Dateinamen:

    • Ändere den Code, um den Dateinamen dynamisch anzupassen, z.B. basierend auf Zelleninhalten.
  2. PDF für mehrere Tabellen:

    • Füge weitere Tabellen in das Sheets(Array(...)).Select ein, um mehrere Arbeitsblätter in einer PDF zu kombinieren.

Tipps für Profis

  • Verwende xlQualityMinimum für eine kleinere PDF-Dateigröße, wenn die Qualität nicht so wichtig ist.
  • Überlege, wie du den E-Mail-Versand optimieren kannst, z.B. durch Hinzufügen von CC- oder BCC-Adressen.

FAQ: Häufige Fragen

1. Wie kann ich einen Button in Excel erstellen?
Du musst die Entwicklertools aktivieren und dann eine Schaltfläche über das Menü „Einfügen“ hinzufügen.

2. Kann ich das PDF auch ohne E-Mail-Versand speichern?
Ja, du kannst den Teil des Codes, der den E-Mail-Versand durchführt, auskommentieren oder entfernen.

3. Ist dieser Code mit jeder Excel-Version kompatibel?
Der vorgestellte Code wurde für Excel 2010 entwickelt, sollte aber auch in neueren Versionen funktionieren. Achte darauf, dass die VBA-Umgebung korrekt eingerichtet ist.

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