Werden als "Global" deklarierte Variablen nicht in allen Bibliotheken erkannt?

Im Bibliotheks-Container Meine Makros & Dialoge habe ich die Bibliothek Library1 erstellt. Darin ein Modul Modul1 und darin das Makro Test1. Dieses Makro besteht aus den drei Zeilen:

Sub Test1
	MsgBox BLAU
End Sub

Im Bibliotheks-Container des Dokuments myQuestion.ods gibt es die Bibliothek Standard. Darin habe ich das Modul Init erzeugt und darin das Makro onOpen. Dieses wird beim Öffnen des Dokuments automatisch aufgerufen. Das vollständige Modul Init sieht so aus:

Option Explicit
Global Const BLAU = &h000080
Sub onOpen
	GlobalScope.BasicLibraries.loadLibrary("Standard")
	GlobalScope.BasicLibraries.loadLibrary("Library1")
End Sub

Der Aufruf von Test1 ergibt die Fehlermeldung:

LibreOffice 5.0.6.3
Basic-Laufzeitfehler.
Variable nicht definiert.

Meine Frage: Wie kann man eine Variable (oder wie hier eine Konstante), die in einer Dokument-Bibliothek deklariert ist für eine Anwendungs-Bibliothek sichtbar machen, die unter Meine Makros & Dialoge steht?

Ich weiß nicht, ob ich eine falsche Methode anwende oder ob das ein Bug ist oder ob es nicht vorgesehen ist, Variablen Bibliotheks-Container-weit sichtbar zu machen.

Hallo,

erbitte Überprüfung meiner Aussagen, bin mir nicht zu 100% sicher.

Fall1:
Soweit ich weiß wirkt die Global-Anweisung nur innerhalb einer Bibliothek.

Fall2:
Wenn Du die Global-Anweisung innerhalb der Standard-Bibliothek verwendest,
dann wirkt Global, sobald LO nach der Makro-Erstellung neugestartet hast überall.

oder so:

Sub Test1
	GlobalScope.BasicLibraries.loadLibrary("Library1")
    	MsgBox BLAU
End Sub

Damit tritt der erste Fall ein, Global wirkt innerhalb einer Bibliothek,
wird aber von ausserhalb explizit geladen.

Gruß

Craig

Vielen Dank, Craig, für Deine Antwort. Ich habe auf Deine Erklärung zum Fall1 genauer untersucht, ob die Global-Anweisung wirklich nur innerhalb einer Bibliothek gilt, denn ich erinnerte mich, dass ich schon Fälle hatte, wo globale Variablen in mehreren Bibliotheken sichtbar waren.

Ich erzeugte auf Datei-Ebene eine weitere Bibliothek Extensions, darin das Modul2 mit dem Makro Test2,

Sub Test2
	msgbox BLAU
End Sub

Die Sub onOpen wurde um eine Zeile erweitert, um die zusätzliche Bibliothek zu laden.

BasicLibraries.loadLibrary("Extensions")

Der Aufruf von Test2 ergab keinen Fehler.


Nun hatte ich den Verdacht, dass die drei Bibliotheks-Container, die standardmäßig vorgegeben sind, unterschiedlich in ihrem Verhalten sind. Dies ergäbe auch einen Sinn, der mir bisher nicht klar war.

  1. Der allgemeinste Container ist
    LibreOffice Makros & Dialoge. Er ist Bestandteil der Installation und
    steht jedem Benutzer zur Verfügung.

  2. In der Hierarchie der zweithöchste
    Container ist Meine Makros &
    Dialoge
    . Er steht nur mir, dem
    aktuellen Benutzer, zur Verfügung,
    und zwar in all meinen
    LibreOffice-Dokumenten, also anwendungsweit.

  3. Der dritte Container ist
    myQuestions.ods. Er steht nur dem gleichnamigen und geöffneten
    Dokument zur Verfügung.

Ich verstehe nun, dass es wenig Sinn hat, eine Variable in einer Bibliothek eines Dokument-Containers als Global zu erklären, damit sie von einer anwendungsweiten Routine erkannt wird. Denn ein anderes Dokument, welches diese Variable nicht oder nicht als Global definiert, könnte mit dieser anwendungsweiten Routine nichts anfangen.
Die umgekehrte Richtung ergibt aber einen Sinn. Eine Variable, die in einer Bibliothek des Containers Meine Makros & Dialoge als Global deklariert ist, sollte allen dokumenteigenen Bibliotheken zugänglich sein. Dies habe ich dann auch noch getestet, und siehe da, es funktioniert.

Fazit: Von oben nach unten sind die Container durchlässig, aber nicht umgekehrt.

Vielen Dank für Dein Bemühen. Es hat mich angeregt, um weiter nachzudenken und schließlich die Logik der drei Container zu verstehen.
Gruß, fri03