Variable Verliert ihren wert VBA

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wo hast du die Variablen denn deklariert? Die müssen in einem Modul als Public deklariert werden. Wenn du sie in einer Funktion oder Sub deklarierst, ist sie danach weg. Wenn du sie in einem Klassenobjekt (also z.B. im Modul vom Formular) deklarierst, kannst du meistens nicht von überall drauf zugreifen

Die stehen in einem extra Modul und in keiner Sub oder Funktion

und sind so deklariert:

Dim Benutzer,Passwort
0
@ToHan0510

Mach statt Dim mal Public und mach den Datentyp mal noch dazu. Also

Public Benutzer as String, Passwort as String

In der Funktion, wo sie gefüllt werden, dürfen die aber nicht nochmal deklariert werden, sonst wird in die öffentlichen Variablen nichts reingeschrieben.

0
@daCypher

Hat leider net so ganz geklappt

Aber trotzdem Danke

0
@ToHan0510

Bitte :)

Kannst vielleicht mal den ganzen Code hier reinkopieren. Vielleicht fällt mir ja was auf.

0
@daCypher

Ne das geht aus Sicherheits technischen gründen Leider net weil da auch wichtige Daten drin sind.

0
@ToHan0510

ahhhhhhhhhhhh

dann hat sich das überschnitten und meine ganze Antwort von eben hätte ich mir schenken können... Aber warum bitte hat das erst "nicht geklappt" und dann auf einmal doch???

Die Variablendeklaration zu nutzen empfehle ich zwar trotzdem, aber wenn es jetzt funktioniert, wirst Du wohl keine Lust haben, das entsprechend zu ändern...

0
@micmen

Da werden login Daten gespeichert und meine Acc war gesperrt wurden des wegen hate es nicht geklappt

0

Hallo beisammen, wenn man öffentlich Variablen benutzt, aber in seinem gesamten Projekt keine vernünftige Fehlerbehandlungsroutinen implementiert hat, dann kann das auch zum Problem werden. Angenommen die öffentlichen Variablen sind zu Beginn gefüllt und an irgendeiner anderen Stelle, z.B. beim Öffnen eines Berichtes kommt es zu einem Fehler, so dass der Code angehalten wird. Dann werden alle öffentlichen Variablen geleert. Vielleicht ist dies ja auch ein Ansatz. Darüber hinaus: Wenn das Ganze in der Access Version ab 2007 laufen soll (neues Dateiformat) - dann kann man sich auch mit TempVars behelfen - die überstehen zumindest ein Code-Reset. Ansonsten sehe ich das genauso wie mrhetzel: Die Werte am besten in eine kleine Tabelle speichern. Gruß, Armin Dippel

Mach doch im VBA-Fenster mal das Überwachungsfenster auf, klick mit rechts rein, wähle "Überwachung hinzufügen" und schreibe oben den Namen der einen der beiden "Problem-Variablen" rein. Dann wählst Du im unteren der beiden Kombinationsfelder ("Modul:") den allerersten Eintrag ganz oben "(alle Module)". Bei Art der Überwachung läßt Du "Überwachungsausdruck" aktiv ("Unterbrechen, wenn der Wert geändert wurde" wäre zwar besser, hat bei mir aber in noch keiner Access-Version funktioniert...). Dann setze Dir an ein paar Stellen im Code Haltepunkte (z.B. direkt vor der Stelle, an der die Werte zugewiesen werden, sowie direkt hinter dieser Stelle, sowie in der letzten Zeile der Funktion, innerhalb der der Wert geändert wird. Und dann laß den Code mal laufen und schau an den einzelnen Haltepunkten, welchen Inhalt Deine Variablen haben. Und an der letzten oben genannten Stelle, wo die Funktion verlassen wird, gehst Du nich mit F5 weiter, sondern mit F8, und schaust beim Wechsel zurück zu der Stelle, aus der heraus die Funktion aufgerufen wurde, ob dort der Wert verloren geht.

Und vorsichtshalber würde ich Dir noch eins empfehlen:

Schau mal in den Optionen im VBA-Fenster, ob "Variablendeklaration erforderlich" angehakt ist. Wenn nein, dann A) aktiviere das mal und B) schaue in alle Module (auch die Module von Formularen und Berichten), ob jedes ganz oben die Zeile stehen hat:

Option Explicit

Überall, wo die fehlt, A) kopierst Du sie rein und B) läßt direkt danach kompilieren. Wo Kompilierfehler auftreten, gibt es Probleme mit Variablendeklarationen, die sollten behoben werden. Bevor Du damit beginnst, solltest Du schon einmal kompilieren, bevor Du die erste Zeile ""Option Explicit" zufügst, vielleicht gibt es ja vorher schon Fehler...

Und wie hier schon erwähnt, sollte jede Variablendeklaration auch den Variablentyp mit angeben. Denn überall, wo die Typangabe fehlt, deklarierst Du eine Variable als Variant, das ist nicht wirklich empfehlenswert. Jede Typangabe bezieht sich übrigens nur auf die eine Variable, zu der sie angegeben ist, und nicht etwa auch auf die davor. Also das gegebene Beispiel:

Public Benutzer as String, Passwort as String

kann nicht auch ersetzt werden durch:

Public Benutzer, Passwort as String

Denn dann wäre nur Passwort als String deklariert, Benutzer aber als Variant.

Lokale Variablen leben so lange, wie die Function lebt. Was Du brauchst, ist eine Speicherung entweder global (macht man aber nicht) oder in einer Tabelle, deren Sätze nach beenden gelöscht werden.

sorry habe mich verschrieben die beiden sind Global. Die stehen in keiner Fuktion oder Methode