💚 BITTE helfen Sie uns NOCH HEUTE mit einer SPENDE 💚
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Formular über Button aufrufen

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Benutzeravatar
Mansaylon
Beiträge: 17
Registriert: Do 4. Feb 2016, 18:48

Formular über Button aufrufen

Beitrag von Mansaylon » Fr 5. Feb 2016, 15:38

Hallo zusammen

Ich weiss.... das Thema wurde schon oft durch genommen.
Habe auch alles darüber gelesen, was ich finden konnte.
Nur sehe ich vermutlich den Wald nicht vor lauter Bäume.

Ich möchte gerne aus meinen Formularen heraus jeweils auf andere Formulare umschalten können.
Irgendwie muss man das mit Macros machen.
Bisher wollte aber absolut nichts funktionieren. Bekam immer Fehler.
Dann bin ich mir nicht sicher, ob man da für mehrere solcher Buttons alles im selben Macro programmieren muss, oder ob man immer wieder ein neues Macro erstellen soll.
Wie soll man also mehrere solcher Buttons programmieren können?
Auch mit der Namensgebung geht das nicht..... MainForm beispielsweise hat nicht funktioniert.

Gibt es irgendwo eine Step by Step Anleitung für Version 5 und in deutsch versteht sich?? ;)

Danke.

Bye Mansaylon
Bye
Mansaylon

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Formular über Button aufrufen

Beitrag von gogo » Fr 5. Feb 2016, 16:13

Schau mal da:
Base-Handbuch

Kapitel: Handbuch „Base“ (Datenbank)
Kapitel 09 – Makros
Seite 59 "Navigation von einem Formular zum anderen"
bzw:
Seite 84 "Formular direkt beim Öffnen der Datenbankdatei starten"
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

gogo
Beiträge: 1072
Registriert: Sa 5. Feb 2011, 19:07

Re: Formular über Button aufrufen

Beitrag von gogo » Fr 5. Feb 2016, 17:14

Dein Verständnisproblem kommt wahrscheinlich daher, dass es in LO/AOO 2 missverständliche Bedeutungen für "Formular" gibt:

Der Anwender versteht darunter ein Fenster in dem er was sieht, und dieses heißt zwar "Formular" ist aber in LO/AOO in der Regel ein Wirter-Dokument, das in einer Base-Datenbank gespeichert ist. Nennen wir es hier mal Formulardokument. Diese Formulardokumente heißen dann so wie man sie eben benennt, und man öffnet sie mit folgendem Code:

Code: Alles auswählen

ThisDatabaseDocument.FormDocuments.getByName("Formularname").open
Um in so einem Formulardokument Daten zu sehen, gibt es "Form-Objekte" die ein "unsichtbarer", untergeordneter Teil des Formulardokuments sind. Das erste dieser untergeordneten Form-Objekte erhält automatisch den Namen "MainForm" (kann man nachträglich aber noch ändern). Da die Form-Objekte Teil des Formulardokuments sind muss man sie nicht öffnen, sie werden beim Öffnen des Formulardokuments automatisch geladen und stehen mit

Code: Alles auswählen

{Formulardokument].Drawpage.forms.getByName("MainForm")
zur Verfügung.

Jedenfalls kann man diese Form-Objekte natürlich erst ansprechen, wenn das Formulardokument in dem sie sich befinden geöffnet wurde, daher schlägt ThisDatabaseDocument.FormDocuments.getByName("MainForm").open - auch fehl - in den "FormDocuments" gibt es kein "MainForm"

Wie man was anspricht - siehe Bild:
Formularstruktur_Base-Datenbank.png
Formularstruktur_Base-Datenbank.png (67.61 KiB) 6372 mal betrachtet
und:
Alles was man in einem Formular sieht ist in der Regel erst Teil eines Formular-Objekts (also die grünen Dinger im Bild)! Eine Spalte namens "Postleitzahl" in einem Tabellen-Kontrollelement (mit Namen "TabellenGrid") in einem Unterformular müsste man dann etwa so ansprechen:

Code: Alles auswählen

' die Variable oDBForm beinhaltet das Datenbankformular "Formularname"
oDBForm=ThisDatabaseDocument.FormDocuments.getByName("Formularname").open

' die Variable oPLZ beinhaltet das Kästchen der Spalte "Postleitzahl"
oPLZ=oDBForm.forms.getByName("MainForm").getByName("SubForm").getbyname("TabellenGrid").getbyname("Postleitzahl")

' die Variable sPostLZ beinhaltet den  String der im Kästchen "Postleitzahl" des aktuellen Datensatzes steht.
sPostLZ=oPLZ.string
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Benutzeravatar
Mansaylon
Beiträge: 17
Registriert: Do 4. Feb 2016, 18:48

Re: Formular über Button aufrufen

Beitrag von Mansaylon » Fr 5. Feb 2016, 18:31

Es ist ja wirklich nett gemeint.... aber ich drehe mich da immer noch im Kreise.

Ich habe über Makro verwalten -> LibreOffice Basic Makros -> Standard -> Module1 nun den Eintrag Tabellenformular_oeffnen mit folgendem Eintrag.

Code: Alles auswählen

Sub Tabellenformular_oeffnen
  ThisDatabaseDocument.FormDocuments.getByName( "Tabellenformular" ).open
End Sub
Ich habe auch so eine Tabelle.... überall wo ich konnte (denke ich, habe ich den Namen Tabellenformular in jenem Formular eingetragen.
Bekomme aber immer noch einen Fehler: BASIC-Laufzeitfehler. Objektvariable nicht belegt.

Ich steh im Walde..... Im Handbuch steht da was von Formularkontrollfeld... nur wenn ich das Formular in Bearbeitung habe, kann ich nur die Formular-Eigenschaften nicht aber das Kontrollfeld öffnen ?!?
Bei den Eigenschaften habe ich den Namen 'Tabellenformular' eingetragen... was offenbar auch nichts bringt.
Bye
Mansaylon

RobertG
Beiträge: 2735
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Formular über Button aufrufen

Beitrag von RobertG » Fr 5. Feb 2016, 19:15

Hallo Mansaylon,

mit dem von Dir beschrieben Makro ruft Du das Formular "Tabellenformular" auf, das in dem Formularcontainer der Datenbank liegt. Es öffnet sich also ein Fenster mit dem Inhalt dieses Formulars.
Das geht so aber nur, wenn Du das Makro in der Datenbank selbst abspeicherst:
Extras → Makros verwalten → LibreOffice Basic → Datenbankname.odb → Neu.
Dann ist die Datenbank gestartet und dem Makro klar, was denn nun "ThisDatabaseDocument" ist.
Das Makro kannst Du z.B. mit dem Start der Datenbankdatei verbinden. Dann startet direkt nach dem Aufbau der Datenbankdatei das Formular. Das Makro kannst Du auch mit einem Button verbinden. Dort musst Du es über "Ereignisse → Aktion ausführen" einbauen.

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

Benutzeravatar
Mansaylon
Beiträge: 17
Registriert: Do 4. Feb 2016, 18:48

Re: Formular über Button aufrufen

Beitrag von Mansaylon » Fr 5. Feb 2016, 19:51

Offenbar komme ich dem Geheimnis nun etwas näher.
Das Makro ist nun in der Datenbank eingebunden. Somit bekomme ich schon mal keine Fehler mehr.
Nur öffnet sich mein Tabellenformular (noch) nicht.

Da ich beim Makro nun aus versehen ein 2. Sub/End drin habe, habe ich auch verstanden, wie die Mechanik für mehrere Buttons dann funktionieren wird... einfach alle gewünschten Buttons dort einbinden.
Jetzt fehlt eigentlich nur noch das Erfolgserlebnis, dass mein Tabellenformular über den Button auch öffnet ;)
Also eingebunden über Eigenschaften der Schaltfläche im Tab Ereignisse unter Aktion ausführen.
Bye
Mansaylon

Benutzeravatar
Mansaylon
Beiträge: 17
Registriert: Do 4. Feb 2016, 18:48

Re: Formular über Button aufrufen

Beitrag von Mansaylon » Fr 5. Feb 2016, 20:02

Tataaaa..... Makro Sicherheit war zu hoch.
Und es läuft.

Vielen Dank für die Hilfe und Geduld.
Bye
Mansaylon

Martias
Beiträge: 5
Registriert: Mi 10. Aug 2016, 13:25

Re: Formular über Button aufrufen

Beitrag von Martias » Mo 2. Jan 2017, 09:09

Guten Morgen zusammen und ein frohes neues Jahr :)

Ich poste in diesen thread, da er genau mein Problem beschreibt.
Nach vielerlei Versuchen und Herumgraberei, hab ich es geschafft mein erstes Libre Base projekt fast fertigzustellen.
Inklusive Makros ect.

Ich scheitere jetzt nur noch an einer Sache, die ich einfach, trotz Nachlesen und intensiver Suche im Netz, nicht hinbekomme.

Ok zu den Fakten:
Ich benutze Libre Office Version: 5.1.1.3 auf einem Windows 7 Rechner.

Ich habe eine Datenbank erstellt, die zur Verwaltung von Schlüsseln dient, diese ist sehr stark auf spezifische Anforderungen hin ausgerichtet.

Nun ergibt sich folgendes Problem.

Ich habe ein Ein- Ausgabeformular Namens frmTest.
In diesem Formular extistiert das Hauptformular "MainForm" und das untergeordnete Formular "SubForm"
Das Untergeordnete Formular SubForm wird zur Anzeige von Datensätzen verwendet, die im Hauptformular "MainForm über ein Listenfeld ausgewählt werden können. Hier können auch Eingaben gemacht werden, heist die Datensätze verändert werden.

Auf dem Haupformular "frmTest" im "MainForm" befindet sich ein Button dessen Anklicken ein weiteres Formulardokument öffnet.
Dieses heist "frmQuittung" und auf dessen "MainForm" befindet sich ein Text, der den Empfang eines Schlüssels gegen die Zahlung eines Pfandbetrages Quitieren soll. Dieses Formulardokument wird dann schlussendlich ausgedruckt und als Quittungsbeleg verwendet.

Das Öffnen über den Button klappt absolut problemlos dank der Codezeile

Code: Alles auswählen

Sub openForm
  ThisDatabaseDocument.FormDocuments.getByName("frmQuittung").open 
Anzumerken ist dabei wohl, das alle makros Innerhalb der Database erstellt worden sind.
Nun möchte ich das bestimmt Einträge aus dem subFormular des Haupformulars in die Quittung übernommen werden.
Zum Beispiel der inhalt des Feldes "txtVorname"
Dieses befindet sich auf dem Formular "SubForm" des ursprünglich geöffneten Formulardokumentes frmTest.

Ich versuche es z.B. mit dem folgenden Code ( formTest ist hier das Hauptformular )

Code: Alles auswählen

Sub openForm
ThisDatabaseDocument.FormDocuments.getByName("frmQuittung").open
oSource1 = ThisDatabaseDocument.FormDocuments.getByName("formTest")
oVorNameS = oSource1.forms.("MainForm").getByName("SubForm").getByName("txtVorname")
EndSub
Hier erhalte ich die Fehlermeldung:
BASIC-Syntaxfehler.
Variable erwartet.

Und markiert wird der Eintrag
oSource1.forms.( Im Codeeditor.

Ich habs mit verschiedenen varianten getestet, aber ich komme wirklich nicht mehr weiter.
Hat bitte jemand einen Tipp für mich?

Vielen dank im vorrraus.

RobertG
Beiträge: 2735
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Formular über Button aufrufen

Beitrag von RobertG » Mo 2. Jan 2017, 10:16

Hallo Martias,

wenn Du Daten aus einem Formular in ein anderes Formular übertragen möchtest, dann lies zuerst die Daten aus dem ersten Formular aus und versuche nicht, das andere Formular zu öffnen und dann auch das vorherige zuzugreifen.

1. Du befindest Dich mit oSource1 vermutlich nicht auf der Ebene "Drawpage" des vorherigen Formulars.
2. oSource1.forms.("MainForm").getByName("SubForm").getByName("txtVorname") dürfte sowieso nicht funktionieren, weil getByName einmal fehlt:
oSource1.forms.getByName("MainForm").getByName("SubForm").getByName("txtVorname")
Wenn Du das Formular ohne getByName ansprechen willst, dann auch ohne Klammern und Anführungszeichen.

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

Martias
Beiträge: 5
Registriert: Mi 10. Aug 2016, 13:25

Re: Formular über Button aufrufen

Beitrag von Martias » Mo 2. Jan 2017, 10:44

Danke Robert

Kann ich den String aus dem Feld txtVorname einfach in ein textfeld ( ungebunden ) in das neue formular mittels variable übergeben?

bzw ich habs nun auf diese Weise versucht.

Code: Alles auswählen

Sub openForm
oSource1 = ThisDatabaseDocument.FormDocuments.getByName("formTest")
oVorNameS = oSource1.forms.getByName("MainForm").getByName("SubForm").getByName("txtVorname")
oNachNameS = oSource1.forms.getByName("MainForm").getByName("SubForm").getbyname("txtNachname")
oSchluesselS = oSource1.forms.getByName("MainForm").getByName("SubForm").getbyname("txtSchluesselnummer")
oSpindS = oSource1.forms.getByName("MainForm").getByName("SubForm").getbyname("txtSpindnummer")
ThisDatabaseDocument.FormDocuments.getByName("frmQuittung").open
End Sub
Das Makro ist an den Button des Hauptdokumentes gebunden über das Ereignis "Aktion bestätigen"

Hier erscheint allerdings die FM:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: forms.

Was mich nun doch etwas aus der bahn wirft.
Irgendetwas übersehe ich wohl, oder ich habs komplett falsch verstanden.

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten