🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Laufzeitfehler Formular öffnen : Message: .

Alles zur Programmierung im LibreOffice.
Musiker
Beiträge: 12
Registriert: Do 30. Apr 2015, 13:14

Laufzeitfehler Formular öffnen : Message: .

Beitrag von Musiker » Di 2. Jun 2015, 10:07

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

mikele
* LO-Experte *
Beiträge: 1932
Registriert: Mo 1. Aug 2011, 20:51

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von mikele » Di 2. Jun 2015, 11:33

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.
Gruß,
mikele

Musiker
Beiträge: 12
Registriert: Do 30. Apr 2015, 13:14

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von Musiker » Di 2. Jun 2015, 13:21

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

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von komma4 » Di 2. Jun 2015, 14:18

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!]
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

Musiker
Beiträge: 12
Registriert: Do 30. Apr 2015, 13:14

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von Musiker » Di 2. Jun 2015, 15:50

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

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von komma4 » Di 2. Jun 2015, 17:29

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 )
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

Musiker
Beiträge: 12
Registriert: Do 30. Apr 2015, 13:14

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von Musiker » Mi 3. Jun 2015, 10:04

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

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von komma4 » Mi 3. Jun 2015, 15:27

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!
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)

Musiker
Beiträge: 12
Registriert: Do 30. Apr 2015, 13:14

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von Musiker » Mi 3. Jun 2015, 18:26

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ß

komma4
Beiträge: 185
Registriert: Sa 13. Aug 2011, 10:01
Wohnort: Chonburi Thailand Asia
Kontaktdaten:

Re: Laufzeitfehler Formular öffnen : Message: .

Beitrag von komma4 » Mi 3. Jun 2015, 20:52

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 :|
Cheers
Winfried
aktuell: openSuse 13.1 mit LO 4.3.7.2
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als Extension)


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.



Antworten