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

Forumthread: Makro PDF-Datei erstellen + Name/Blätter aus Zelle

Makro PDF-Datei erstellen + Name/Blätter aus Zelle
20.01.2016 15:14:17
Chris
Hallo zusammen,
ich habe ein kleines Makro-Problem. Ich möchte einen mühsamen und manuellen Schritt automatisieren. Habe es auch geschafft, nur habe ich die Makros so geschrieben, dass sie unflexibel sind, d.h. wenn sich eine Änderung ergibt, muss das im Makrocode angepasst werden.
Nun ist meine Idee, dass der Makro auf ein Tabellenblatt zugreift, und sich da die Informationen holt. Das heißt, der Makro erstellt eine PDF-Datei auf Knopfdruck. Der zu verwendende Dateiname wird ausgelesen aus einer Zelle und die zu markierenden Tabellenblätter auch. Nachdem er die erste Datei erstellt hat, folgt die nächste... Speicherpfad sollte immer die sein, in dem sich die Excel-Datei befindet.
Somit kann die eine Tabelle namens "Makro" gepflegt werden und der Makrocode funktioniert eigentlich immer...
Hier eine Beispieldatei:
https://www.herber.de/bbs/user/102912.xlsx
Vielen Dank für eure Hilfe!!!
Grüße
Chris

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro PDF-Datei erstellen + Name/Blätter aus Zelle
21.01.2016 10:59:18
fcs
Hallo Chris,
das könnte man evtl. wie folgt lösen.
Die zu speichernde PDF-Variante muss vor dem Start des Makros in Spalte A selektiert werden.
Gruß
Franz
'Zu speichernde PDF Variante wird aus aktiver Zelle in Spalte A ausgelesen
Sub Make_PDF()
Dim wksMakro As Worksheet
Dim strPDF As String
Dim rngVariante As Range
Set rngVariante = ActiveCell
Dim varSheets(), Zelle As Range, intSheet As Integer
Set wksMakro = ActiveSheet
If wksMakro.Name  "Makro" Then
MsgBox "Makro darf nur gestartet werden, wenn Blatt ""Makro"" aktiv ist!", _
vbOKOnly, "Speichern PDF"
Else
'Prüfen, ob PDF-Variante in Spalte A gewählt wurde
If rngVariante.Cells.Count = 1 And rngVariante.Column = 1 And rngVariante  "" Then
Select Case rngVariante.Row
Case Is >= 4
If MsgBox("Variante """ & rngVariante.Text & """ als PDF speichern?", _
vbQuestion + vbOKCancel, "PDF erstellen") = vbOK Then
'Name der PDF-Datei
strPDF = ThisWorkbook.Path & Application.PathSeparator & rngVariante.Text & ".pdf"
'Blattnamen zur Variante in Datenarray schreiben
With wksMakro
For Each Zelle In .Range(rngVariante.Offset(0, 1), .Cells(rngVariante.Row, .Columns. _
Count).End(xlToLeft)).Cells
If Zelle.Text  "" Then
intSheet = intSheet + 1
ReDim Preserve varSheets(1 To intSheet)
varSheets(intSheet) = Zelle.Text
End If
Next
End With
If intSheet > 0 Then
'PDF speichern
ActiveWorkbook.Sheets(varSheets).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=strPDF, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Erase varSheets
End If
Sheets("Makro").Select
End If
Case Else
End Select
Else
MsgBox "Bitte Zelle der zu speichernde Variante in Spalte A vor dem Start des Makros auswä _
hlen!", _
vbOKOnly, "Speichern PDF"
End If
End If
End Sub

Anzeige
AW: Feinheiten...
21.01.2016 12:08:12
Chris
Hallo Franz,
hervorragende Arbeit. Klappt prima! Jetzt noch eine Feinheit. Mein Wunsch wäre es noch, dass
- die erste Meldung muss eigentlich nicht angezeigt werden, also man soll einfach auf ein Knopf drucken und es soll die Datei erstellen.
- wenn möglich, soll er die ganze Liste automatisch abarbeiten, also in dem Beispiel muss ich ja jetzt RE1 anklicken und den Makro starten, dann RE2 und Makro starten usw. Am liebsten wäre es mir, dass ich von mir aus die Zelle "RE 1" aktiviere und dann das Makro anschmeise und die Liste abarbeitet.
Ist das möglich?
Danke für die Hilfe !!
Grüße
Chris

Anzeige
AW: Feinheiten...
21.01.2016 13:57:57
fcs
Hallo Christ,
wenn alle Zellen mit Inhalt ab Zeile 4 abgearbeitet werden sollen, dann kann man es wie folgt lösen.
Gruß
Franz
Sub Make_PDF_V1()
Dim wksMakro As Worksheet
Dim strPDF As String
Dim rngVariante As Range
Dim varSheets(), Zelle As Range, intSheet As Integer, Zeile As Long
Set wksMakro = ActiveWorkbook.Worksheets("Makro")
'  If MsgBox("PDF-Dateien speichern?", vbQuestion + vbOKCancel, "PDF erstellen") = vbOK Then
With wksMakro
For Zeile = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
intSheet = 0
Set rngVariante = .Cells(Zeile, 1)
'Name der PDF-Datei
strPDF = ThisWorkbook.Path & Application.PathSeparator & rngVariante.Text & ".pdf"
'Blattnamen zur Variante in Datenarray schreiben
For Each Zelle In .Range(rngVariante.Offset(0, 1), .Cells(rngVariante.Row, _
.Columns.Count).End(xlToLeft)).Cells
If Zelle.Text  "" Then
intSheet = intSheet + 1
ReDim Preserve varSheets(1 To intSheet)
varSheets(intSheet) = Zelle.Text
End If
Next
If intSheet > 0 Then
'PDF speichern
ActiveWorkbook.Sheets(varSheets).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=strPDF, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
Erase varSheets
End If
Sheets("Makro").Select
Next Zeile
End With
'  End If
End Sub

Anzeige
AW: Feinheiten...
21.01.2016 14:24:03
Chris
Klasse !!! Es tut was es soll :-) Super Arbeit!! Danke Danke Danke!!
;

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
Anzeige

Infobox / Tutorial

Makro für die Erstellung von PDFs aus Excel


Schritt-für-Schritt-Anleitung

Um ein Excel-Makro zu erstellen, das PDFs aus mehreren Blättern erzeugt und die Namen sowie die Blätter aus einer Zelle ausliest, folge diesen Schritten:

  1. Öffne Excel und lade das Arbeitsblatt, in dem du das Makro erstellen möchtest.
  2. Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  3. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsblatt)", wähle "Einfügen" und dann "Modul".
  4. Kopiere den folgenden VBA-Code in das Modul:

    Sub Make_PDF_V1()
        Dim wksMakro As Worksheet
        Dim strPDF As String
        Dim rngVariante As Range
        Dim varSheets(), Zelle As Range, intSheet As Integer, Zeile As Long
        Set wksMakro = ActiveWorkbook.Worksheets("Makro")
    
        With wksMakro
            For Zeile = 4 To .Cells(.Rows.Count, 1).End(xlUp).Row
                intSheet = 0
                Set rngVariante = .Cells(Zeile, 1)
                strPDF = ThisWorkbook.Path & Application.PathSeparator & rngVariante.Text & ".pdf"
    
                For Each Zelle In .Range(rngVariante.Offset(0, 1), .Cells(rngVariante.Row, .Columns.Count).End(xlToLeft)).Cells
                    If Zelle.Text <> "" Then
                        intSheet = intSheet + 1
                        ReDim Preserve varSheets(1 To intSheet)
                        varSheets(intSheet) = Zelle.Text
                    End If
                Next
    
                If intSheet > 0 Then
                    ActiveWorkbook.Sheets(varSheets).Select
                    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                    Filename:=strPDF, Quality:=xlQualityStandard, _
                    IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                    OpenAfterPublish:=True
                    Erase varSheets
                End If
                Sheets("Makro").Select
            Next Zeile
        End With
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.
  6. Starte das Makro: Drücke ALT + F8, wähle Make_PDF_V1 aus und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Fehler: "Makro darf nur gestartet werden, wenn Blatt 'Makro' aktiv ist!"

    • Lösung: Stelle sicher, dass das Arbeitsblatt "Makro" aktiv ist, bevor du das Makro startest.
  • Fehler: "Bitte Zelle der zu speichernden Variante in Spalte A vor dem Start des Makros auswählen!"

    • Lösung: Wähle die entsprechende Zelle in Spalte A aus, bevor du das Makro ausführst.

Alternative Methoden

  • PDF mit Makros erstellen: Du kannst auch in Word ein Makro erstellen, um PDF-Dateien zu generieren, jedoch ist dies weniger flexibel als in Excel.
  • Manuelles Erstellen von PDFs: Eine andere Möglichkeit ist, die Blätter manuell als PDF zu speichern, was jedoch zeitaufwendiger ist.

Praktische Beispiele

  • Beispiel für die Nutzung: Angenommen, du hast eine Liste von Projektnamen in Spalte A und die entsprechenden Blätter in den Spalten B bis Z. Das Makro liest diese Informationen aus und erstellt für jedes Projekt eine PDF-Datei.
  • Speicherort: Die PDFs werden im gleichen Verzeichnis gespeichert, in dem sich die Excel-Datei befindet.

Tipps für Profis

  • Verwende blätterbare PDFs, um die Benutzerfreundlichkeit zu erhöhen.
  • Optimiere den Code, um die Ausführungsgeschwindigkeit des Makros zu verbessern.
  • Integriere zusätzlich Fehlerbehandlungen, um unerwartete Probleme zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich das Makro anpassen, um spezielle Formate zu verwenden?
Ja, du kannst das PDF-Format im Code ändern, indem du die ExportAsFixedFormat-Methode anpasst.

2. Funktioniert dieses Makro in allen Excel-Versionen?
Das oben genannte Makro sollte in Excel 2010 und höheren Versionen problemlos funktionieren.

3. Wie kann ich mehrere Blätter in einer einzigen PDF speichern?
Das Makro kann so angepasst werden, dass es mehrere Blätter in einer PDF-Datei zusammenführt, indem die varSheets-Array entsprechend erweitert wird.

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