❤️ 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] Laufzeitfehler: Objektvariable nicht belegt

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

[gelöst] Laufzeitfehler: Objektvariable nicht belegt

Beitrag von Acco » Sa 9. Jul 2016, 13:21

Liebe LO Freunde,

in ein Rechnungsformular mit Unterformular und Tabellenkontrollfeld soll ein (in einem anderen Formular errechneter) Preis eingetragen werden. Hier der betreffende Makroteil:

Code: Alles auswählen

    oController = ThisDatabaseDocument.CurrentController
    If not oController.isconnected then oController.connect
    oForm1 = ThisComponent.drawpage.forms.getByName ("Netto_Form")
    eNetto = oForm1.getbyname("Netto").Value
    oFormDok2 = ThisDatabaseDocument.FormDocuments.getByName("Rechnung").open   
    oForm2 = oFormdok2.drawpage.forms.MainForm

' Zuriff auf Unterformular "RechPosten" und dort auf Tabellenkontrollfeld "RechPosten" (blöde Namensgleichheit)
	oRechPostForm = oForm2.getByName("RechPosten").getByName("RechPosten")
	
xray oRechPostForm ' gibt "RechPosten" aus

	' den Fokus auf das TABELLENkontrollfeld setzen und NICHT auf das Formularfeld 
	' Bezug auf das Tabellenkontrollfeld nehmen
		oRechPostView = ThisComponent.CurrentController.GetControl(oRechPostForm)   

xray oRechPostView ' gibt "leerer Datenwert (null)"   aus
		   
	' den Fokus auf das TABELLENkontrollfeld setzen und NICHT auf das Formularfeld 
		oRechPostView.SetFocus ' bringt Fehlermeldung: BASIC-Laufzeitfehler. Objektvariable nicht belegt.
		
	' dann auf die 5.Spalte im Tabellenkontrollfeld springen (0 = 1.Spalte, 1 = 2.Spalte)
		oRechPostView.setCurrentColumnPosition(4)  
BIs zu dieser Zeile klappt es

Code: Alles auswählen

   oRechPostForm = oForm2.getByName("RechPosten").getByName("RechPosten")
Beim setzen des Focus auf das Tabellenkontrollfed jedoch folgt die Fehlermeldung: BASIC-Laufzeitfehler. Objektvariable nicht belegt. in der Zeile

Code: Alles auswählen

oRechPostView.SetFocus 
Was ist falsch im Makro? Ich komme nicht drauf.

Besten Dank und Gruß

acco
Zuletzt geändert von Acco am Do 21. Jul 2016, 22:34, insgesamt 1-mal geändert.
openSUSE Tumbleweed - LibreOffice 24.8.2.1

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

Re: Laufzeitfehler: Objektvariable nicht belegt

Beitrag von RobertG » Sa 9. Jul 2016, 15:11

Hallo acco,

wenn xray vorher doch schon bei oRechPostView 'null' raus gibt, dann steckt dahinter kein Objekt, aus dem Du irgendetwas weiteres rausziehen kannst.

Ich nehme an, dass sich auf ein Tabellenkontrollfeld schlicht kein Focus setzen lässt. Der muss immer in dem ersten Feld in dem Tabellenkontrollfeld landen, also eine Ebene tiefer.

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

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Laufzeitfehler: Objektvariable nicht belegt

Beitrag von Acco » Mo 11. Jul 2016, 13:31

Hallo Robert,

danke für Deine Antwort, Du hast recht das Tabellenkontrollfeld erhält den Fokus nicht.
An anderer Stelle in derselben DB benutze ich dieselbe Makrosequenz (jetzt aber mit auskommentiertem Tabellenkontrollfeld-Fokus) und da funktioniert es einwandfrei.

Ich nehme an es liegt an "ThisComponent".
Es zeigt auf Formular "Netto_Form" (das gibt es im erwähnten funktionierenden Makro nicht) und nicht auf "RechPosten". Ich habe schon länger nicht mehr mit Base gearbeitet und stehe gerade auf dem Schlauch, wie der richtige Bezug hergestellt wird. Glücklicherweise gibt es das Handbuch.

Nochmal vielen Dank und

Gruß acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Laufzeitfehler: Objektvariable nicht belegt

Beitrag von Acco » Mi 13. Jul 2016, 14:45

Moin HeiDieLX,

danke, guter Tip, hilft mir bei Durch- und Überblick.

Gruß acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1

Acco
Beiträge: 94
Registriert: Fr 31. Jan 2014, 16:41

Re: Laufzeitfehler: Objektvariable nicht belegt

Beitrag von Acco » Do 21. Jul 2016, 22:32

Liebe LO'ler

der guten Ordnung halber hier noch der funktionierende Code (ohne Variablendeklarationen):

Code: Alles auswählen

    oController = ThisDatabaseDocument.CurrentController
    If not oController.isconnected then oController.connect
    oFormNetto = ThisComponent.drawpage.forms.getByName ("Netto_Form")			  ' Formular mit Netto-Preis
    sNetto = oFormNetto.getbyname("Netto").Value

    oFormDok2 = ThisDatabaseDocument.FormDocuments.getByName("Rechnung").open	 ' wenn nicht .open 
    																									  '= drawpage wird nicht gefunden

	oFormRech = oFormdok2.drawpage.forms.MainForm								' Rechnungsformular
	stRechNr = oFormRech.getByName("strRechNr").TEXT							' RechnungsNr, alphanumerisch
   	oSubForm2 = oFormRech.getByName("RechPosten")							' Unterformular Rechnungsposten
	oSubGrid2 = oSubForm2.getByName("RechPosten_Grid")						 ' Tabellenkontrollfeld für Preiseintrag

	iID = oSubGrid2.getByName("ID").VALUE 

	oDatenquelle = ThisComponent.Parent.CurrentController
		If NOT (oDatenquelle.isConnected()) THEN
			oDatenquelle.connect()
		END IF
	oVerbindung = oDatenquelle.ActiveConnection()
	oSQL_Anweisung = oVerbindung.createStatement()

	'>>>> sNetto MUSS als CURRENCY deklariert sein, mit SINGLE funktioniert es nicht
	stSql = "UPDATE ""RechPosten"" SET ""EPreis"" = " + sNetto + " WHERE ""RechNr"" = '" + stRechNr + "' and ""ID"" = " + iID 

	oSQL_Anweisung.executeUpdate(stSql)

	oSubForm2.reload
Gruß acco
openSUSE Tumbleweed - LibreOffice 24.8.2.1


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