❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ 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] Base->Makro->Writer->Feldbefehl „Platzhalter“

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Dami
Beiträge: 24
Registriert: Di 20. Jan 2015, 09:33

[gelöst] Base->Makro->Writer->Feldbefehl „Platzhalter“

Beitrag von Dami » Do 7. Mai 2015, 14:48

Habe hier eine inzwischen eine gut funktionierende Praxisverwaltung auf die Beine gestellt.
Jetzt bin ich dabei an dem „Korrespondenz-Modul“ zu basteln um das auch zu Papier zu bringen und stoße auf ein Prob wo ich nicht weiterkomme.
In Base habe ich Maske(n) erstellt in der die Daten die in den Brief/Anschreiben/Rechnung/ …
kommen generiert/zusammengetragen werden.
Mit Hilfe eines Makros wird ein Writer-Doc geladen und die Felder in die Feldbefehl/Platzhalter übertragen.

So weit so gut, jetzt mein Problem:
Mir gelingt es nicht die unbelegten !Zeilen! mit dem !Platzhalter! (zB. Postfach wenn Straße und umgekehrt)
mit Writer Bordmitteln (Bereich – Ausblenden) auszublenden.
Hat jemand hier ein Trick wie es doch möglich sein könnte ?

Da es so anscheinend nicht möglich ist, dachte ich an folgende Lösung:
Wenn die Zeile gelöscht werden soll übergebe ich an den Platzhalter entweder
Backspace ( CHR(08) ) oder Delete ( CHR(127) ), nur soweit komme ich nicht,
da mir das Makro mit der Fehlermeldung „Objektvariable nicht belegt“ den Dienst quittiert.
Was mache ich hier falsch ??? :?:

Das Makro:

Code: Alles auswählen

SUB Textfelder_Fuellen (oEvent AS OBJECT)
 DIM oForm AS OBJECT
 DIM aForms AS OBJECT
 DIM oColumns AS OBJECT
 DIM oDB AS OBJECT
 DIM oNewDoc AS OBJECT
 DIM oTextfields AS OBJECT
 DIM oTextfield AS OBJECT
 DIM stColumnname AS STRING
 DIM stDir AS STRING
 DIM inIndex AS INTEGER
 DIM stTag AS STRING
            stTag = oEvent.Source.Model.Tag 
            oForms() = Split(stTag, ",")
            oForm = thisComponent.Drawpage.Forms.MainForm.SubForm
            oColumns = oForm.Columns
            oDB = ThisComponent.Parent	
            stDir = "file:///Users/.........../Korrespondenz/0_Vorlagen/"
            stDir = stDir & (Trim(aForms(0)))
	REM Vorlage öffnen
	DIM args(0) AS NEW com.sun.star.beans.PropertyValue
	args(0).Name = "AsTemplate"
	args(0).Value = True
	oNewDoc = StarDesktop.loadComponentFromURL(stDir,"_blank",0,args)
	REM Textfelder holen
	oTextfields = oNewDoc.Textfields.createEnumeration
	DO WHILE oTextfields.hasMoreElements
	oTextfield = oTextfields.nextElement
		IF oTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") THEN
			stColumnname = oTextfield.PlaceHolder
			IF oColumns.hasByName(stColumnname) THEN
				inIndex = oForm.findColumn(stColumnname)
				oTextfield.Anchor.String = oForm.getString(inIndex) 
				IF oForm.getString(inIndex) = "_" THEN
				    oTextfield.Anchor.String = "CHR(08)" ' <-- Die böse Stelle :evil:  :oops:
				END IF
			END IF
		END IF
	LOOP
END SUB
Zuletzt geändert von Dami am Mo 11. Mai 2015, 17:01, insgesamt 1-mal geändert.

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Beitrag von F3K Total » Do 7. Mai 2015, 18:51

Hi,
versuch mal

Code: Alles auswählen

oTextfield.Anchor.String = CHR(08) ' <-- Die böse Stelle :evil:  :oops:
ohne Anführungszeichen.
Gruß R
Windows 11: AOO, LO Linux Mint: AOO, LO

Dami
Beiträge: 24
Registriert: Di 20. Jan 2015, 09:33

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Beitrag von Dami » Fr 8. Mai 2015, 10:45

Hallo Robert,
leider keine Abhilfe ! :(
Egal was ich eintrage
z.B:
oTextfield.Anchor.String = "Hallo"
oTextfield.Anchor.String = CHR(08)
...
bekomme ich ein Laufzeitfehler "Objektvariable nicht belegt" in der Zuweisung.
:?: :?: :?:

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Beitrag von F3K Total » Fr 8. Mai 2015, 16:26

Tja, im Nebel stochern ist doof. Lade die beteiligten Dateien, ggf. verfremdet hier hoch, dann können wir schauen.
Gruß R (F3K Total, Robert unterschreibt mit Robert)
Windows 11: AOO, LO Linux Mint: AOO, LO

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

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Beitrag von RobertG » Fr 8. Mai 2015, 20:00

Hallo Dami,

ich habe jetzt auch einmal ein bisschen darüber gegrübelt und bei mir die Eigenschaften zum Textfeld genauer angesehen. Spontan komme ich da auch auf keine Möglichkeit, ein Feld mit Absatz zu löschen.

Ich würde das Problem von der anderen Seite her aufzäumen:
Postfach wenn Straße und umgekehrt
Warum gehst Du da nicht mit einer Abfrage ran?

Code: Alles auswählen

SELECT IFNULL("Postfach","Straße") AS "Zustellung_ueber" FROM "Adresse"
Dann benötigst Du nur einen Platzhalter und die korrekte Befüllung kommt über die Abfrage zustande.

Gruß

Robert
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

Dami
Beiträge: 24
Registriert: Di 20. Jan 2015, 09:33

Re: Base -> Makro -> Writer -> Feldbefehl „Platzhalter“ ..

Beitrag von Dami » Mo 11. Mai 2015, 17:00

Hallo,
erstmals sorry an F3K Total für die falsche Ansprache :oops:

@ Robert:
Ja und nein, da in meiner z.B.: Anschrift mehrere Leerzeilen vorkommen
wäre der Aufwand recht hoch und soll nicht nur bei der Anschrift zum Einsatz kommen.

die Platzhalter / Zeile 1 -> Vorname, Nachname oder Firma
der Platzhalter / Zeile 2 -> Abteilung (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
die Platzhalter / Zeile 3 -> Ansprechpartner (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
der Platzhalter / Zeile 4 -> Postfach (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
der Platzhalter / Zeile 5 -> Strasse (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro
die Platzhalter / Zeile 6 -> PLZ Ort
der Platzhalter / Zeile 7 -> Fax (ist ggf. belegt) / wird gelöscht wenn momentan "_" im Makro

Aber ! Problem gelöst !!! :D

Code: Alles auswählen

SUB Textfelder_Fuellen (oEvent AS OBJECT)
	DIM oForm AS OBJECT
                DIM aForms AS OBJECT
	DIM oColumns AS OBJECT
	DIM oDB AS OBJECT
	DIM oNewDoc AS OBJECT
	DIM oTextfields AS OBJECT
	DIM oTextfield AS OBJECT
	DIM oViewCursor AS OBJECT
	DIM stColumnname AS STRING
	DIM stDir AS STRING
	DIM inIndex AS INTEGER
	DIM stTag AS STRING
	stTag = oEvent.Source.Model.Tag
	aForms() = Split(stTag, ",")

	oForm = thisComponent.Drawpage.Forms.MainForm.SubForm   'Daten in Base (hier .../SubForm)
	oColumns = oForm.Columns
	oDB = ThisComponent.Parent
                stDir = "file:///Users/.../"
	stDir = stDir & (Trim(aForms(0))) 'Platz 1 - Vordruck
	REM Vorlage Öffnen
	DIM args(0) AS NEW com.sun.star.beans.PropertyValue
	args(0).Name = "AsTemplate"
	args(0).Value = True
	oNewDoc = StarDesktop.loadComponentFromURL(stDir,"_blank",0,args)
	REM Textfelder holen
	oViewCursor = oNewDoc.CurrentController.getviewCursor()
	oTextfields = oNewDoc.Textfields.createEnumeration
	
	DO WHILE oTextfields.hasMoreElements()
	oTextfield = oTextfields.nextElement()
	IF oTextfield.supportsService("com.sun.star.text.TextField.JumpEdit") THEN
		stColumnname = oTextfield.PlaceHolder
		IF oColumns.hasByName(stColumnname) THEN
	  		inIndex = oForm.findColumn(stColumnname)
			oViewCursor.GotoRange(oTextfield.Anchor,false)
			oViewCursor.String = oForm.getString(inIndex)
				IF oForm.getString(inIndex) = "_" THEN
				   REM MsgBox oForm.getString(inIndex)
				   oViewCursor.String = "" ' String leer machen; hier funktioniert die Zuweisung
				   oViewCursor.goRight (1, true) ' mit dieser und der folgender Zeile lösche ich den Platzhalter
				   oViewCursor.String = ""
				END IF
		END IF
	END IF
	LOOP
END SUB
Danke euch
Dami


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