VBA - Mehrere Druckbereiche unter verschiedenen Namen als PDF speichern?
Hallo Zusammen,
Ich habe ein Tabellenblatt, in dem es 179 verschiedene Druckbereiche geben soll. Diese Druckbereiche sind alle benannt. Hamburg, Dortmund, Bremen etc. Bisher musste ich manuell jeden einzelnen Druckbereich speichern. Die PDF hat dann einen von mir vorgegebenen Namen. Also entstehen auch hier 179 verschieden benannte PDF´s. Jetzt würde ich gerne einen Button generieren, der über VBA programmiert uist, alle Druckbereiche (im selben Verzeichnis wie die .xls) als PDF abzuspeichern.
Für mich als Laien sollte der Code übersetzt wie folgt aussehen:
-speichere Druckbereich "Hamburg" aus "Tabellenblatt1"in "Pfad/Verzeichnis" als PDF unter dem Namen "Hamburg1" - etc und das 179 mal mit verschiedenen Namen und Druckbereichen
Ich hoffe ich konnte einigermaßen verständlich machen, was ich mir wünsche.
Ich bedanke mich schonmal für die Hilfe.
:)
1 Antwort
Mal zur Orientierung:
Sub BereicheDrucken() Dim n As Name Dim sFileName As String
For Each n In ActiveWorkbook.Names If Not Right(n.Name, Len("Print_Area")) = "Print_Area" Then sFileName = "E:\tmp\" & n.Name & ".pdf" Range(n.Name).ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=sFileName, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=True, OpenAfterPublish:=False End If Next End Sub
Nö. Ich habe das so verstanden, dass du nicht den Druckbereich exportieren willst, sondern alle benamten Bereiche. Da der Druckbereich auch als benamter Bereich zählt, habe ich ihn mit If ausgeschlossen. Auf diese Weise musst du alle benamten Bereiche ausschließen, die nicht als PDF exportiert werden sollen. Geh die Namen in deinem Namensmanager mal durch.
Ansonsten müsstes du mir erklären, was du mit "verschiedene Druckbereiche" meinst, denn normalerweise kann es nur einen Druckbereich geben.
Ok wahrscheinlich hatte ich mich falsch ausgedrückt. Ich habe in der Tabelle verschiedene Bereiche benannt... so ist zum Beispiel A1:H18 im Namensfeld oben links als "Hamburg1" benannt. und so geht die liste nach unten hin weiter. Diese benannten Bereiche möchte ich nun auf einem Klick als verschieden benannte einzelne PDF´s abspeichern über VBA.
Sorry für das Missverständnis
Theoretisch brauche ich nach erstellen der PDF´s dann keinen Druckbereich mehr. Die benannten Sektoren müssten jedoch erstmal gespeichert werden :)
Bin gerade am austesten. Was müsste ich den wo eintragen in deinem Code?
Du kannst den Code fast 1:1 übernehmen. Lediglich das Ausgabeverzeichnis E:\tmp\ müsstest du deiner Umgebung anpassen.
Du hast doch die Namen in der Arbeitsmappe definiert, oder? Überprüf das bitte im Namensmanager.
Der sagt mir, das das Makro nicht ausgefüht werden kann, da es in der Arbeitsmappe nicht verfügbar ist.
Ich kann hier leider keinen Screenshot von der Mappe reinsetzen. Tabellenblatt1 hat bei mir 179 "markierte" Bereiche, die ich oben links in dem Feld wo dann eigentlich z.B. A12 steht benannt.
Wenn ich auf die Suchfunktion und Gehe zu gehe, zeigt er mir die Namen auch an
Das Makro fügst du in ein Modul ein, welches du der Arbeitsmappe hinzufügst.
Die Bereiche müssen für die gesamte Arbeitsmappe definiert sein, sonst findet die Schleife sie nicht.
Formeln → Namensmanager → Spalte Bereich
Hängen die Namen am Tabellenblatt, müsste das Makro umgeschrieben werden.
Ok Es scheint jetzt zu funktionieren.
Kann ich den Namen unter dem sie abgespeichert werden noch irgendwo anders definieren, oder muss ich die Bereiche dafür umbenennen?
Und er setzt mir vor jede PDF RobinAachen davor. Kriege ich meinen Namen da Weg?
Du kannst den Namen in einer Zelle definieren und diese mit Range("<Zelladresse>").Value abrufen oder du verankerst den Pfad im Quelltext statt E:\tmp\
Das RobinAachen bekommst du so weg:
sFileName = Range("F1").Value & Replace(n.Name, "RobinAachen", "") & ".pdf"
(ungetestet)
sFileName = "N:\03 LOGISTIK\Robin" & n.Name & ".pdf"
Da soll es abgespeichert werden. Er speichert es jedoch nur unter LOGISTIK und setzt Robin an den Anfang des Dateinamens
Du musst den Pfad mit \ abschließen:
sFileName = "N:\03 LOGISTIK\Robin\" & n.Name & ".pdf"
Nur damit ich das richtig verstehe:
würde bei mir wie folgt aussehen:
If Not Right (n.Name, Len("Hamburg1")) = "Hamburg1"
Then sFileName = "E:\tmp\"Hamburg & ".pdf"
(wobei Hamburg der Name meiner PDF wäre?)
Der Rest von deinem Code bliebe unberührt?
Hab ich das so richtig verstanden?
Ich danke Dir für Deine Mühe