Variablen wie gültig bis calc-Dokument geschlossen wird

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

Moderator: Moderatoren

Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Variablen wie gültig bis calc-Dokument geschlossen wird

Beitrag von Postbyme »

Hallo,
habe ein Calc-Formular mit mehren Buttons denen jeweils eine Funktion (Makro) zugeordnet ist. Habe jetzt das Problem wenn Button 1 (Funktion 1 ) jetzt eine globale Variable versorgt, dann ist dieser Wert nicht mehr vorhanden wenn ich per Botton 2 (Funktion 2) darauf zugreifen möchte.
Bei "end function" von Funktion 1 wird die globale Variable gelöscht - bedeutet dieses das ich mir solche Sachen über eine Tabellenzelle merken muss?

Danke
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
F3K Total
********
Beiträge: 3704
Registriert: Mo, 28.02.2011 17:49

Re: Variablen wie gültig bis calc-Dokument geschlossen wird

Beitrag von F3K Total »

Moin,
ich verstehe das Problem nicht, anbei ein Beispiel, setze die Variable mit Schaltfläche 1, und lies sie wieder ein, sooft du möchtest, mit Schaltfläche 2.
Funktioniert, solange Basic nicht zwischendrin abstürzt. Sicherer Ist also die Variante mit Zwischenspeicherung irgendwo im Dokument.

Gruß R
Dateianhänge
Globale_Variable.ods
(10.39 KiB) 143-mal heruntergeladen
Zuletzt geändert von F3K Total am So, 26.01.2020 17:57, insgesamt 1-mal geändert.
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Variablen wie gültig bis calc-Dokument geschlossen wird

Beitrag von Postbyme »

Hallo und danke für die Datei. Hat mir dann geholfen meinen Fehler zu finden. Der Variablenbeobachter in der IDE zeigt nach "end Sub" einen leeren Variableninhalt an obwohl der Inhalt noch besteht. Das hat mich verunsichert. Programmiere schon lange hier aber das ist mir erst heute aufgefallen.

Danke!
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Variablen wie gültig bis calc-Dokument geschlossen wird

Beitrag von Postbyme »

Fehler war letztendlich die Variablendeklaration mit "global". Hatte gedacht, dass alle Variablen die vor dem ersten Makro definiert werden automatisch global sind. Diese Variablen sind jedoch global definiert aber speichern keine Daten funktionsübergreifend. Sehe ich das richtig oder stehe ich jetzt ganz auf der Leitung :roll: :shock:

Winni
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Variablen wie gültig bis calc-Dokument geschlossen wird

Beitrag von mikeleb »

Hallo,
entscheidend ist, mit welchem Schlüsselwort sie deklariert werden.
Zitat Hilfe:
Dim deklariert lokale Variablen in Subroutinen. Globale Variablen werden mit den Anweisungen PUBLIC oder PRIVATE deklariert.
und dann gibt es noch Global
Dimensioniert eine Variable oder ein Array auf globaler Ebene (also nicht innerhalb eine Subroutine oder Funktion), sodass die Variable oder das Array in allen Bibliotheken und Modulen für die Dauer der aktuellen Sitzung gültig ist.
Korrektur: Wird eine Variable per Dim außerhalb einer Sub oder Function deklariert, so gilt sie innerhalb des gesamten Moduls. Sie behält ihren Wert allerdings nur so lange, wie das Makro läuft.
Zum Testen:

Code: Alles auswählen

Dim a as integer

Sub Main
	a=25
	msgbox a
	neu
End Sub

sub neu
	a=a+25
	msgbox a	
end sub
Rufe zunächst "Main" auf und danach (einzeln) "neu". Probier dann mal die Deklaration per Public bzw. Global.
Gruß,
mikeleb
Postbyme
***
Beiträge: 90
Registriert: Mo, 27.11.2017 18:42

Re: Variablen wie gültig bis calc-Dokument geschlossen wird

Beitrag von Postbyme »

Hoppla,
bei getrennter Ausführung hat "neu" noch den Wert 25 in a wenn dieses mit "global" definiert wurde. Das war mir so nicht klar. Hatte gedacht das die Angabe "global" nur "nice to have" ist.
-------------------------------------------------------
Windows 11 22H2 /Libre Office 7.3.6.2 (x64)
Antworten