❤️ 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. 🌱
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
-
Acco
- Beiträge: 94
- Registriert: Fr 31. Jan 2014, 16:41
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
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:
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
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
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
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.