Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Definition und Nutzung von globalen Variablen

Forumthread: Definition und Nutzung von globalen Variablen

Definition und Nutzung von globalen Variablen
07.05.2024 16:27:17
VBA_Neuling_2024
Hallo zusammen,

ich möchte eine Variable beim Öffnen einer Arbeitsmappe global definieren:

Private Sub Workbook_Open()
Public mitglieder(1 To 4, 1 To 2) As Variant
mitglieder(1, 1) = "Vorname1"
mitglieder(1, 2) = "Name1"
mitglieder(2, 1) = "Max"
mitglieder(2, 2) = "Müller"
mitglieder(3, 1) = "Peter"
mitglieder(3, 2) = "Meier"
End Sub

Dabei bekomme ich folgende Fehlermeldung: "Fehler beim Kompilieren: Ungültiges Attribut in Sub oder Function". Diese Fehlermeldung bekomme ich auch, wenn ich das "Private" wegnehme.

Wie kann ich die Mitglieder beim Öffnen der Arbeitsmappe so definieren, dass ich sie dann aus den einzelnen Blättern heraus in privaten Prozeduren nutzen kann?
Vorname_23 = mitglieder(1,1)

Danke und Gruß,
Carl
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Definition und Nutzung von globalen Variablen
07.05.2024 16:37:57
UweD
Hallo

Public mitglieder(1 To 4, 1 To 2) As Variant

muss in ein "Normales Modul" ganz nach oben

In "DieseArbeitsmappe" dann nur noch den Rest
Private Sub Workbook_Open()

mitglieder(1, 1) = "Vorname1"
mitglieder(1, 2) = "Name1"
mitglieder(2, 1) = "Max"
mitglieder(2, 2) = "Müller"
mitglieder(3, 1) = "Peter"
mitglieder(3, 2) = "Meier"
End Sub


LG UweD
Anzeige
AW: Definition und Nutzung von globalen Variablen
07.05.2024 16:42:00
Yal
Hallo Carl,

es gibt verschiedene Arten von Codepane:
_ das Arbeitsmappe hat seine Codepane, da wo dein Workbook_Open steht
_ jede Arbeitsblatt hat ein eigene Codepane
_ es gibt allgemeine Module ("Einfügen", "Module")
_ dann noch Formular, Klassen, usw.

Globale Variablen müssen in einem allgemeinen Module definiert sein.
Wenn eine Variable innerhalb eines Sub deklariert ist, ist sie lokal zu dem Sub, also nicht ausserhalb des Subs erreichbar

Im Module:
Public mitglieder(1 To 4, 1 To 2) As Variant

Im Arbeitsmappe-Codepane:
Private Sub Workbook_Open()

mitglieder(1, 1) = "Vorname1"
mitglieder(1, 2) = "Name1"
mitglieder(2, 1) = "Max"
mitglieder(2, 2) = "Müller"
mitglieder(3, 1) = "Peter"
mitglieder(3, 2) = "Meier"
End Sub


VG
Yal
Anzeige
AW: Definition und Nutzung von globalen Variablen
07.05.2024 22:14:55
VBA_Neuling_2024
Hallo Uwe, hallo Yal,

danke für eure schnellen Rückmeldungen. Die Definition und der jeweils erste Aufruf aus einem Privat_Sub aus Tabelle1 oder Tabelle2 funktioniert jeweils. Wenn ich dann aus dem anderen Tabellenblatt aufrufe ist der Wert jedoch leer:

Tabelle1:
Private Sub CommandButton1_Click()

a=mitglieder(3,1)
cells(1,1)=a
End Sub


--> a= "Peter". wie erwartet.

Tabelle2:
Private Sub CommandButton2_Click()

a=mitglieder(3,1)
cells(1,1)=a
End Sub


--> a = "leer". Getestet habe ich mit Breakpoint vor der nächsten Anweisung. Warum wird wird hier nicht auch "Peter" ausgegeben?

Wenn ich nach Öffnen der Datei zuerst den Button in Tabelle2 anklicke ist das Verhalten genau anders herum. Werden die Werte ggf. durch Abbruch des Debuggings gelöscht? Kann jemand dieses Phänomen erklären?

Danke und Gruß,
Carl
Anzeige
AW: Definition und Nutzung von globalen Variablen
08.05.2024 10:15:55
Daniel
Hi
Da müsste man sich schon genauer anschauen, was du hast.
Könntest du die Datei hochladen?
Gruß Daniel
AW: Definition und Nutzung von globalen Variablen
12.05.2024 13:55:14
VBA_Neuling_2024
Hallo Daniel,

ich habe eine vereinfacht Beispieldatei erzeugt:

https://www.herber.de/bbs/user/169400.xlsm

Das Phänomen kann am besten folgendermaßen hervorgerufen werden:
1. i.O.-Fall
  • Öffnen der Datei
  • Klicken auf den Button in Tabelle1 --> "Max" wird in A1 eingetragen. --> Funktioniert.
  • Klicken auf den Button in Tabelle2 --> "Max" wird in A1, "Peter" wird in A4 eingetragen. --> Funktioniert, offensichtlich haben beide Subs aus den Tabellenblättern zugriff auf die Public Variable "mitglieder".

    2. n.i.O-Fall
  • Setzen eines Breakpoints in Zeile 3 im Code von Tabelle1
  • Klicken auf den Button in Tabelle1
  • Abbrechen des Debug-Modus durch Stop-Taste --> nach dieser Aktion - so vermute ich - werden die globalen Variablen geleert (die vorher in WorkbookOpen beschrieben wurden)
  • Klicken auf den Button in Tabelle
  • mit der Maus über Variable "a" gehen: "leer" --> eingentlich müsste hier "Max" angezeigt werden. Die Variable "mitglieder" ist aber - vermutlich durch Abbruch des Debug-Modus - geleert worden.

    Wie kann ich dieses Verhalten verändern, sodass ich mit dem Debug-Modus arbeiten kann und trotzdem die Variable "mitglieder" nutzen kann? Als Workaround schließe und öffne ich die Datei aktuell nach dem Debugging immer. Das ist natürlich nicht sehr effizient.

    Danke und Gruß,
    Carl

  • Anzeige
    AW: Definition und Nutzung von globalen Variablen
    13.05.2024 12:25:14
    daniel
    Hi
    wenn ich mit der Maus über die Stop-Taste fahre, erscheint da bei mir der Hilfetext: "Zurücksetzen"
    dh. damit werden auch die ganzen globalen Variablen geleert (kann ja sein, dass die für den Fehler verantwortlich sind)

    was kannst du tun?
    es gibt mehrere Varianten..
    a) einfach die Stopp-Taste nicht mehr drücken. Wenn das Makro nicht mehr weiter laufen soll, verschiebe den gelben Pfeil zum End Sub und lass das Marko dann weiterlaufen
    b) schreibe das befüllen der Variablen in ein eigenes Makro in einem allgemeinen Modul. Dann kannst du es auch mal zwischen drin aufrufen, um die Variable zu befüllen oder zu beginn jedes Eventmakros (kannst ja ne Abfrage voranstellen, ob es Daten enthält oder nicht)
    c) wenn die Inhalte der Variablen nicht weiter verändert werden (es also quasi eine Konstante ist), dann kannst du auch eine Funktion "Mitglieder" erstellen und diese verwenden. Die hat dann immer ihren Inhalt

    Function Mitglieder() As Variant
    
    Dim x(1 To 4, 1 To 2)
    x(1, 1) = "Vorname1"
    x(1, 2) = "Name1"
    x(2, 1) = "Max"
    x(2, 2) = "Müller"
    x(3, 1) = "Peter"
    x(3, 2) = "Meier"
    Mitglieder = x
    End Function


    Gruß Daniel
    Anzeige
    AW: Definition und Nutzung von globalen Variablen
    14.05.2024 11:34:21
    VBA_Neuling_2024
    Hallo Daniel,

    vielen Dank für die Rückmeldung. Die Lösung mit der Funktion, die aufgerufen wird, falls die Variable leer ist, erscheint mir die beste Lösung. So werde ich es machen.

    Nochmals danke und Gruß,
    Carl
    ;

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige