🙏 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. 🤗

Gelöst: Calc Makro und Library mit globalen Variablen

Alles zur Programmierung im LibreOffice.
Antworten
spanier
Beiträge: 10
Registriert: Mi 12. Jun 2013, 14:39

Gelöst: Calc Makro und Library mit globalen Variablen

Beitrag von spanier » Do 13. Jun 2013, 11:58

Hallo liebe Forumsteilnehmer,

ich habe eine größere Excel-VBA-Makrosammlung nach Calc-Basic portiert. Die Makros unter Calc-Basic laufen soweit. Jetzt möchte ich die Makros besser organisieren. Dazu habe ich eine Bibliothek geschaffen. Darin habe ich Variablen (global und public), selbstdefinierte Datentypen und häufig gebrauchte Routinen untergebracht. Gespeichert ist sie unter Meine Makros & Dialoge -> Common. Common ist also der Name meiner Bibliothek.

Mir ist folgendes dabei aufgefallen: Die Bibliothek lade ich zur Laufzeit durch GlobalScope.BasicLibraries.loadLibrary("Common"). Jetzt kann ich auf die Variablen, Datentypen und Routinen aus der Bibliothek zugreifen. Bei den global definierten Variablen klappt dass jedoch nicht immer. In manchen Fällen ist bei einem Zugriff auf eine global definierte Variable diese leer, obwohl sie vorher durch eine andere Sub des gleichen Moduls gesetzt wurde.

Beispiel:

Ich benötige den numerischen Wert einer Spalte und ermittle den wie folgt:

Code: Alles auswählen

  myCellAddress = myCell.getCellAddress()
  myColumn = myCellAddress.Column
  BlockStatCol = myColumn
BlockStatCol enthält dann z.B. den Wert 22.

Dabei ist "BlockStatCol" eine global definierte Variable in meiner Bibliothek.

In einer Subroutine aus der Bibliothek möchte ich auf diese Varable zugreifen:

Code: Alles auswählen

BLSpalte = BlockStatCol - mySheet.getCellRangebyName("BlockLaengeRot").Value
Hier hat BlockStatCol den Wert -1 und folglich gib es einen Laufzeitfehler.

Hat jemand dazu ein Idee, die mir weiterhelfen kann?

Gruß Spanier
Zuletzt geändert von spanier am Fr 14. Jun 2013, 14:44, insgesamt 1-mal geändert.

spanier
Beiträge: 10
Registriert: Mi 12. Jun 2013, 14:39

Re: Calc Makro und Library mit globalen Variablen

Beitrag von spanier » Do 13. Jun 2013, 18:07

Hallo,

ich habe gerade mit Erschrecken festgestellt, dass nach einem Upgrade von LO 4.0.2 auf LO auf die 4.0.3.3 keines meiner Makros mehr läuft. Alle haben Probleme mit globalen Variablen.

Ich hatte eigentlich gehofft, ohne Excel auszukommen. Es hat ja auch bis zum Upgrade geklappt.

Ich bis sowas von begeistert :oops: .

Gruß

Spanier

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2539
Registriert: Fr 10. Dez 2010, 10:01

Re: Calc Makro und Library mit globalen Variablen

Beitrag von karolus » Do 13. Jun 2013, 19:39

Hallo

Dann programmiere halt vernünftig und übergib Variablen als Funktionsargument, oder ( falls sie tatsächlich erst später in anderen Routinen gebraucht werden ) speichere sie in irgendeiner Form, und nimm dazu eine richtige Programmiersprache statt einem Relikt aus der Computersteinzeit namens "Basic".

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

spanier
Beiträge: 10
Registriert: Mi 12. Jun 2013, 14:39

Re: Calc Makro und Library mit globalen Variablen

Beitrag von spanier » Fr 14. Jun 2013, 14:33

@karolus

Sehr hilfreich Deine Argumentation.

Gruß Spanier

spanier
Beiträge: 10
Registriert: Mi 12. Jun 2013, 14:39

Gelöst: Calc Makro und Library mit globalen Variablen

Beitrag von spanier » Fr 14. Jun 2013, 14:43

Hallo,

das Problem konnte ich lösen.

Verschiedene Verarbeitsschritte in meiner Makro-Anwendung werden durch Ereignisse von Buttons ausgelöst. Hier kommt es laut OpenOffice Wiki zu folgendem Effekt:
...module variables are reset after each macro completion.
Zu finden hier: http://wiki.openoffice.org/wiki/Documen ... _Variables

Das trifft auch für global oder public definierte Variablen zu.

Ich habe folgendes gemacht:
Die entsprechenden Variablen als Benutzerdefinierte Datentypen angelegt, bei meiner Intialialisierung der Anwendung mit createObject meine Variablen erzeugt, dann kann man darauf zugreifen, ohne das die Variablen jedesmal neu initialisiert werden.

Gruß Spanier


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