# Globale Variablen nicht überall verfügbar?



## HowlinMad (19. Oktober 2005)

Hallo,

ich hab folgendes Problem:
Ich hab eine globale Variable (Public anzList As Integer) gesetzt und befülle die Variable nach einem Button_Click, in dem er ein Array durchzählt. Das Ergebnis wird auch richtig hineingeschrieben.
Eigentlich sollte jetzt, meiner Programmiererfahrung nach, in allen Funktionen diese Variable mit dem Wert zur Verfügung stehen. Dies ist aber NICHT so und da fehlt mir so ein wenig das Verständnis.

Bin daher für jede Hilfestellung und Erklärung dankbar.


----------



## Shakie (19. Oktober 2005)

Was kommt denn für eine Fehlermeldung?


----------



## HowlinMad (19. Oktober 2005)

Eine verwendbare Fehlermeldung bekomme ich nicht, da er meine Variable auf "0" setzt. 

Eins habe ich vorhin noch vergessen, wenn ich die Werte mit "add Watch" verfolge, habe ich das Phänomen, daß er die Variablen anscheinend getrennt betrachtet und zwar getrennt nach Context (also Funktionen). 

Ich füge also einmal die Variable in der Funktion X im add Watch hinzu und einmal in Funktion Y. Und für beide hat er unterschiedliche Values. Die Variable wird aber nur EINMAL zu Beginn global erzeugt. Ein Überschreiben irgendwo anders scheidet aus. 
Ganz offensichtlich unterscheidet er die Variablen noch nach Funktionen. Irgendwie ziemlich schleierhaft für mich....


----------



## Shakie (19. Oktober 2005)

Hast du vielleicht die implizite Variablendeklaration aktiviert, also dass VB die Variablen für dich deklariert? (Menü Extras-->Optionen-->Editor: Häckchen bei "Variablendeklaration erforderlich" setzen, damit VB keinen Mist machen kann. Zusätzlich musst du noch in jedem Codefenster ein "Option Explicit" ganz oben hinschreiben, falls VB das nicht für dich hinschreibt.)

Mach sonst in der Funktion mal einen Rechtsklick mit der Maus auf die Variable und klicke auf "Definition". Dann müsste der Editor zu der Zeile springen, wo die Variable deklariert ist. Das machst du bei beiden Funktionen und überprüfst, ob es sich wirklich um die selbe Variable handelt.


----------



## HowlinMad (20. Oktober 2005)

Hallo Shakie,

'Option Explicit' hatte ich bereits und "Variablendeklaration erforderlich" ist nun auch gesetzt. Habe aber immer noch das gleiche Problem. 

Bei der Definition springt er immer auf meine eine globale Deklaration. 

Evtl. hab ich ja auch irgendetwas nicht richtig verstanden. VB ist noch relativ neu für mich. Ich beschreib das einfach mal ganz naiv....
Wenn ich eine globale Variable definiere und gebe ihr in irgendeiner Methode einen Wert, dann kann ich doch in jeder anderen Methode diesen Wert wieder auslesen, oder? 

Meine Codeteile:

Option Explicit
Public anzWFList As Integer

Private Sub cmdImport_Click()
    On Error GoTo Err

        If Me.chkaddworkflow.value = 1 Then
...

anzWFList = allwfname.count
...

End Sub



Auf diese Methode wird nun aus einer anderen Form drauf zugegriffen:

Public Sub test()
    Dim test As Integer
    test = anzWFList
End Sub


Im "add Watch" hat er für beide Variablen verschiedene Values. Unterschiedlich ist ansonsten nur der Context...

Ich hab nun mal eine weitere Funktion eingebaut und dort die Variable befüllt. Dieser Wert ist dann auch (wie erwartet) in anderen Funktionen abrufbar. Also liegt das Problem in meiner Methode.
Die Frage ist nun, warum behält er den zugewiesenen Wert nicht.


----------



## Yoah (20. Oktober 2005)

Moin,

ich klinke mich mal da ein!

Das Problem hatte ich auch schon mal, ich hatte 2 Forms, in der einen habe ich eine
Variable global definiert und gesetzt und in der anderen wollte ich darauf zugreifen.
Das geht nicht, zumindest meiner Meinung nach.

Ich habe es so gelöst, dass ich diese globale Variable in einem Modul definiert habe und
fertig war der Hase, von nun an, konnte ich von jedem Formular auf diese Variable zugreifen
und beliebig verändern.

Vielleicht hilft es ja! (gibt aber bestimmt noch andere Lösungen)


----------



## HowlinMad (20. Oktober 2005)

Hallo Yoah,

das Problem ist nicht das Zugreifen aus einer anderen Form. Das klappt sogar. Das Problem ist, daß ich eine globale Variable, der ich in einer Funktion etwas zuweise in einer anderen Funktion nicht mehr zur Verfügung steht. Zumindest nicht der zugewiesene Wert.
Bei Definitions geht er aber jedes Mal auf meine globale Deklaration. Und es MUSS an dieser Funktion liegen, da mir, wenn ich der Variable in einer anderen Funktion etwas zuweise,  der Wert in anderen Funktionen wieder zur Verfügung steht.

Die Frage ist nun, warum das in meiner eigentlichen Funktion nicht funktioniert. Funktioniert so etwas z.B. nicht in If-Anweisungen und/oder in "On Error GoTo Err"-Blöcken?


----------



## HowlinMad (20. Oktober 2005)

Ich glaub, ich hab das Problem zumindest erkannt. Ich muß aus der anderen Form nicht die Form aufrufen, sondern die Instanz! Das würde zumindest einiges erkären...


----------



## TS-JC (5. Januar 2009)

Wie ist denn nun deine Lösung? 

Habe ein ähnliches Problem. Im 2. Form möchte ich halt auf die Variable zugreifen, aber nichts klappt.

1. Formularname: ALR

Egal was ich schreibe, es klappt nicht. Variable dort als Public var1 as String oder Dim var1 as String
Zugriff Versuche:
- Forms!ALR.var1
- Forms!Form_ALR.var1
- ALR.var1
- Form_ALR.var1
- var1

Klappt alles nicht 
Das Formular wird angeblich nicht gefunden, obwohl ich es per Strg+Leertaste angezeigt bekomme. Ohne das Form zu nennen ist die Variable leer.

EDIT:
Lol, jetzt gehts per Forms!ALR.var1
kp warum, aber egal


----------

