🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

(gelöst) Mehrere Dokumente mit einem einzigen Textfield-Makro ausfüllen?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

(gelöst) Mehrere Dokumente mit einem einzigen Textfield-Makro ausfüllen?

Beitrag von Freischreiber » So 6. Okt 2024, 10:50

Hallo,

wie schon erwähnt, benutze ich zum Befüllen von Platzhalter-Feldern in Writer aus meiner Datenbank dieses Makro:
http://www.libreoffice-forum.de/viewtop ... =10#p27919

Es hat (sehr grob) dieses Gerüst:

Code: Alles auswählen

Sub Textfield-Makro
	...
	sURL = sURL & "Musterdatenbank Briefvorlage.ott"
	REM Vorlage öffnen
	Dim args(0) as new com.sun.star.beans.PropertyValue
	args(0).Name = "AsTemplate"
	args(0).Value = True
	newDoc = StarDesktop.loadComponentFromURL(sURL,"_blank",0,args)
	...
End Sub
Jetzt möchte ich dieses Makro verwenden, um aus einem Base-Formular viele verschiedene Writer-Dokumente auszufüllen, ohne für jedes Dokument ein abgewandeltes Makro bauen zu müssen.

Dazu habe ich diesen Lösungsvorschlag von F3KTotal gefunden:
http://oooforum.de/viewtopic.php?p=2349 ... f8#p234956

Heißt: ich müßte nur für alle auszufüllenden Writer-Dokumente Knöpfe im Base-Formular einbauen, die alle dasselbe Makro aufrufen, aber mit einem individuellen "tag" versehen sind, der idealerweise den Dateinamen der auszufüllenden Writer-Dokumentvorlage enthält, z. B. "Musterdatenbank Briefvorlage.ott".

Mit diesem Code soll das gehen:

Code: Alles auswählen

Sub S_read_tag(Event)
    oButton = Event.source.model
    sTag = oButton.tag
    msgbox stag
end sub
Jetzt ist die Preisfrage: Wie bekomme ich diese Tag-Abfrage so in das obere Makro, daß der String stag für die Bildung der sURL verwendet werden kann: sURL = sURL & stag ?

Wenn ich das so vor dem converttourl einfüge:

Code: Alles auswählen

  ' Zusatzinformation aus aufrufendem Button auslesen fürs richtige ott-Formular   
	oButton = Event.source.model
	sTag = oButton.tag
	msgbox stag
dann komme ich nicht mal bis zur msgbox, sondern erhalte "BASIC-Laufzeitfehler. Objektvariable nicht belegt."

Was ich spontan nicht verstehe, ist das (Event) hinter dem Prozedurnamen. Sowas finde ich im Handbuch nicht wörtlich, nur ähnlich als "SUB Name(oEvent AS OBJECT)".

Brauche ich das "(Event)" und wenn ja: wie genau?

Vielen Dank für Hinweise.

Freischreiber
Zuletzt geändert von Freischreiber am Mo 7. Okt 2024, 09:28, insgesamt 1-mal geändert.
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Mehrere Dokumente mit einem einzigen Textfield-Makro ausfüllen?

Beitrag von Freischreiber » So 6. Okt 2024, 10:52

:!:
Oh! Ja! Es funktioniert, einfach indem ich hinter den Makronamen das (Event) setze! :D
Aber warum??
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Mehrere Dokumente mit einem einzigen Textfield-Makro ausfüllen?

Beitrag von RobertG » So 6. Okt 2024, 16:05

Wenn Du einer Prozedur einen Parameter mitgeben willst, dann muss der in der Klammer hinter dem Prozedurnamen stehen.

SUB Prozedur(oEvent)
oButton = oEvent.Source.Model

Da Du in der 2. Zeile auf das auslösende Ereignis zurückkommst musst Du der Prozedur also auch das auslösende Ereignis mitgeben. Mitten in der Prozedur kennt der Code dann die Variable nicht und kann damit nichts anfangen. Wie Du die Variable nennst ist egal, nur muss die Bezeichnung in den Klammern gleich der Bezeichnung im folgenden Code sein.
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

Freischreiber
* LO-Experte *
Beiträge: 832
Registriert: Fr 28. Mär 2014, 10:41

Re: Mehrere Dokumente mit einem einzigen Textfield-Makro ausfüllen?

Beitrag von Freischreiber » Mo 7. Okt 2024, 09:27

Hallo Robert,

vielen Dank! Dann ist es wohl wirklich besser, wenn ich das Ding "oEvent" taufe, dann sehe ich als Laie, daß es eine Variable ist.

Aber was hat es mit den schon oft gesehenen leeren Klammern auf sich? "SUB Prozedur() ..." habe ich auch schon gesehen.

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten