Seite 1 von 2
Laufzeitfehler Formular öffnen : Message: .
Verfasst: Di 2. Jun 2015, 10:07
von Musiker
Anfängerfrage:
Habe mein erstes Makro geschrieben - nein kopiert, aus dem Handbuch:
Code: Alles auswählen
SUB Zu_Formular_von_Formular(oEvent AS OBJECT)
DIM stTag AS String
stTag = oEvent.Source.Model.Tag
aForm() = Split(stTag, ",")
ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(0)) ).open
ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(1)) ).close
END SUB
Das Array aForm() wird richtig befüllt und alles sieht gut aus. Bis - ja bis die Zeile
'ThisDatabaseDocument.FormDocuments.getByName( Trim(aForm(0)) ).open'
aufgerufen wird. Es kommt die Fehlermeldung:
"BASIC-Laufzeitfehler. Es ist eine Ausnahme aufgetreten
Type: com.sun.star.container.NoSuchElementException Message: ."
Message: . ? Was will mir BASIC damit sagen?
Muss ich eine Bibliothek einbinden? Ist bei der Java-Laufzeitumgebung was einzustellen?
Hilfe! Wer weiß was?
Musiker
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Di 2. Jun 2015, 11:33
von mikele
Hallo,
Basic teilt dir mit, dass es in der Liste der FormDocuments das Element mit dem angegebenen Namen (was die Funktion Trim(aForm(0) liefert) nicht existiert.
Lass dir vielleicht in der Zeile vorher per
vielleicht mal anzeigen, wie das Element heißt.
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Di 2. Jun 2015, 13:21
von Musiker
Hallo mikele, danke für die schnelle Antwort.
Die Anzeige von 'msgbox Trim(aForm(0))' liefert 'KunNotiz'
Genau wie ich es in der Schaltfläche im Feld Zusatzinformationen angegeben habe.
'KunNotiz' ist der Name des Formulars, das geöffnet werden soll.
Das Formular in der Liste "Formulare" hat den Namen 'KunNotiz' und auch im Formular
unter Formulareigenschaften ist Name = KunNotiz eingetragen.
Rechner neu gestartet - Die Fehlermeldung ist jetzt:
"BASIC-Laufzeitfehler. Objektvariable nicht belegt."
Kommt mit der gleichen Zeile.
Aber irgendwas fehlt wohl...
Musiker
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Di 2. Jun 2015, 14:18
von komma4
Das Makro läuft auch von einer ODB aus?
Die Fehlermeldung kann auch heissen, dass es
ThisDatabaseDocument.FormDocuments nicht gibt...
Gibt den folgendes Makro die Namen aus:
Code: Alles auswählen
oForms = ThisDatabaseDocument.FormDocuments
aEN = oForms.ElementNames
FOR i = LBound(aEN) TO UBound(aEN)
msgbox( oForms.getByIndex(i) )
NEXT i
[gerade mal ungetestet - Frau wartet mit Abendessen!]
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Di 2. Jun 2015, 15:50
von Musiker
Hi komma4
[Guten Hunger nach Thailand!]
Hab Dein Makro um die DIM's ergänzt, und der gleiche Fehler:
"BASIC-Laufzeitfehler. Objektvariable nicht belegt. "
mit Aufruf der Zeile 'oForms = ThisDatabaseDocument.FormDocuments'
komma4 hat geschrieben:Die Fehlermeldung kann auch heissen, dass es ThisDatabaseDocument.FormDocuments nicht gibt...
Das Makro (und die Formulare) sind in einer .odb-Datei. Es ist unter
Meine Makros/Standard/Module1 aufgelistet (Makros verwalten).
Muss das wo anders hin?
LG an die Gemeinde
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Di 2. Jun 2015, 17:29
von komma4
Musiker hat geschrieben:[Guten Hunger nach Thailand!]
Danke, hat geschmeckt (wie immer

)
Musiker hat geschrieben:mit Aufruf der Zeile 'oForms = ThisDatabaseDocument.FormDocuments'
komma4 hat geschrieben:Die Fehlermeldung kann auch heissen, dass es ThisDatabaseDocument.FormDocuments nicht gibt...
Und genau das heisst es in dem Fall auch.
Kann Dir leider nicht weiter helfen: unter meinem LO 4.3.7.2 läuft der Code, ohne Fehlermeldungen.
Was Du versuchen kannst: nehme
ThisComponent anstelle
ThisDataBaseComponent
Korrektur:
die Zeile oben muss lauten:
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Mi 3. Jun 2015, 10:04
von Musiker
komma4 hat geschrieben:unter meinem LO 4.3.7.2 läuft der Code

Bei mir läuft LO 4.2.8.2. ist die Version älter? Habe mit Muon-Paketverwaltung alle installierten Pakete auf aktuellem Stand. Fehlt mir vielleicht noch eines?
Hab jetzt
Es kommt jetzt "BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden: FormDocuments."
Wer weiß was?
Wie erwähnt, das ist das erste Makro, das auf meinem Rechner laufen soll.

musiker
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Mi 3. Jun 2015, 15:27
von komma4
4.3.x ist jünger als 4.2.x , sollte damit aber nicht direkt zu tun haben...
Musiker hat geschrieben:Eigenschaft oder Methode nicht gefunden: FormDocuments
Die Eigenschaft ist bei jedem ODB Dokument vorhanden: wie startest Du das Makro?
Die Fehlermeldung deutet darauf hin, dass keine BASE-Datei aktiv ist.
ThisComponent bezieht sich auf das letzte Dokument, das aus der Sicht der Oberfläche aktiv war (also: Klick in eine Komponente der ODB, dann Wechsel in die IDE und F5, oder starten des Makros über das Menu der ODB)
Besorge und installiere Dir MRI - damit lassen sich Objekte leicht untersuchen und sogar Code generieren!
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Mi 3. Jun 2015, 18:26
von Musiker
komma4 hat geschrieben:Besorge und installiere Dir MRI
jo - hab ich jetzt.
http://extensions.services.openoffice.o ... roject/MRI
Installiert und erscheint jetzt im Extension-Manager. MRI hat auch unter MeineMakros eine MRILib mit zwei Makros erzeugt.

wie / was mache ich damit? Werde mich ein bisschen in die Doku einlesen (müssen).
komma4 hat geschrieben:wie startest Du das Makro?
So, wie ich es von MS-Access sinngemäß kenne:
Habe ein Formular, dort habe ich einen Schaltfläche integriert.
Unter Ereignisse der Schaltfläche habe ich bei 'Aktion ausführen': 'Standard.Module1.Form_oeffnen1 (application, Basic)' stehen. 'Form_oeffnen1' ist der Name meiner Sub.
Muss ich ein anderes Ereignis wählen?
Gruß
Re: Laufzeitfehler Formular öffnen : Message: .
Verfasst: Mi 3. Jun 2015, 20:52
von komma4
Du solltest unter
Extras>Add-Ons einen Menupunkt
MRI haben (der startet es mit dem aktuellen Objekt zur Untersuchung), oder
MRI>Selection (der untersucht eine ausgewählte Zelle, markierten Text, etc.)
Du siehst die Eigenschaften und Methoden des Objekts, kannst bspw. eine
.getByName(irgendeinName) aufrufen.
Wenn Du Dich durchklickst wird gleichzeitig ein entsprechender Code (Basic/Python...) aufgezeichnet.
In einem Makro kannst Du
MRI oObject schreiben, um es von der IDE aus aufzurufen (also bspw.
MRI ThisComponent). Setze Dir ein
print "pause" hinter die Zeile, da das Makro sonst weiter läuft.
Die Bibliothek MRILib muss nach dem Start von LO einmal geladen werden: also in der IDE den Code anzeigen lassen, reicht.
Wenn ich Zeit hätte... würde ich das mit dem Button mal nachstellen - momentan keine Zeit
