Dialoge aufrufen aus Dateien

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Uli_Neu
*
Beiträge: 12
Registriert: Mi, 13.08.2008 16:50

Dialoge aufrufen aus Dateien

Beitrag von Uli_Neu »

Liebe Forum-Gemeinde!

Ich habe bisher in VBA programmiert und möchte eine Excel Anwendung
in OpenOffice 2.4.1 (*.ods) umschreiben.

Die Datei "KUH2008.ods" hat neben der standard.Bibliothek noch eine
weitere Bibliothek erhalten, die mit "MakrosUH" benannt wurde.
Die Bibliothek "MakrosKUH" enthält mehrere Module, Makros und
Dialoge und soll später kennwortgeschützt werden.
Ich möchte nun einen Dialog "NutzgBed_dlg" aus dieser Bibliothek (beim
Öffnen der Datei als Startmakro) aufrufen und habe damit meine Probleme.

Nachfolgender Code, den ich aus der Hilfe kopiert und der auch hier im
Forum dargestellt wurde, funktioniert für den Aufruf des Dialogs
Nutzungsbedingungen aus der allg. Standard-Bibliothek. Die erste
Zeile 'BasicLibraries.LoadLibrary("tools") habe ich sogar deaktivieren
müssen, weil sie eine Fehlermeldung verursacht.

Aber wie gesagt - ich möchte ja aus der Datei KUH2008.ods Dialoge
aufrufen, die ich später vor Einsicht und Veränderung schützen und
mit der Datei übergeben kann. ....

Code: Alles auswählen

option explicit
Dim oDialog1 AS Object
sub NutzgBedZeigenMitProblemen
Dim oDialog1 AS Object
'BasicLibraries.LoadLibrary("tools")
oDialog1 = LoadDialog("Standard", "Nutzungsbedingungen")
'oDialog1 = LoadDialog("Standard", "NutzgBed_dlg")
'oDialog1 = LoadDialog("MakrosUH", "NutzgBed_dlg")
oDialog1.Execute()  

Die beiden deaktivierten Aufrufe oDialog1 verursachen die
Fehlermeldung: Basic Laufzeitfehler Es ist eine Exception aufgetreten
Typ: com.star.sun.container,NoSuchElementExeption Message.

Den im Forum und in der Hilfe alternativ dargestellten Code:

Code: Alles auswählen

'aus dem Forum
dim odlg as object
sub DialogAufrufen
	DialogLibraries.loadlibrary("Standard")  'falls deine Bibliothek Standard heisst (wahrscheinlich)
    oDlg = createUnoDialog(DialogLibraries.Standard.Nutzungsbedingungen)   'falls dein Dialogmodul "Dialog1" heisst - wahrscheinlich
    oDlg.execute()
end sub
funktioniert ebenfalls nicht. Es erscheint zu der Zeile
oDlG = createuUnoDialog ....
die Fehlermeldung:
Basic-Laufzeitfehler - Eigenschaft oder Methode nicht gefunden

Gar nicht so einfach. Danke für Eure Hilfe.

Grüße
Uli_Neu
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dialoge aufrufen aus Dateien

Beitrag von komma4 »

Gar nicht so einfach zu erklären:


Die TOOLS-Bibliothek befindet sich im OOo Container, zum Laden deshalb die Anweisung:

Code: Alles auswählen

Globalscope.BasicLibraries.LoadLibrary("Tools")
nutzen. Lässt Du das GLOBALSCOPE weg, dann wird der Container des aktuellen Dokuments genommen ... und da fehlt TOOLS



Wenn Du Dir nun die Funktion LoadDialog(Libname as String, DialogName as String, Optional oLibContainer) anschaust, siehst Du, dass hier drei Parameter möglich sind. Der dritte ist der Container (in dem sich die Dialoge befinden).
Lässt Du den weg, dann wird der Standardcontainer von OOo genommen - und Dein Dialog nicht gefunden.

Also, sollte es mit:

Code: Alles auswählen

oDialogLib = ThisComponent.DialogLibraries
oDialog = LoadDialog( "Standard", "Nutzungsbedingungen" , oDialogLib)
klappen. Ist dem so?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Uli_Neu
*
Beiträge: 12
Registriert: Mi, 13.08.2008 16:50

Re: Dialoge aufrufen aus Dateien

Beitrag von Uli_Neu »

Hallo Wilfried und liebe Forum-Gemeinde!

Der folgende Versuch funktioniert:

Code: Alles auswählen

'Neuer Versuch 16.08.2008
sub NutzgBedZeigen
Dim oDialog1, oDialogLib  AS Object
Globalscope.BasicLibraries.LoadLibrary("Tools")
oDialogLib = ThisComponent.DialogLibraries
oDialog1 = LoadDialog( "MakrosUH", "NutzgBed_dlg" , oDialogLib)
oDialog1.Execute()
end sub
Wenn ich das richtig verstanden habe, kann man die folgende
Zelle weglassen, ohne dass sich das auf die Funktionsfähigkeit
auswirkt, oder? Bei mir funktioniert´s jedenfalls.

Code: Alles auswählen

'Globalscope.BasicLibraries.LoadLibrary("Tools")
Besten Dank und Viele Grüße
Uli_Neu
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Dialoge aufrufen aus Dateien

Beitrag von komma4 »

Die Anweisung kannst Du nur weglassen, wenn die TOOLS Bibliothek während der OOo-Sitzung bereits einmal geladen war.
Nach einem ersten Versuch kannst Du die Zeile zwar löschen, aber ...

Schliesse OOo und den Schnellstarter, starte OOo neu und lasse das Makro laufen: Fehlermeldung bei LoadDialog()!

Nicht-geladene Bibliotheken sind an einem weissen Ordnersymbol, geladene am gelbem Symbol im Basic-Container (Extras>Makros>Makros ausführen...) unter Windows erkennbar.

Alles klar?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Antworten