Makro erstellen pdf export probleme

hallo! ich bin vollkommen neu und habe auch leider wenig ahnung von makros und code. ich habe versucht mir mit diversen ki modellen ein makro zu basteln, um mir die arbeit etwas zu erleichtern, nachdem ich es selbst nicht geschafft habe umzusetzen.

vielleicht kann mir ja hier jemand helfen…
ich habe ein dokument mit mehreren arbeitsblättern und ich möchte von einem arbeitsblatt einen bereich markieren und als pdf exportieren. Der Bereich sollte automatisch ausgewählt sein, weil es immer der gleiche ist - A1 bis D20. (manuell selektiere ich diesen bereich, gehe auf export, pdf nur markierter bereich und speichere das pdf). diesen schritt hätte ich gerne automatisiert.
das exportieren des pdfs mit einer korrekten namensgebung funktioniert. aber das pdf lässt sich dann nicht öffnen. ich bekomme vom adobe reader eine fehlermeldung dass das pdf beschädigt sei. ich habe dann versucht mit chatgpt das problem zu lösen, aber das fazit war, dass dann immer das komplette pdf exportiert wurde und nicht der spezifische part.

jetzt die frage… funktioniert das was ich haben möchte überhaupt?

ich poste das makro hier auch noch einmal rein… es macht bisschen mehr, aber das problem liegt beim export und beim selektieren denke ich? ich bin über alle tipps und hinweise dankbar!

ich nutze die version 25.2.2.2 auf win 11

Summary

Sub ExportBereichAlsPDF
On Error GoTo ErrorHandler ’ Fehlerbehandlung aktivieren

' Bereich definieren (z. B. A1:D40)
Dim oDoc As Object
Dim oSheet As Object
Dim oRange As Object
Dim pdfName As String
Dim pdfPath As String
Dim folderPath As String
Dim fullName As String
Dim nameParts() As String
Dim firstName As String
Dim lastName As String

' Das aktuelle Dokument holen
oDoc = ThisComponent

' Zugriff auf das Arbeitsblatt "Hallo"
On Error Resume Next
oSheet = oDoc.Sheets.getByName("Hallo")  ' Arbeitsblatt „Hallo“ auswählen
On Error GoTo ErrorHandler

If oSheet Is Nothing Then
    oDoc.getCurrentController().getFrame().setStatusText("Fehler: Arbeitsblatt 'Hallo' nicht gefunden!")
    Exit Sub
End If

' Zugriff auf das Arbeitsblatt "karten"
Dim okartenSheet As Object
On Error Resume Next
okartenSheet = oDoc.Sheets.getByName("karten")  ' Arbeitsblatt „karten“ auswählen
On Error GoTo ErrorHandler

If okartenSheet Is Nothing Then
    oDoc.getCurrentController().getFrame().setStatusText("Fehler: Arbeitsblatt 'karten' nicht gefunden!")
    Exit Sub
End If

' Werte für den Dateinamen holen (Zahl aus D14 auf „karten“ und Name aus A10 auf „karten“)
pdfName = okartenSheet.getCellByPosition(42, CInt(oSheet.getCellByPosition(7, 0).Value) - 1).String ' D14 auf „karten“

' Den vollständigen Namen aus A10 auf „karten“ holen (mit der INDIREKT-Formel)
fullName = okartenSheet.getCellByPosition(0, CInt(oSheet.getCellByPosition(7, 0).Value) - 1).String ' A10 auf „karten“

' Den Namen in Vorname und Nachname aufteilen (unter der Annahme, dass der Name durch ein Leerzeichen getrennt ist)
nameParts = Split(fullName, " ") ' Teilt den Text an Leerzeichen
If UBound(nameParts) >= 1 Then
    firstName = nameParts(0) ' Erster Teil ist der Vorname
    lastName = nameParts(UBound(nameParts)) ' Letzter Teil ist der Nachname
Else
    firstName = "" ' Falls der Name nur aus einem Wort besteht
    lastName = fullName
End If

' Zielordner definieren (hier als Beispiel der Ordner "D:/Veranstaltungen Karten/Dokumente/Hallo_Party")
folderPath = "D:/Veranstaltungen Karten/Dokumente/Hallo_Party/" ' Ändere den Pfad nach Bedarf

' URL-kompatiblen Pfad erstellen, falls er Leerzeichen enthält
folderPath = Replace(folderPath, "\", "/") ' Backslashes durch Schrägstriche ersetzen
folderPath = "file:///" & folderPath ' Umwandlung in eine URL (file://)

' PDF-Dateipfad zusammenstellen (Zahl_Nachname_Vorname.pdf)
pdfName = pdfName & "_" & lastName & "_" & firstName
pdfPath = folderPath & pdfName & ".pdf"

' Debugging: Überprüfe den Dateipfad
oDoc.getCurrentController().getFrame().setStatusText("Der vollständige Dateipfad lautet: " & pdfPath)

' PDF exportieren
Dim oExportFilter As Object
oExportFilter = oDoc.createInstance("com.sun.star.beans.PropertyValue")
oExportFilter.Name = "FilterName"
oExportFilter.Value = "writer_pdf_Export" ' PDF Export Filter

' Export Optionen
Dim aProps(1) As New com.sun.star.beans.PropertyValue
aProps(0).Name = "SelectionOnly"
aProps(0).Value = True ' Nur den markierten Bereich exportieren

' PDF exportieren
oDoc.storeToURL(pdfPath, aProps())

' Erfolgreiche Nachricht im Statusbalken anzeigen
oDoc.getCurrentController().getFrame().setStatusText("PDF wurde erfolgreich exportiert nach: " & pdfPath)
Exit Sub

ErrorHandler:
oDoc.getCurrentController().getFrame().setStatusText("Fehler: " & Err.Description)
End Sub

Vermutlich liegt der Fehler darin, dass Du aus dem Array aProps() nicht den Filternamen erwähnst.
Ausschnitt aus der XRechnungsDB - PDF-Export:

    DIM filterArgs(1) as New com.sun.star.beans.PropertyValue
	filterArgs(1).Name = "SelectPdfVersion"
	filterArgs(1).Value = 3
	DIM arg(1) AS NEW com.sun.star.beans.PropertyValue
	arg(0).name = "FilterName"
	arg(0).value = "writer_pdf_Export"
	arg(1).Name = "FilterData"
	arg(1).Value = filterArgs
	oNewDoc.storeToURL(stPrintDir, arg())
1 Like

omg, danke!!!