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

Forumthread: Globale Variablen wie definieren?

Globale Variablen wie definieren?
14.08.2014 17:46:45
Jan
Hi,
kann ich in "Diese Arbeitsmappe" eine Variable definieren, die auch innerhalb der Module verfügbar ist?
Oder besser formuliert, kann ich eine Variable im gesamten Dokument verfügbar machen? (mir ist eigentlich egal wo ;-)
Wenn ja, wie?
Mir genügen auch die richtigen Stichworte, dann schaue ich selbst nach, das Problem habe ich leider (noch) häufig.
Danke im Voraus,
Jan

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Globale Variablen wie definieren?
14.08.2014 17:51:32
Hajo_Zi
Hallo Jan,
Nein, das geht nur im Modul.

AW: Globale Variablen wie definieren?
14.08.2014 17:56:35
Jan
Hi Hajo,
okay. Ich fülle in dem Excelobjekt "Die Arbeitsmappe" - sorry, wenn ich dafür aktuell nur die blöden Begriffe habe - innerhalb der Methode "Private Sub Workbook_Open()" Zellen mit Defaultwerten.
Die selben werte hole ich auch ab und an innerhalb eines Moduls, nur muss ich aktuell alles doppelt schreiben. Kann ich innerhalb von "Diese Arbeitsmappe" einfach eine Funktion aufrufen, die innerhalb des Moduls liegt?
Habe ich das richtig verstanden?
Viele Grüße,
Jan

Anzeige
AW: Globale Variablen wie definieren?
14.08.2014 18:07:04
Hajo_Zi
Hallo Jan,
Du kannst bei Open auch ein Makro aufrufen Makro
Gruß Hajo

AW: Globale Variablen wie definieren?
14.08.2014 18:15:21
Jan
Dann mache ich das so (bzw. probiere mich damit :-), danke Hajo

AW: Globale Variablen wie definieren?
14.08.2014 17:56:50
Udo
Hajo was ist mit "Public". Also Puplic statt Dim.
(Bin selber Anfänger)

Anzeige
AW: Globale Variablen wie definieren?
14.08.2014 18:11:50
Hajo_Zi
Aber nicht unter den Tabellen und DieseArbeitsmappe.
Gruß Hajo

AW: Globale Variablen wie definieren?
15.08.2014 16:32:27
Adis
Hallo
Global oder Public habe ich oft in meinen Programmen als globale Variable verwendet. Bei mir gings.
Ebenso Global Const für Konstanten wie Adressen die für alle Module galten. Dazu habe ich ein extra
Global Modul angelegt damit ich nicht alle Variable und Konstanten dreifach schreiben musste.
Beim Call Aufruf bleibt der Wert der Variable erhalten. Schön beim Sortieren, weil ich mit Adr1 die Sortier Adresse für Key1 übergeben habe. Oder Anfang und End Adressen für das aufgerufene Programm. Werte von KontrollBoxen als Optxx, oder
Farb Index für die Schrift in bestimmten Zellen. Im Global Modul gab es immer einen Adressen Test, um falsche Selektionen
zu vermeiden oder Adressen Fehler über MsgBox schnell aufzuspüren.
Manchmal programmierte ich auch ein Makro mit dem Namen Setup_Adresse und lud alle wichtigen Adressen und KontrollBox Werte vor dem Makrostart in die Variablen. Gültig für alle Makros die ich aufrief.
Ob meine Deklaration 100% richtig ist kann ich nicht sagen, ich bin kein Profi. In der Praxis hat es funktioniert. Dann stehe ich
auf dem Standpunkt, einfach probieren und sich freuen wenn es kappt.
Probier es einfach aus.
Hier ein Beispiel Gruss Adis
' Persön.Datei: Stand
' mit Msgbox Adressen-Test 14.09.01
' ********************************************
Const FLab = 44 'Jmp Label Farb Code Tabelle:
Const FKom = 10 'Kommentar
Const FFun = 23 'Function
Const FWith = 30 'With Klammer
Const FCase = 29 'Select Case
' Globale Variable für alle Module
Global Const SuchEing = "D4" ' Eingabezelle Suchbegriff-Text
Global Const FiltEing = "F4" ' Anf-Adresse Filter-Eingabe
Global Const FiltBer = "F4:F6" ' Ber-Adresse Filter-Eingabe
Global Const FiltEnd = "F1000" ' End-Adresse Filter-Spalte
Global Const Down1Anf = "L11" ' DropDown1Anf Listen-Anf DropDown1
Global Const ListAnf = "D11" ' Anf-Adresse Suchliste
Global Const ListEnd = "D1000" ' End-Adresse Suchliste
Global Const ListBer = "B10:I1000" ' Ber-Adresse Suchliste
Global Const SortBer = "B11:I1000" ' Ber-Adresse Suchliste
Global Const DateiAnf = "AB10" ' Anf-Adresse Makro-Dateien
Global Const SuEndCell = "AT1" ' End-Adresse für Suchlauf
Global Const Suchmax = 1000 ' Suchlauf max 1000
Global Const StrgLä2 = 30 ' Stringlä 2.Zeile (" _" einzeilig)
' allgemeine Varible für Adresse, String, Zähler, etc.
Global Adr As String, Edr As String ' Anf-End Adresse allgemein
Global Adr1 As String, Adr2 As String ' Sortier-Schlüßel 1-2
Global AcAdr As String, AcVal As String ' AktiveZelle: Adresse + Wert
Global AcValn As String, AcValv As String ' nachfolgende/ vorherige AcZelle
Global Strg1 As String, Strg2 As String ' String zum zerlegen, Teilstring
Global Spalte As String, Zeilen As Integer ' Spalte (für Sub-Aufruf) ; Zeilen
Global Flg As String, i, j, l, Zahl ' Zähler allgemein (** i als Variant!)
' Set-Varible (Objekte/Schaltflä), Suchliste Anf/End-Adressen
Global dlg As Object, ok As Integer ' Objekt Zuweisung ; ok Variable
Global down1 As Object, down2 As Object ' Objekt Zuweisung DropDown 1+2
Global Schflä As String, SchfläNr As Integer ' Schaltfläche(Caller) ; Schflä-Nr
Global ListAdr As String, ListEdr As String ' Suchliste akt. Anf/End-Adresse
' Such- unf Filternamen incl. Teilstrings
Global Suchname As String, Filtname As String ' Such- Filtername aus Eingabe
Global SuName As String, FiName As String ' Haupt Such- Filtername
Global SName2 As String, SName3 As String ' Teil-Suchname 2-3
Global FName2 As String, FName3 As String ' Teil-Filtname 2-5
Global FName4 As String, FName5 As String
Global AnfName As String, EndName As String ' Anf-End Namen aus DropDown 1+2
' Option Kontrollbox 1-13 ; Suchfilter Flag (mit/ohne)
Global OptNoCom As Integer, OptNoDim As Integer ' Optionen Kontrollbox 1-13
Global OptNoSet As Integer, OptNoSb As Integer
Global OptNoIf As Integer, OptNoFor As Integer
Global OptCutCom As Integer, OptNoDop As Integer
Global OptClList As Integer
' Msgbox Adressen-Test 14.09.01
Sub Adressen_Test()
Sheets("MakroBsp").Select
Range(SuchEing).Select
MsgBox "Suchtext Eingabe:  " & Selection.Address(False, False)
Range(SuchEing).Offset(0, 1).Select
MsgBox "Suchen ohne ...  " & Selection.Address(False, False)
Range(FiltBer).Select
MsgBox "Filter-Eingabe Ber:  " & Selection.Address(False, False)
Range(ListBer).Select
MsgBox "Suchlist Bereich:  " & Selection.Address(False, False)
Range(ListAnf).Select
MsgBox "Suchliste Anfang:  " & Selection.Address(False, False)
Range(ListEnd).Select
MsgBox "Suchliste Ende:  " & Selection.Address(False, False)
Range(ListAnf).Offset(0, 2).Select
MsgBox "Filter Anfang:  " & Selection.Address(False, False)
Range(ListAnf).Offset(0, 4).Select
MsgBox "Anf-Name Anfang:  " & Selection.Address(False, False)
Range(ListAnf).Offset(0, 5).Select
MsgBox "End-Name Anfang:  " & Selection.Address(False, False)
Range(Down1Anf).Select
MsgBox "DropDowns Anfang:  " & Selection.Address(False, False)
Range(DateiAnf).Select
MsgBox "Makro-Dateien Anfang:  " & Selection.Address(False, False)
Range(SuEndCell).Select
MsgBox "Such End-Zelle:  " & Selection.Address(False, False)
Range(SuchEing).Select  'Ende
End Sub

Anzeige
AW: Globale Variablen wie definieren?
14.08.2014 18:08:39
Daniel
HI
1. Variablen, die auch von Makros in anderen Modulen verwendet werden sollen, müssen oberhalb der Makros, direkt unter Option Explicit mit dem Befehl Public deklariert werden:
Option Explicit
Public MeineGlobaleVariable As String
Sub Makro1()
...
2. dies sollte in einem allgemeinen Modul (Modul1) geschehen.
Nur wenn die Deklaration in einem allgemeinen Modul erfolgt ist, kann die Variable auch in allen anderen Modulen direkt verwendet werden:
MeineGlobaleVariable = "Hallo Welt"

3. Wenn die Deklartion in einem speziellen Modul erfolgt (also "DieseArbeitsmappe", "Tabelle1", "Userform1" usw), dann kann die Variable zwar auch in jedem anderen Modul verwendet werden, aber in diesem Fall muss man dann den Namen des Moduls, in dem die Deklaration erfolgt, voranstellen:
DieseArbeitsmappe.MeineGlobaleVariable = "Hallo Welt"
Gruß Daniel

Anzeige
AW: Globale Variablen wie definieren?
14.08.2014 18:14:46
Jan
Daniel, vielen Dank für diese aufschlussreiche Info.
Jan

AW: gib mal Public bei RECHERCHE ein
14.08.2014 18:20:28
Jan
Alles klar, ich habe nur "Listensuche" benutzt. War für mich missverständlich. Vielen Dank.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Globale Variablen in Excel VBA definieren


Schritt-für-Schritt-Anleitung

  1. Öffne deinen VBA-Editor: Drücke ALT + F11, um den Editor zu öffnen.
  2. Füge ein Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsmappenname)" und wähle Einfügen > Modul.
  3. Deklariere eine globale Variable: Schreibe deinen Code oberhalb von allen Sub-Prozeduren, direkt unter Option Explicit. Verwende das Schlüsselwort Public, um eine vba globale variable zu deklarieren.
    Option Explicit
    Public MeineGlobaleVariable As String
  4. Zugriff auf die globale Variable: Du kannst diese Variable nun in jedem Modul verwenden.
    Sub Beispiel()
       MeineGlobaleVariable = "Hallo Welt"
    End Sub

Häufige Fehler und Lösungen

  • Fehler: "Variable nicht definiert".

    • Lösung: Stelle sicher, dass du Option Explicit hast und die Variable korrekt deklariert ist.
  • Fehler: "Public-Variablen können nicht in bestimmten Modulen verwendet werden".

    • Lösung: Deklariere die vba globale variable nur in allgemeinen Modulen, nicht in speziellen Modulen wie "DieseArbeitsmappe" oder "Tabelle1".

Alternative Methoden

  • Globale Konstanten definieren: Verwende Global Const, um Konstanten zu erstellen, die in allen Modulen verfügbar sind.
    Global Const SuchEing = "D4"
  • Zugriff auf Module: In speziellen Modulen musst du den Modulnamen voranstellen, um auf die Variable zuzugreifen:
    DieseArbeitsmappe.MeineGlobaleVariable = "Wert"

Praktische Beispiele

Hier ist ein Beispiel, wie du eine excel vba globale variable definierst und verwendest:

Public Name As String

Sub SetName()
    Name = "Max"
End Sub

Sub ShowName()
    MsgBox Name
End Sub

Wenn du SetName ausführst, wird der Name gesetzt. In ShowName kannst du den Namen wieder abrufen.


Tipps für Profis

  • Verwende Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was Fehler reduziert.
  • Globale Konstanten: Verwende globale Konstanten für Werte, die sich nicht ändern, wie Farben oder spezifische Zelladressen.
  • Modularisiere deinen Code: Halte deinen Code sauber, indem du logische Gruppen von Variablen und Funktionen in separaten Modulen organisierst.

FAQ: Häufige Fragen

1. Wie kann ich den Wert einer globalen Variable zuweisen?
Du kannst einer vba globale variable einfach einen Wert zuweisen, indem du den Namen der Variable verwendest:

MeineGlobaleVariable = "Neuer Wert"

2. Sind globale Variablen immer sichtbar?
Ja, solange sie in einem allgemeinen Modul deklariert sind, sind sie in allen Modulen sichtbar. In speziellen Modulen musst du den Modulnamen voranstellen.

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