Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

PDF erstellen
#1
Ich habe eine Datei mit mehren Sheets, bestimmte Sheets (nicht alle) soll ein PDF Dokument erstellt werden und am besten gleich dort abgespeichert werden wo die Excel-Datei liegt.
Und der Name des Dokuments soll dann aus "B2" und "B4" ausgelesen werden, Optional aktuelles Datum.

Hier mein Code... der nicht wirklich funktioniert ....
Sub PDFerzeugen()
  Dim strName As String
  Dim ws As Worksheet
 
strName = Range("B7")
 
  For Each ws In Worksheets
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        strName & ws.Name, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True

Next ws
End Sub
Antworten Top
#2
Hallo

ich weiss nicht ob ich dir richtig weiterhelfen kann, probieren wir es mal gemeinsam.
Bei strName fehlt der Tabellenname vor Range("B7"), damit wird der Wert aus dem gerade aktivem Sheet genommen.
Mit strName & ws.Name  verbindest du den strName mit dem Namen des Sheet. Du willst ihn aber aus B2 + B4 auslesen!
Ich empfehle dir diese Werte vorher in eine Variable zu laden, z.B. Datei As String deklariert.
Datei = ws.Range("B2") & ws.Range("B4").  Ich weiss aber nicht was in den Zellen drinsteht!
 
Dann könnte es so aussehen:   Filename:=strName & Datei, wobei du das "\" Zeichen nicht vergessen darfst!
Den Filename kannst du ggf. vorher mit einer MsgBox prüfen, ob es ein gültiger Dateiname mit gültigem Pfad ist.
MsgBox = strName & Datei

mfg Gast 123
Antworten Top
#3
Vergleichbare Frage und Lösung:
https://www.ms-office-forum.net/forum/sh...p?t=299903
Antworten Top
#4
Abend.. ich bin Anfänger mit Makros ... Formeln sind kein Problem ...

Kannst du mir den Code teil schicken den ich anpassen muss.

Habe ein Code gefunden der ganz gut funktioniert: 

Nur ich möchte nicht das alle Sheets ein PDF erstellt werden nur bestimmte ? Jemand eine Idee? Was man ändern muss?

Option Explicit

Public Sub CreatePDF()


Dim strDateiName    As String
Dim strDateiPfad    As String
Dim fDateinameTemp  As Variant
Dim wsCurrent        As Worksheet


strDateiPfad = ThisWorkbook.Path & Application.PathSeparator
fDateinameTemp = Split(ThisWorkbook.Name, ".")
fDateinameTemp(UBound(fDateinameTemp)) = "pdf"
strDateiName = Join(fDateinameTemp, ".")

'Komplette Datei sichern
Call ThisWorkbook.ExportAsFixedFormat( _
                                      Type:=xlTypePDF, _
                                      Filename:=strDateiPfad & strDateiName, _
                                      Quality:=xlQualityStandard, _
                                      IncludeDocProperties:=True, _
                                      IgnorePrintAreas:=False, _
                                      OpenAfterPublish:=True)
'Einzelne Blätter sichern
For Each wsCurrent In ThisWorkbook.Worksheets
  If wsCurrent.Visible = xlSheetVisible Then
      strDateiName = wsCurrent.Name & ".pdf"
      Call wsCurrent.ExportAsFixedFormat( _
                                          Type:=xlTypePDF, _
                                          Filename:=strDateiPfad & Range("B4") & strDateiName, _
                                          Quality:=xlQualityStandard, _
                                          IncludeDocProperties:=True, _
                                          IgnorePrintAreas:=False, _
                                          OpenAfterPublish:=True)
  End If
Next
End Sub
Antworten Top
#5
(15.04.2024, 21:03)baemir23 schrieb: Habe ein Code gefunden der ganz gut funktioniert: 
Deswegen habe ich den ja auch verlinkt…

Du siehst, dass auch mein Code nicht alle Blätter druckt, sondern nur die, die eine Bedingung erfüllen. Diese kannst du durch deine Bedingung ersetzen. Wenn du das nicht hinbekommst, beschreibe, woran man die „bestimmten“ Blätter erkennt.
Antworten Top
#6
Die Tabellenblätter haben alle unterschiedliche Namen, das einzige was in jeden Tabellenblatt gleich ist, die als PDF gespeichertwerden sollen ist die Spalte "B4" in dieser steht immer Abrechnung Sonderleistung/leistungen ...
Ich hoffe das hilft dir weiter ...

Was ist den die Bedingung in deine  Code ?
Antworten Top
#7
Code:
If wsCurrent.Visible = xlSheetVisible Then
Ersetzen durch
Code:
If wsCurrent.Range("B4").Value = "Abrechnung Sonderleistung/leistungen" Then
Antworten Top
#8
hey... habe ich probiert, hat leider nicht funktioniert .... jetzt bekomme ich nur noch eine großes PDF Dokument, und mit noch allen Tabellenblättern ..
Antworten Top
#9
Selbstverständlich. Das bekamst du vorher aber auch schon, ohne dass es dir auffiel - ordentlich getestet und beschäftigt hast du dich damit also nicht. Das entspricht nämlich dem Wunsch im verlinkten Thread, den du ja gelesen hast. Und wenn du die zugehörenden Codezeilen löscht, könntest du das „Problem“ sehr einfach selbst lösen.
Antworten Top
#10
Hallo

bitte den Code von EarlFred hinter den 1. IF Befehl setzen. Man achte bitte auf die genauen Details!
Hinter dem Textzeichen "/" fehlt ein "-" vor "-leistungen".  Bitte nicht fragen woher ich das weiss.
Das zweite End If bitte nicht vergessen!  Wenn das der Fehler war sollte das PDF drucken klappen.

Code:
If wsCurrent.Visible = xlSheetVisible Then
If wsCurrent.Range("B4").Value = "Abrechnung Sonderleistung/-leistungen" Then

mfg Gast 123
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste