Mein Problem:
Ich möchte aus einem Formular über einen Push Button ein anderes Formular starten. Bisher sieht mein Code so aus.
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Angebot")
'call Properties (DataSource)
Bookmarks = DataSource.DatabaseDocument()
Forms = Bookmarks.FormDocuments
Formular = Forms.getByName("04 Texte")
??? Formular.execute() ???
End Sub
Das gewünschte Formular finde ich noch, allerdings hörts dann bei mir auf. Gegoogelt und die Dokumentationen angeschaut habe ich schon. Leider bisher ohne Erfolg.
Danke für die Hilfe
Formular Dokument aus Starbasic öffnen
Moderator: Moderatoren
Formular Dokument aus Starbasic öffnen
Viele Wege führen zum Ziel, aber alle nach Rom.
Hey chrdz (...hmm, komischer Name...)
Deinem Code entnehme ich, dass du mit Datenbanken arbeitest. Dort ist es aber genauso. Alle Formulare sind in Writer-Dateien untergebracht, die wiederum Bestandteil des Base-Containers sind. Starte das Dokument - und es startet das Formular. Wahrscheinlich ist der Formularname identisch mit dem Dokumentennamen - mus aber nicht sein.
Also, such in diese Richtung.
Viele Grüße
Thomas
immer mal langsam... was meinst du genau? Formulare sind Bestandteile von Dokumenten (also eines Calc-Dokumentes, eines Writer-Dokumentes...) und wenn das Dokument gestartet ist, ist auch gleichzeitig das Formualr gestartet. Das ist nicht trennbar. Hast du verschiedene Formualre im gleichen Dokument, sind die alle schon "gestartet", möglicherweise aber nicht sichtbar weil auf einer anderen Seite plaziert. Dann musst du eben dorthin springen.Ich möchte aus einem Formular über einen Push Button ein anderes Formular starten. Bisher sieht mein Code so aus.
Deinem Code entnehme ich, dass du mit Datenbanken arbeitest. Dort ist es aber genauso. Alle Formulare sind in Writer-Dateien untergebracht, die wiederum Bestandteil des Base-Containers sind. Starte das Dokument - und es startet das Formular. Wahrscheinlich ist der Formularname identisch mit dem Dokumentennamen - mus aber nicht sein.
Also, such in diese Richtung.
Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Hallo Toxitom,
das chr steht für Christian das dz für meinen Nachnamen.
Insgesamt hast Du mich schon mal in eine Richtung geschubst. Leider begreife ich nicht. Bin wohl doch zu neu. Das Makro wird innerhalb einer Datenbankanwendung(Base) ausgeführt. Dort sind mehrere Formulare gespeichert.
mit
'For I = 0 to Forms.Count -1
'Formular = Forms.getByIndex(I)
'MsgBox Formular.name
'Next I
erhalte ich alle Namen der vorhandenen Formulare.
Mein definitives Problem ist, dass ich das gewünschte Formular nicht auf den Bildschirm bekomme.
das chr steht für Christian das dz für meinen Nachnamen.
Insgesamt hast Du mich schon mal in eine Richtung geschubst. Leider begreife ich nicht. Bin wohl doch zu neu. Das Makro wird innerhalb einer Datenbankanwendung(Base) ausgeführt. Dort sind mehrere Formulare gespeichert.
mit
'For I = 0 to Forms.Count -1
'Formular = Forms.getByIndex(I)
'MsgBox Formular.name
'Next I
erhalte ich alle Namen der vorhandenen Formulare.
Mein definitives Problem ist, dass ich das gewünschte Formular nicht auf den Bildschirm bekomme.

Viele Wege führen zum Ziel, aber alle nach Rom.
Hey Christian,
Dein Form-Code ist insofern nicht aussagekräftig, als der Startteil fehlt.
Wie ereichst du das Objekt "Forms" ?
Möglicherweise über den klassischen Weg :
Dann könntest du dein gewünschtes Formular weiter so erhalten:
Und jetzt hast du ein ganz normales Dokument (Writer) mit allen Eigenschaften und Methoden eines Writerdokumentes - sollte das schon geöffent sein, so hat es einen Controller und einen Frame - dann kannst du es so in Vordergrund bringen:
Ich bezweifele aber, dass du bereits ein Frame dafür hast - also musst du es wahrscheinlich zunächst ganz normale laden (über LoadURL oder eben in eine aktiven Frame einbringen
)
Na ja, so oder so ähnlich wird es funktionieren.
Gruss
Thomas
Genau hier liegt auch das Problem. Base selbst (das Base-Dokument) kann keine Makros speichern - die sind dann entweder global abgelegt (Dateiort "Meine Makros") oder eben innerhalb eines als Formular genutzten Writer-Dokumentes.Das Makro wird innerhalb einer Datenbankanwendung(Base) ausgeführt
Dein Form-Code ist insofern nicht aussagekräftig, als der Startteil fehlt.
Wie ereichst du das Objekt "Forms" ?
Möglicherweise über den klassischen Weg :
Code: Alles auswählen
DataBaseContext = createUNOService("com.sun.star.sdb.DatabaseContext")
forms = DatabaseContext.getByName("Dateiname").DatabaseDocument.getFormDokuments()
Code: Alles auswählen
oMyForm = forms.getByName("Mein_Formular_Name")
' und das dazugehörige Dokument:
oMyFormDoc = oMyForm.getComponent()
Code: Alles auswählen
oMyFormDoc.currentController.frame.activate()

Na ja, so oder so ähnlich wird es funktionieren.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Es bleibt schwierig
Hallo Thomas,
insgesamt hatte ich mir das so vorgestellt, wie Du es in Deiner letzten Antwor geschrieben hast.
Das Dokument
Jetzt die neue Frage:
wie komme ich an die Methoden von oMyFormDoc.
Bei mir sieht es im Moment so aus:
Somit habe ich jetzt zwar ein neues Dokument (vielleicht auch einen Frame) aber...
Wäre schön, wenn Du mir noch einen kleinen Anstoß geben könntes.
Grüße
Christian
insgesamt hatte ich mir das so vorgestellt, wie Du es in Deiner letzten Antwor geschrieben hast.
So ähnlich habe ich das auch gemacht. Du hilfst mir jedenfalls Variablen und Zeilen zu sparen.Code:
DataBaseContext = createUNOService("com.sun.star.sdb.DatabaseContext")
forms = DatabaseContext.getByName("Dateiname").DatabaseDocument.getFormDokuments()
Das Dokument
bekomme ich auch hin.oMyForm = forms.getByName("Mein_Formular_Name")
' und das dazugehörige Dokument:
oMyFormDoc = oMyForm.getComponent()
Jetzt die neue Frage:
wie komme ich an die Methoden von oMyFormDoc.
Bei mir sieht es im Moment so aus:
Code: Alles auswählen
Sub probiere
Dim DatabaseContext as Object
Dim forms as Object
Dim oMyForm as Object
Dim oMyFormDoc as Object
Dim Url as String
Dim Doc as Object
Dim dummy()
DataBaseContext = createUNOService("com.sun.star.sdb.DatabaseContext")
forms = DatabaseContext.getByName("Angebot").DatabaseDocument.getFormDocuments()
oMyForm = forms.getByName("04 Texte")
' und das dazugehörige Dokument:
oMyFormDoc = oMyForm.getComponent()
Url = "private:factory/swriter"
Doc = StarDesktop.LoadComponentFromURL(Url,"myframe",0,dummy())
Doc.getCurrentController()
oMyFormDoc.currentController.frame.activate()
End Sub
Wäre schön, wenn Du mir noch einen kleinen Anstoß geben könntes.
Grüße
Christian
Viele Wege führen zum Ziel, aber alle nach Rom.