Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Globale Variable in "DieseArbeitsmappe"

Globale Variable in "DieseArbeitsmappe"
30.04.2019 16:57:08
Sven
Hallo zusammen,
ich habe wie folgt in einem Modul deklariert:
Public blnRequestComment As Boolean
In allen Modulen und Userforms kann ich hierauf zugreifen, aber in "DieseArbeitsmappe" ist der Wert immer false. Ist das normal, dass die globalen Variablen hier nicht ansprechbar sind? Deklariere ich stattdessen in "DieseArbeitsmappe", so ist sie innerhalb der anderen Module nicht bekannt. Hat das etwas mit
Option Private Module

zu tun?
Danke und Grüße
Sven
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Globale Variable in "DieseArbeitsmappe"
30.04.2019 16:59:24
Hajo_Zi
Hallo Sven,
mit Dim ist die immer False.

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Globale Variable in "DieseArbeitsmappe"
30.04.2019 17:20:56
Nepumuk
Hallo Sven,
kann es sein, dass du die Variable in der Prozedur nochmal deklariert hast?
Gruß
Nepumuk
Anzeige
AW: Globale Variable in "DieseArbeitsmappe"
02.05.2019 08:26:44
Sven
Hallo Nepumuk,
danke für den Tipp. Nein, sie wird nur einmalig im Hauptmodul deklariert.
AW: Globale Variable in "DieseArbeitsmappe"
30.04.2019 17:26:44
Daniel
Hi
korrekt global bzw projektweit deklarierte Variablen sind auch im Modul DIESE ARBEITSMAPPE verfügbar.
Das Option Private Module bezieht sich meines Wissen nach nur auf die Anzeige der Makros im Excelmenü "Makros", dh Makros in diesem Modul werden nicht angezeigt und können nicht direkt vom Anwender ausgeführt werden.
Hast du mal die Reihenfolge der Ausführung geprüft?
wo erhält denn die Variable ihren Wert und in welchem Event willst du sie in "DieseArbeitsmappe" verwenden?
wenn du die Variable abfragst, bevor du sie befüllst, bekommst du natürlich immer den initialwert (false bei Boolean)
beim Öffnen der Datei sind alle globalen und statischen Variablen zunächsteinmal leer, ebenso nach dem Befehl END, nach einem Fehlerabbruch oder nach dem Klick auf Zurücksetzen.
Gruß Daniel
Anzeige
AW: Globale Variable in "DieseArbeitsmappe"
02.05.2019 08:26:36
Sven
Hallo Daniel,
danke für die ausführlichen Infos. Sie wird im Hauptmodul, indem sie auch deklariert wurde, durch unterschiedliche Prozeduren umgesetzt - deswegen als globale Variable angelegt. Laut Debugger ist ihr letzter Status soagr true. Dann klicke ich auf speichern und sie ist false (wewegen der Code unter bevforesave nicht ausgeführt wird).
Grüße
Anzeige
Du unterliegst einem Fehlschluss, ...
30.04.2019 19:16:01
Luc:-?
…Sven:
1. Eine in einem (Dokument-)Klassenmodul deklarierte Public-Variable kann auch in anderen Modulen benutzt wdn, nur muss der Name des KlassenModuls vorangestellt wdn.
2. Eine in einem allgemeinen Modul (auch bei Option Private Module) deklarierte Public-Variable kann auch in (Dokument-)Klassen­Mo­du­len benutzt wdn, nur muss sie zuvor auch befüllt worden sein.
Das kann sich uU „beißen“, weshalb ich die allgemeine Variable im nachfolgenden Doppel-Bsp schon bei Mappen-Öffnen fülle …
Klassenmodul DieseArbeitsmappe:
Option Explicit
Const testKonst$ = "alfa"
Public testVar
Private Sub Workbook_Open()
testVrb = True
If testVrb Then testVar = testKonst Else testVar = Empty
End Sub
Allgemeines Modul Modul1:
Option Explicit
Option Private Module
Public testVrb As Boolean
Sub test()
MsgBox DieseArbeitsmappe.testVar
End Sub
Natürlich muss erst die SubProz Workbook_Open gelaufen sein, bevor die SubProz Test irgendetwas zurückgeben kann.
Wollte man diese Mappe allerdings auch in anderen VBA-Projekten benutzen, muss in ihnen ein Verweis auf sie gesetzt wdn, was nur fktioniert, wenn sie einen eindeutigen, nicht den StandardNamen DieseArbeitsmappe trägt.
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
AW: Du unterliegst einem Fehlschluss, ...
02.05.2019 08:31:59
Sven
Hallo Luc,
ich wünschte, ich würde verstehen, was Du meinst. :o)
Was ist testVar (für ein Typ)?
Ausprobieren! Jede deklarierte Variable ...
02.05.2019 11:56:05
Luc:-?
…ohne explizite DatentypAngabe ist automatisch Variant, Sven.
Luc :-?
Übrigens, ...
02.05.2019 12:03:12
Luc:-?
…an deiner Frage, der unten gezeigten PgmZeile und deinem bekundeten Unverständnis sehe ich, dass du eher ein (autodidaktischer) VBA-Anfänger bist… ;-]
Luc :-?
Anzeige
AW: Globale Variable in "DieseArbeitsmappe"
02.05.2019 09:13:04
Sven
Hallo zusammen,
ich habe nochmal zwei Überwachungen gesetzt. Einmal aus dem Klassenmodul DieseArbeitsmappe heraus und einmal aus der Hauptprozedur in Modul1. Der Screenshot zeigt den Zustand, nachdem durch Laufzeit der Wert auf wahr gesprungen ist. Beim Speichern wird der Code jedoch nicht ausgeführt, da in der Variable angeblich kein wahr stände.
Userbild
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If blnRequestComment = True Then
ufComment.Show
End If
End Sub
Warum ist der Wert "außerhalb des Kontextes"?
Anzeige
AW: Globale Variable in "DieseArbeitsmappe"
02.05.2019 09:27:13
Nepumuk
Hallo Sven,
kannst du eine Mustermappe mit dem gesamten Code hochladen? Die Daten kannst du alle löschen.
Gruß
Nepumuk
AW: Globale Variable in "DieseArbeitsmappe"
02.05.2019 12:00:24
Sven
Hallo Nepumuk,
frag mich nicht, warum ein Rechnerneustart geholfen hat.
Danke für die Unterstützung.
Grüße
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Globale Variablen in Excel VBA richtig nutzen


Schritt-für-Schritt-Anleitung

  1. Globale Variable definieren: Du kannst eine globale Variable in einem allgemeinen Modul definieren. Das geht so:

    Public blnRequestComment As Boolean

    Diese Variable ist dann in allen Modulen und UserForms verfügbar.

  2. Zugriff auf die Variable: Um auf die globale Variable in einem Klassenmodul, wie z.B. "DieseArbeitsmappe", zuzugreifen, musst du sicherstellen, dass du die Variable korrekt befüllst, bevor du sie abfragst.

  3. Event-Handler nutzen: Wenn du die globale Variable in einem Event-Handler wie Workbook_BeforeSave abfragen möchtest, stelle sicher, dass der Wert vor dem Speichern aktualisiert wurde:

    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
       If blnRequestComment = True Then
           ufComment.Show
       End If
    End Sub
  4. Option Private Module: Beachte, dass die Zeile Option Private Module die Sichtbarkeit der Makros im Excel-Menü beeinflusst, jedoch nicht die Nutzung der globalen Variablen.


Häufige Fehler und Lösungen

  • Fehler: Globale Variablen erscheinen in "DieseArbeitsmappe" als False.

    • Lösung: Stelle sicher, dass du die globale Variable nur einmal deklarierst und den Wert in einem geeigneten Event-Handler setzt, bevor du darauf zugreifst.
  • Fehler: Die Variable wird im Debugger als True angezeigt, aber die Abfrage gibt False zurück.

    • Lösung: Überprüfe die Reihenfolge der Ausführung deiner Prozeduren. Möglicherweise wird die Variable abgerufen, bevor sie befüllt wird.

Alternative Methoden

  • Verwendung von statischen Variablen: Statt einer globalen Variable kannst du auch statische Variablen innerhalb einer Prozedur verwenden, um den Wert über mehrere Aufrufe hinweg zu behalten.

    Static blnRequestComment As Boolean
  • VBA-Klassenmodule: In einem Klassenmodul kannst du eine öffentliche Variable definieren, die auch in anderen Modulen benutzt werden kann. Hierbei musst du den Namen des Klassenmoduls voranstellen.


Praktische Beispiele

  1. Globale Variable in Klasse:

    ' In DieseArbeitsmappe
    Public testVar As Boolean
    Private Sub Workbook_Open()
       testVar = True
    End Sub
  2. Zugriff im Modul:

    ' In Modul1
    Sub Test()
       MsgBox DieseArbeitsmappe.testVar
    End Sub

Stelle sicher, dass das Event Workbook_Open ausgeführt wurde, bevor du die Variable abfragst.


Tipps für Profis

  • Debugging: Nutze die Debugging-Tools von Excel VBA, um die Werte deiner Variablen während der Ausführung zu überprüfen. Das kann dir helfen, Probleme frühzeitig zu erkennen.

  • Variablen deklarieren: Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies verringert das Risiko von Tippfehlern und hilft, Fehler zu vermeiden.

  • Dokumentation: Dokumentiere deine Variablen und deren Verwendungszweck, um die Wartbarkeit deines Codes zu erhöhen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen einer globalen und einer lokalen Variable? Globale Variablen sind in allen Modulen und UserForms verfügbar, während lokale Variablen nur innerhalb des Moduls, in dem sie definiert wurden, zugänglich sind.

2. Wie kann ich sicherstellen, dass eine globale Variable immer den richtigen Wert hat? Achte darauf, dass du die globale Variable in den richtigen Event-Handlern oder Prozeduren aktualisierst, bevor du sie abfragst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige