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

Forumthread: Public bzw. globale Variable?

Public bzw. globale Variable?
09.05.2009 17:54:40
Jaffi
Hallo Forum,
ohne euch klappts mal wieder nicht.
In einer Sub habe ich eine Variable folgendermassen deklariert:

Dim varEingabe
bla bla
varEingabe = wksEingang.Range("C2")
bla bla


Ich möchte nun von einem anderen Modul aus auf diese Variable zugreifen bzw. sie auf Knopfdruck in einer MsgBox augeben.
Ich probiere nun schon wieder seid Stunden dran rum und ich bekomme es einfach nicht hin.
Bei meiner googlelei hies es, man soll ein Standard-Modul erstellen und einfach folgendes rein tun:


Public varEingabe As integer


Aber natürlich funktioniert das nicht ;) kam mir gleich ein wenig zu einfach vor ;o). Denn auch dieses Modul sollte ja ersteinmal gesagt bekommen was varEingabe denn eigentlich beinhaltet oder?
Habs in dem Standardmodul auch einfach mal blauäugigerweise mit folgendem probiert:


Sub publicVar()
Dim wksEingang As Worksheet
Public varEingabe as Integer
Set wksEingang = Worksheets("Wareneingang")
varEingabe = wksEingang.Range("C2")
End Sub


Und logisch. Nichts. Mein Mudul "modvarabfrage" gibt eine leere MsgBox aus:


Sub letzteeingabe()
' Tastenkombination: Wahltaste+Befehlstaste+l
msgBox "" & varEingabe & ""
End Sub


Ich habe auch versucht einfach die Variable in meinem "grossen" Arbeitsplatt GLEICH als Public-Variable zu definieren:


Sub WarenEingang()
Public varEingabe As Integer 'Variable für Eingabe in Zelle C2 im Blatt Wareneingang
Dim wksEingang, wksBestellung, wksManuell, wkssicher As Worksheet
Dim rngSuchen As Range
Dim lngZeile, lngZeileLast As Long
Dim bManuell As Boolean
Dim lngStueckzahl As Long
On Error GoTo Fehler
Set wksEingang = Worksheets("Wareneingang")
Set wksBestellung = Worksheets("Bestellungen")
Set wksManuell = Worksheets("Manuell")
Set wkssicher = Worksheets("Sicherung")
bla..
bla..


Da kommt aber sofort: "Fehler beim Kompilieren Ungültiges Attribut in Sub oder Function"
Kann mir irgendjemand einen Tip geben was ich falsch mache?
Es muss doch möglich sein, auf die im wksEingan zu letzt eingegebene, 6 stellige Zahl (eben die varEingabe) von anderen Modulen aus zuzugreifen...bzw. diese ausgeben zu lassen..
am verzweifeln bin.... :(
Mal wieder tausend Dank für jeglichen Tip an eine (auch wenns schon besser wird) VBA-Anfängerin
Grüsse
J.

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Public bzw. globale Variable?
09.05.2009 17:58:52
Hajo_Zi
Hallo J.
die erste Variante ist richtig. Du hast die Variable nicht noch woanders in der Datei Dimensioniert?

AW: Public bzw. globale Variable?
09.05.2009 18:04:59
Jaffi
Hallo Hajo,
danke für Deine schnelle Antwort..
Mit erste Variante meinst du das ein einfaches Standardmodul mit: Public varEingabe As integer gefüllt werden muss?
Mhm... sorry, aber was meinst du mit woanders dimensioniert?
Nutze diese Eingabe eigentlich nur in diesem Worksheet..
Anzeige
AW: Public bzw. globale Variable?
09.05.2009 18:06:20
Hajo_Zi
Hallo J.
Du hattest geschrieben in einem Modul?
Schreibst Du in einem anderem Modul Dim varEingabe ist das eine andere Variable.
Gruß Hajo
AW: Public bzw. globale Variable?
09.05.2009 18:24:31
Jaffi
Also im Modul modWareneingan wird die Variable als Dim deklariert und mit varEingabe = wksEingang.Range("C2") gefüllt. In einem anderen Modul (scheint wohl falsch zu sein) habe ich Public varEingabe As Integer ohne weitere Zeilen... irgendwie hab ich mich wohl verrannt und habe keinen Plan mehr
*grummel*
Anzeige
AW: Public bzw. globale Variable?
09.05.2009 18:28:04
Hajo_Zi
Hallo
mit Dim ist sie nur für das Modul definiert. Du hattest aber geschrieben das Du Sie mit Public definiert hast und das ist korrekt. Ich sehe Deine Datei nicht. Vielleicht solltest Du Sie verlinken.
Gruß Hajo
Anzeige
AW: Public bzw. globale Variable?
09.05.2009 18:38:25
Jaffi
Hier mal der Komplette Code, bissl Chaotisch aber funzt erstmal soweit, bis auf das ich die varEingabe eben nicht von woanders abfragen kann:

Sub WarenEingang()
'Prüfen des Wareneingangs
Dim wksEingang, wksBestellung, wksManuell, wkssicher As Worksheet
Dim varEingabe 'Variable für Eingabe in Zelle C2 im Blatt Wareneingang
Dim rngSuchen As Range
Dim lngZeile, lngZeileLast As Long
Dim bManuell As Boolean
Dim lngStueckzahl As Long
On Error GoTo Fehler
Set wksEingang = Worksheets("Wareneingang")
Set wksBestellung = Worksheets("Bestellungen")
Set wksManuell = Worksheets("Manuell")
Set wkssicher = Worksheets("Sicherung")
'Eingabe in C2 in Variablespeichern
varEingabe = wksEingang.Range("C2")
'1. Prüfung - 6stellige (NUR Zahlen) Dateieingabe in C2
If Len(varEingabe) = 6 And IsNumeric(varEingabe) Then
With wksManuell                                                                              _
' im Worksheet "Manuell"
For lngZeile = 3 To .Cells(.Rows.Count, 1).End(xlUp).Row                                 _
' für alle Artikelnummern in Spalte 1
If .Cells(lngZeile, 1).Value = Range("c2").Value Then                                _
' falls die Artikelnummer der eingegebenen entspricht
bManuell = True                                                                  _
' manuelle Eingabeart merken
Do
lngStueckzahl = Application.InputBox("        Der Artikel muss manuell  _
erfasst werden.  " & vbNewLine & "         Bitte geben Sie die gezählte Menge ein!", "Kein Barcode vorhanden", , 400, 200, Type:=1) ' tatsächliche Stückzahl erfragen
If (lngStueckzahl  0
Exit For                                                                         _
' hier ist die Suche beendet
End If
Next lngZeile                                                                            _
' solange, bis die Liste durchsucht wurde
End With
With wkssicher
'letzte Zeile in Spalte A
lngZeileLast = .Cells(.Rows.Count, 1).End(xlUp).Row
If lngZeileLast  0 Then
msgBox "Fehler-Nr. " & .Number & vbLf & .Description
End If
End With
End Sub


Die varEingabe muss für alle Module abrufbar sein. Schreibe ich anstelle wie oben public varEingabe As Integer kommt eben diese Fehlermeldung: Fehler beim Kompilieren Ungültiges Atribut in Sub oder Function...

Anzeige
AW: Public bzw. globale Variable?
09.05.2009 18:42:21
Hajo_Zi
Hallo,
die Variable wird nicht in einem Makro Definiert, sondern gleich oben unter Option Explicit.
Gruß Hajo
AW: Public bzw. globale Variable?
09.05.2009 18:48:24
Jaffi
hm..nun hab ich mir schon an den Kopf geklatscht....
ABER wenn ich das mache kommt:
Fehler-Nr. 6
Überlauf
menno was ist das nur? :(
Anzeige
AW: Public bzw. globale Variable?
09.05.2009 18:52:01
Jaffi
ich habs!!! public varEingabe as String .....machts :D
man das String, Long, Integer usw muss ich noch lernen...gibts da irgendwo ne gute Beschreibung zu? :D
Tausend Dank ..Ihr habt mich mal wieder auf den richtigen Weg gebracht... himmel ich liebe dieses Forum ;o)
Liebe Grüsse und schönes WE :*
Anzeige
AW: Public bzw. globale Variable?
09.05.2009 18:03:58
Gerd
Hallo Jaffi!

Aber natürlich funktioniert das nicht ;) kam mir gleich ein wenig zu einfach vor ;o). Denn auch dieses Modul sollte ja ersteinmal gesagt bekommen was varEingabe denn eigentlich beinhaltet oder?


Nichts oder. Völlig richtig.
Also in irgendeiner Prozedur musst Du den Wert der globalen Variablen einmal zuweisen.
Dann steht dir die gefüllte Variable zur Laufzeit überall im Code zur Verfügung.
Gruß Gerd

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Mit globalen Variablen in Excel VBA arbeiten


Schritt-für-Schritt-Anleitung

Um eine globale Variable in Excel VBA zu definieren und zu verwenden, befolge die folgenden Schritte:

  1. Standardmodul erstellen:

    • Öffne den VBA-Editor (ALT + F11).
    • Klicke mit der rechten Maustaste im Projekt-Explorer auf "VBAProject (DeineDatei)", wähle "Einfügen" und dann "Modul".
  2. Globale Variable deklarieren:

    • Schreibe am Anfang des Moduls:
      Public varEingabe As Integer
    • Diese Zeile definiert die Variable varEingabe als global, sodass sie in allen Modulen zugänglich ist.
  3. Wert zuweisen:

    • In einem anderen Sub kannst du jetzt der globalen Variable einen Wert zuweisen:
      Sub setGlobalVar()
       varEingabe = Worksheets("Wareneingang").Range("C2").Value
      End Sub
  4. Zugriff auf die globale Variable:

    • In einem anderen Sub kannst du den Wert der globalen Variable so verwenden:
      Sub showGlobalVar()
       MsgBox "Der Wert der globalen Variable ist: " & varEingabe
      End Sub

Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: "Ungültiges Attribut in Sub oder Function".

    • Lösung: Stelle sicher, dass die globale Variable außerhalb von Subroutinen deklariert ist, z.B. direkt im Modul.
  • Leere MsgBox:

    • Ursache: Möglicherweise wurde der Wert der globalen Variable noch nicht zugewiesen.
    • Lösung: Vergewissere dich, dass der Code zur Zuweisung der Variable vor dem Aufruf der MsgBox ausgeführt wurde.
  • Überlauf-Fehler:

    • Ursache: Der zugewiesene Wert überschreitet den zulässigen Bereich des Datentyps.
    • Lösung: Verwende den richtigen Datentyp (z.B. String statt Integer, wenn der Wert alphanumerisch ist).

Alternative Methoden

  • Globale Variablen in Klassenmodulen: Du kannst auch globale Variablen in Klassenmodulen definieren, um die Daten in Objekten zu kapseln.

  • Benutzerdefinierte Funktionen: Nutze Function-Prozeduren, um Werte zurückzugeben, anstatt globale Variablen zu verwenden.

  • Zellen als Speicher: Manchmal ist es sinnvoll, Werte in bestimmten Zellen zu speichern und sie bei Bedarf auszulesen, anstatt Variablen zu verwenden.


Praktische Beispiele

  1. Globale Variable definieren und verwenden:

    Public varEingabe As Integer
    
    Sub setValue()
       varEingabe = Worksheets("Wareneingang").Range("C2").Value
    End Sub
    
    Sub displayValue()
       MsgBox "Eingegebener Wert: " & varEingabe
    End Sub
  2. Globale Variable initialisieren:

    Public varEingabe As String
    
    Sub initializeVar()
       varEingabe = "Hallo Welt"
    End Sub
    
    Sub showMessage()
       MsgBox varEingabe
    End Sub

Tipps für Profis

  • Option Explicit: Schalte Option Explicit ein, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler bei der Verwendung von Variablen zu vermeiden.
  • Datentypen: Wähle den richtigen Datentyp für deine Variablen, um Überlauf-Fehler zu vermeiden. Nutze Long für größere Zahlen oder String für alphanumerische Werte.
  • Namen für Variablen: Verwende sprechende Namen für deine Variablen, um den Code lesbarer zu machen.

FAQ: Häufige Fragen

1. Wie kann ich eine globale Variable in mehreren Modulen verwenden? Um eine globale Variable in mehreren Modulen zu verwenden, definiere die Variable mit Public in einem Standardmodul.

2. Was ist der Unterschied zwischen Dim und Public? Dim deklariert eine lokale Variable, die nur innerhalb des Moduls oder der Prozedur sichtbar ist. Public deklariert eine globale Variable, die in allen Modulen verfügbar ist.

3. Wie initialisiere ich eine globale Variable? Du kannst eine globale Variable initialisieren, indem du ihr in einer Subroutine einen Wert zuweist. Stelle sicher, dass diese Subroutine vor der Verwendung der Variable aufgerufen wird.

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