Registriert seit: 11.04.2014
Version(en): Office 365
Hallo!
Was mir auffällt: varFilename <> "Falsch" ist im Deutschen besser und verursacht weniger Fehler.
Gruß, René
Registriert seit: 11.04.2014
Version(en): 365
14.04.2014, 10:31
(Dieser Beitrag wurde zuletzt bearbeitet: 14.04.2014, 11:58 von Glausius.)
Hallo, der Hinweis ist mir klar. (11.04.2014, 17:13)Rabe schrieb: Wenn Du die Vorlage per Doppelklick öffnest, ist es eine neue Datei, die erst dann einen Pfad und Dateinamen hat, wenn sie ein Mal abgespeichert wurde.
Deswegen klappt das nicht. Gibt es eine Möglichkeit den Dateispeicherort der Ursprungs-Vorlagendatei auszulesen und in ein Feld, der neuen Datei, das ich als Name definiert habe zu schreiben? Grundsätzlich wollte ich mit diesem Code nur den Speichern unter Dialog öffnen und den Dateityp pdf voreinstellen, wenn der Pfad nicht angegeben wird. Code: 'Dateipfad aus Zelle auslesen xlPfad = Range("Speicherort").Value
If xlPfad = "" Then Dim varFilename As Variant
varFilename = Application.GetSaveAsFilename( _ InitialFileName:=xlName, _ FileFilter:="PDF (*.pdf), *.pdf", _ Title:="als PDF speichern")
If varFilename <> False Then ThisWorksheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=varFilename End If End If
If xlPfad <> "" Then
Ich glaube, dass ich den Code im alten Cleverforum bekommen habe, weis aber nicht mehr von wem. Da ich mehr ein Sammler von fertigen Codes und deren Anpassung an meine Arbeitsmappe bin, weis ich ganz ehrlich auch gar nicht was diese Codezeilen bedeuten. Code: If varFilename <> False Then ThisWorksheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=varFilename End If
Vielleicht kann mir das jemand erklären.
LG Herbert Windows 10 Office 365
Registriert seit: 10.04.2014
Version(en): 2016 + 365
14.04.2014, 12:05
(Dieser Beitrag wurde zuletzt bearbeitet: 14.04.2014, 12:06 von Rabe.)
Hi Herbert, (14.04.2014, 10:31)herbert0803 schrieb: Da ich mehr ein Sammler von fertigen Codes und deren Anpassung an meine Arbeitsmappe bin, weis ich ganz ehrlich auch gar nicht was diese Codezeilen bedeuten.
Code: If varFilename <> False Then ThisWorksheet.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=varFilename End If
Vielleicht kann mir das jemand erklären. Ich denke, das ist so: Wenn die Variable "Filename" nicht leer ist, dann exportiere das Arbeitsblatt als PDF mit dem Inhalt der Variablen als Datei-Namen.
Registriert seit: 11.04.2014
Version(en): 365
Hallo zusammen, Danke für die Hinweise. Ich habe mich selbst noch ein wenig "gespielt" und so scheint es für meine Bedürnisse zu funktionieren. PHP-Code: Sub Speichern_als_pdf() Dim xlName As String Dim xlPfad As String Dim xlOpenAfterPublish As Boolean
'PDF-Öffnen-Abfrage erstellen If MsgBox("Soll die PDF-Datei nach dem Erstellen angezeigt werden?", vbYesNo + vbQuestion, "Frage") = vbYes Then xlOpenAfterPublish = True
'Dateiname aus Zelle auslesen xlName = Range("I1").Value
'Dateipfad aus Zelle auslesen xlPfad = Range("Speicherort").Value
If xlPfad = "" Then Dim varFilename As Variant
varFilename = Application.GetSaveAsFilename( _ InitialFileName:=xlName, _ FileFilter:="PDF (*.pdf), *.pdf", _ Title:="als PDF speichern")
If varFilename <> False Then With ActiveSheet .ExportAsFixedFormat Type:=xlTypePDF, Filename:=varFilename, Quality:=xlQualityStandard, IgnorePrintAreas:=False, OpenAfterPublish:=IIf(xlOpenAfterPublish, True, False) End With End If End If
If xlPfad <> "" Then With ActiveSheet 'PDF-File erstellen, in Dateipfad mit gleichem Namen speichern '.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1), Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=IIf(xlOpenAfterPublish, True, False)
'PDF-File erstellen, in Dateipfad und unter in I1 angegebenen Namen speichern '.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & xlName, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=IIf(xlOpenAfterPublish, True, False) 'PDF-File erstellen, in Dateipfad im Tabellenblatt "Anleitung" in Zelle B27 angegeben und unter in I1 angegebenen Namen speichern .ExportAsFixedFormat Type:=xlTypePDF, Filename:=xlPfad & "\" & xlName, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=IIf(xlOpenAfterPublish, True, False)
End With End If
'Boolean-Variable einschalten xlOpenAfterPublish = True
End Sub
Falls euch noch was auffällt, was besser oder kürzer programmiert werden könnte, bitte ich um Rückmeldung. Ansonsten funktioniert es jetzt. Wenn in der Zelle Speicherort keine Daten stehen, wird der Speichern unter Dialog geöffnet. Wenn dort Daten stehen, wird das Tabellenblatt unter dem eingetragenen Pfad als pdf gespeichert. Noch eine grundsätzliche Frage: Welche Methode zum Einfügen von Code ist die bessere oder gewünschte, Normal oder PHP?
LG Herbert Windows 10 Office 365
Registriert seit: 14.04.2014
Version(en): Office 2013/2016/2019/365
Hi, das iif wird nicht benötigt da ja über die Abfrage True für xlOpenAfterPublish vergeben werden kann. und den Export könnte man über eine eigene Sub machen mit Übergabeparametern. Code: Sub Speichern_als_pdf() Dim xlName As String Dim xlPfad As String Dim xlOpenAfterPublish As Boolean 'PDF-Öffnen-Abfrage erstellen If MsgBox("Soll die PDF-Datei nach dem Erstellen angezeigt werden?", vbYesNo + vbQuestion, "Frage") = vbYes Then xlOpenAfterPublish = True 'Dateiname aus Zelle auslesen xlName = Range("I1").Value 'Dateipfad aus Zelle auslesen xlPfad = Range("Speicherort").Value If xlPfad = "" Then Dim varFilename As Variant varFilename = Application.GetSaveAsFilename(InitialFileName:=xlName, FileFilter:="PDF (*.pdf), *.pdf", Title:="als PDF speichern") If varFilename <> False Then Call export(varFilename, xlOpenAfterPublish) End If End If If xlPfad <> "" Then Call export(xlPfad & "\" & xlName, xlOpenAfterPublish) End If End Sub
Sub export(strFile As Variant, BolP As Boolean) ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=strFile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=BolP End Sub
lg Chris
lg Chris Feedback nicht vergessen. 3a2920576572206973742064656e20646120736f206e65756769657269672e
Registriert seit: 11.04.2014
Version(en): 365
Hallo Chris,
mit Deinem Code funktioniert das wunderbar und er ist etwas kürzer.
Danke!
LG Herbert Windows 10 Office 365
|