[gelöst] grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

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

Moderator: Moderatoren

StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

[gelöst] grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von StePfl »

Hallo zusammen,

ich habe im Bereich "Meine Makros" (also nicht im Bereich eines Worksheet-Objekts) mehrere Module (z.B. "SteStdUtils/Baisc") mit allgemein verwendbaren Makros angelegt (functions oder auch Sub's) - wie z.B. "SucheLetzteSpalte()" oder "revInstr()" oder .

Leider werden diese Makros von anderen Makros, die im Bereich eines Worksheet-Objekts stehen, NICHT gefunden.
Kann mir jemand sagen, wie ich diese Makros exakt ansprechen muß.

Versucht hatte ich schon mit z.B. "SteStdUtils.Basic.RevInstr(xxx, yyy, zzz)" , hat aber leider nicht funktioniert. Ich bekomme immer wieder die Meldung, dass die Sub /Function nicht definiert sei...(den genauen Text hab ich mir nicht gemerkt). UND - die genaue Schreibweise des Makros habe ich geprüft.
Wenn ich dann manuell in dieses Makro gehe und es ausführe, dann wird es anschließend auch von den anderen Makros gefunden -
bis ?!?! (irgendwann nicht mehr).

Kann mir jemand hier weiterhelfen?

herzlichen Dank, stepfl
Zuletzt geändert von StePfl am Sa, 17.06.2017 08:53, insgesamt 1-mal geändert.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von komma4 »

Makros (und benutzerdefinierte Funktionen) werden automatisch geladen, wenn sie in der Bibliothek Standard gespeichert wurden. Und zwar nur dann!

Das kann eine globale Bibliothek (in "Meine Makros"), oder die des Dokuments sein.


Edit: Name Gültigkeitsbereich aktualisiert
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)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von Stephan »

Wenn ich dann manuell in dieses Makro gehe und es ausführe, dann wird es anschließend auch von den anderen Makros gefunden
Dann ist das Problem zu 99% geklärt.

zentrale Makro-Bibliotheken müssen im Allgemeinen erst geladen werden, wobei das Programm einmal (quasi händisch) ausgeführte Makros als Laden der entsprechenden Bibliothek zu aktzeptieren (eigentlich sollte es sogar so gehen das Du beim Aufruf eines Makros per Code zuerst eine Fehlermeldung bekommst, danach der nochmalige Aufruf per Code funktioniert)

Lösung ist die Biblitheken zu laden. Schreibe also in das Makro, mit dem Du dier anderen Makros starten wilklst, das Laden der Bibliothek an den Anfang, z.B.:

Code: Alles auswählen

GlobalScope.BasicLibraries.LoadLibrary("SteStdUtils")
GlobalScope.DialogLibraries.LoadLibrary("SteStdUtils")

Gruß
Stephan
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von komma4 »

Das Laden (einer benutzerdefinierten Funktion in einem custom Modul) mit diesem Befehl hatte ich probiert, Stephan.

Per Code, an die Ereignisse "Dokument öffnen" und "Laden des Dokuments beendet" geknüpft.
Hatte - entgegen meinen Erwartungen- leider nicht funktioniert. Wahrscheinlich wieder das falsche Ereignis erwischt :-#
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)
StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von StePfl »

vielen Dank "komma4" und "Stephan",

noch eine ergänzende Frage:
kann man auch unterscheiden, ob die Function (mit dem selben Namen) aus der "Bibliothek_1" oder "Bibliothek_2" gemeint ist.
Hintergrund: es kommen mehrere Generationen der selben Aufgabe zum Einsatz, bei denen es vorkommen kann, dass der selbe FunctionName mit geringfügig unterschiedlichen Funktionalitäten auftauchen kann. Ich will mir die Arbeit sparen, nun in allen Versionen die Makronamen zu editieren (und damit Fehler in den schon vorhandenen Abläufen zu generieren)

ich denke an irgendetwas wie "Bibliothek_1.LocCtrlDown()" oder "Bibliothek_2".LocCtrlDown()"

Vielen Dank -- auch für die vielen Hilfestellungen, die ich als passiver Leser nutzen konnte!

stepfl


PS: Komm4: was meinst du bitte mit "Edit: Name Gültigkeitsbereich aktualisiert"?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von komma4 »

komma4 hat geschrieben: Mo, 22.05.2017 15:31Das kann eine globale Bibliothek (in "Meine Makros")
Das meinte ich: beim ersten Speichern stand nur "Meine M"
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)
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von Stephan »

Das Laden (einer benutzerdefinierten Funktion in einem custom Modul) mit diesem Befehl hatte ich probiert, Stephan.
benutzerdefinierte Funktionen (also Basic-Functions die in Calc-Tabellenzellen aufgerufen werden) machen hier auch eine Ausnahme, denn sie müssen zur einwandfreien Funktion in Bibliothek Standard liegen, ich sehe nur nicht das davon hier im Thread diue REde war.
Normale Funktionen (die rein technisch sich um nichts unterscheiden, die aber von Makros und nicht aus Tabellenzellen heraus aufgerufen werden) müssen nicht in der Bibliothek "Standard" liegen.
Per Code, an die Ereignisse "Dokument öffnen" und "Laden des Dokuments beendet" geknüpft.
Hatte - entgegen meinen Erwartungen- leider nicht funktioniert.
Dafür kann es verschiedene Gründe geben, z.B. gibt es Szenarien wo ThisComponent.URL nicht funktioniert, hingegen ThisComponent.Location. Dazu kann ich keine allgemeinen Aussagen machen, außer das man wohl den EReignisse eher nur Makros (Sub) und nicht Funktionen (Function) zuordnen sollte.


GRuß
Stephan
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von Stephan »

ich denke an irgendetwas wie "Bibliothek_1.LocCtrlDown()" oder "Bibliothek_2".LocCtrlDown()"
ohne Anführungsstriche, also so:

Code: Alles auswählen

Bibliothek_1.LocCtrlDown()
Bibliothek_2.LocCtrlDown()
die Klammern am Ende sind auch entbehrlich (solange darin keine Parameter übergeben werden müssen), ich finde es aber sinnvoll sie hinzuschreiben, denn dadurch sieht man gleich das es sich um einen Makroaufruf handelt.

(Es geht im Grunde auch mit zusätzlich Call, aber ich benutze das nie weil ich nicht sehe das es einen tatsächlichen Unterschied macht, wie es das z.B. unter VBA/VB tut. Aber in letzterer Aussage lasse ich mich gerne korrigieren.)




Gruß
Stephan
StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von StePfl »

Vielen, vielen Dank ... IHR SEID EINFACH KLASSE!!!!!



Wenn ich euch euch richtig verstanden habe geht es also so:

Code: Alles auswählen

sub Biermoeslblasn()
	GlobalScope.BasicLibraries.LoadLibrary("Song_1")
	GlobalScope.DialogLibraries.LoadLibrary("Song_1")

	GlobalScope.BasicLibraries.LoadLibrary("Song_2")
	GlobalScope.DialogLibraries.LoadLibrary("Song_2")

	Sepp = Song_1.Takt5()      
	Sepp2 = Song_2.Takt5()
	
end sub

... ich werde es versuchen - mal sehen, was "Takt5()" jeweils zurückliefert ;-)

StePfl
StePfl
**
Beiträge: 47
Registriert: Mo, 04.07.2016 17:16

Re: grundsätzlich Frage zu: Makro im Bereich "Meine Makros" aufrufen?

Beitrag von StePfl »

... und doch noch eine Nachfrage:

kann ich die Bibliothek auch global (für das ganze Modul geltend) einbinden?
Ich denke an ein ähliches Vorgehen wie bei der Definition von globalen Variablen...
sprich im Modul ganz oben.

Danke und herzlichen Gruß,
Stepfl
Antworten