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? :cry:

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

Code: Alles auswählen

msgbox Trim(aForm(0)) 
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 :lol: )
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:

Code: Alles auswählen

   msgbox( oForms.getByIndex(i).Name )

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

Code: Alles auswählen

oForms = ThisComponent.FormDocuments
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.
:cry: 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. :oops: 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 :|