VBA Globale Variablen und automatisch erstellte Worksheets
#1
Liebes Forum,

zur Zeit programmiere ich in Excel VBA aus Spaß ein kleines Schachprogramm. Zunächst einmal, gibt es eine Alternative zu Public Variablen? Mir ist schon klar, dass man zugeordnete Werte in Klassenobjekten speichern kann, in diesem Fall speichere ich Figur und Figurfarbe in einem Feldobjekt, welche in einem Board(8, 8) Array zusammengefasst sind. Aber diese muss ich ja auch wieder global speichern. Und eine Routine zu schreiben, die aus dem Worksheet immer die derzeitige Position auslesen kann, ist ja irgendwie den Aufwand nicht wert, oder wäre das tatsächlich der bessere Weg? Außerdem kann man ja solche Dinge, wie zum Beispiel welche Farbe dran ist, auch schlecht aus der Position auslesen.
Manchmal lasse ich eine Routine durchlaufen, die eine globale Variable verändert, später ist diese dann aber leer. Kann es sein, dass die gelöscht werden wenn man bestimmte Dinge tut, z.B. Stellen im Code ändert?

Meine andere Frage bezieht sich auf Programmcode, der in einem bestimmten Worksheet stehen muss, um zu funktionieren. Speziell meine ich hiermit Worksheet_SelectionChange(), den ich brauche, um die Benutzerinteraktionen zu erkennen. Allerdings bin ich kein Freund davon, Programmcode außerhalb meiner Module stehen zu haben, da es in diesem Fall zum Beispiel verhindert, dass ich mein Schachbrett auf einem neuen Worksheet "aufbauen" kann. Gibt es eine Möglichkeit, eine Klickerkennungsfunktionalität irgendwie in ein Modul einzubauen, oder beim Erstellen eines neuen Tabellenblattes über eine Subroutine, dieses dann mit einem bestimmten Programmcode auszustatten? Oder lässt sich die Interaktionsfunktionalität irgendwie im Zusammenhang mit Klassenmodulen realisieren?

Ich wäre schon sehr dankbar, wenn mir jemand zu einzelnen Fragen ein paar Richtungen oder Möglichkeiten aufzeigen könnte. Vielen Dank!
Top
#2
Hallöchen,

Variablen kannst Du in Prozeduren, auf Modulebene (Dim ... außerhalb der Sub's) oder global (Public ... außerhalb der Sub's) deklarieren.
Publicvariablen sind dabei in "normalen" Modulen zu deklarieren, wenn sie arbeitsmappenweit z.B. auch in Klassenmodulen und Modulen funktionieren sollen.

Variableninhalte gehen z.B. beim Schließen der Mappe oder Änderung der codes verloren. Will man das umgehen, kann man z.B. Tabellen nutzen oder externe Files oder Registryeinträge erstellen oder ... Man könnte z.B. auf einer Tabelle ein Log der Züge anlegen und dadurch auch ermitteln, wer dran ist.

Ereignismakros müssen in der Regel dort stehen, wo sie wirken sollen. Es reicht aber, im Ereignismakro ein anderes Makro aufzurufen, welches die Aktionen beinhaltet. Dieses Makro kann dann in einem Modul stehen.
Bestimmte Ereignismakros können auch arbeitsmappenweit wirken, wenn sie in DieseArbeitsmappe programmiert werden. Siehe dazu die ähnlichen Möglichkeiten in den Auswahlfeldern oben in den codemodulen und DieseArbeitsmappe. Dadurch hat man ggf. auch gleich Code, der auch in neuen Blättern wirkt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#3
Danke für die Antwort, das mit dem Zuglog ist eine gute Idee, und für die anderen Sachen werde ich wohl nach und nach Lösungen finden.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste