Microsoft Excel

Excel und VBA: Formeln, Programmierung, Lösungen

Inhalt dieser Seite

Die Gültigkeit:

Variablen sind eine Platzhalter für Zeichenfolgen, Werte und Objekte. So können Werte oder Objekte enthalten. Abhängig vom Ort und der Art ihrer Deklaration werden ihre Gültigkeit und die Lebensdauer ihrer Werte festgelegt.

  • Deklaration innerhalb einer Prozedur
    Die Variable hat ihre Gültigkeit ausschließlich für diese Prozedur und kann aus anderen Prozeduren nicht angesprochen werden.
  • Deklaration im Modulkopf
    Die Variable gilt für alle Prozeduren dieses Moduls, eine Weitergabe als Parameter ist nicht notwendig.
  • Deklaration im Modulkopf eines Standardmoduls als Public
    Die Variable gilt für alle Prozeduren der Arbeitsmappe, soweit das die Prozedur enthaltene Modul nicht als Private deklariert ist.

Empfehlenswert ist die grundsätzliche Vermeidung von Public-Variablen und der Verzicht auf Variablen auf Modulebene. Es ist nicht immer einfach zu beurteilen, wann diese öffentlichen Variablen ihren Wert verlieren oder wo er geändert wird. Die sauberste Lösung ist die Deklariation innerhalb der Prozeduren und die Weitergabe als Parameter.

Wenn Sie mit öffentlichen Variablen arbeiten, sollten Sie Ihre Variablennamen gemäß den Programmier-Konventionen vergeben und sie so als öffentlich kennzeichnen. Ein vorangestelltes g könnte darauf hinweisen, dass es sich um eine Public-Variable, ein kleines m, dass es sich um eine Variable auf Modulebene handelt.

In den nachfolgenden Beispielen wird Deklaration und Verhalten von Variablen demonstriert.

Die Beispiele

  • Deklaration auf Prozedurebene

    Eine Variable ist innerhalb einer Prozedur deklariert und nur in dieser Prozedur gültig.

    • Prozedur: varA
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Wert an Integer-Variable übergeben
      • Wert melden
    • Code:
      Sub VarA()
         Dim iValue As Integer
         iValue = 10 + 5
         MsgBox "Variablenwert: " & iValue
      End Sub
      
  • Deklaration auf Modulebene

    Eine Variable ist innerhalb eines Moduls in jeder Prozedur gültig und wird im Modulkopf deklariert.

    • Prozedur: varB und ProcedureA
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration im Modulkopf
      • Wert an Double-Variable übergeben
      • Unterprogramm ohne Parameter aufrufen
      • Variablenwert melden
    • Code:
      Dim mdModul As Double
      
      Sub VarB()
         mdModul = 23 / 14
         Call ProcedureA
      End Sub
      
      Private Sub ProcedureA()
         MsgBox "Variablenwert: " & mdModul
      End Sub
      
      
  • Statische Variable

    Eine Variable ist innerhalb einer Prozedur als statisch deklariert und behält bei neuen Prozeduraufrufen ihren Wert.

    • Prozedur: varC
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Aufrufzähler hochzählen
      • Wert melden
      • Wert hochzählen
    • Code:
      Sub VarC()
         Static iValue As Integer
         Static iCount As Integer
         iCount = iCount + 1
         MsgBox iCount & ". Aufruf: " & iValue
         iValue = iValue + 100
      End Sub
      
  • Public-Variable

    Eine Variable ist in der Arbeitsmappe in jedem Modul gültig und im Modulkopf eines Moduls als Public deklariert.

    • Prozedur: varD und varE für den Folgeaufruf
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration im Modulkopf
      • Arbeitsblatt an Objektvariable übergeben
      • Arbeitsblattnamen melden

      Im zweiten Aufruf:

      • Wenn die Objekt-Variable nicht initialisiert ist...
      • Warnton
      • Negativmeldung
      • Sonst...
      • Arbeitsblattnamen melden
    • Code:
      Public gwksMain As Worksheet
      
      Sub VarD()
         Set gwksMain = Worksheets("Tabelle1")
         MsgBox "Blattname: " & gwksMain.Name
      End Sub
      
      Sub varE()
         If gwksMain Is Nothing Then
            Beep
            MsgBox "Bitte zuerst über Beispiel D initialisieren!"
         Else
            MsgBox "Blattname: " & gwksMain.Name
         End If
      End Sub
      
  • Übergabe von Variablen an eine Funktion

    Variablen an eine Funktion übergeben und den Rückgabewert melden.

    • Prozedur: varF und Funktion GetCbm
    • Art: Sub/Funktion
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Funktions-Rückgabewert in eine Double-Variable einlesen
      • Ergebnis melden

      Die Funktion:

      • Rückgabewert berechnen
    • Code:
      Sub varF()
         Dim dCbm As Double
         dCbm = GetCbm(3.12, 2.44, 1.58)
         MsgBox "Kubikmenter: " & Format(dCbm, "0.00")
      End Sub
      
      Private Function GetCbm( _
         dLength As Double, _
         dWidth As Double, _
         dHeight As Double)
         GetCbm = dLength * dWidth * dHeight
      End Function
      
  • ByRef Verarbeitung in einem Unterprogramm

    Variable ByRef an ein Unterprogramm übergeben und den veränderten Rückgabewert melden.

    • Prozedur: varG und Unterprogramm ProcedureB
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Variable für Rückgabewert initialisieren
      • Unterprogramm mit Parametern aufrufen
      • Ergebnis melden

      Das Unterprogramm:

      • Rückgabewert berechnen
    • Code:
      Sub varG()
         Dim dCbm As Double
         dCbm = 0
         Call ProcedureB(3.12, 2.44, 1.58, dCbm)
         MsgBox "Kubikmenter: " & dCbm
      End Sub
      
      Private Sub ProcedureB( _
         ByVal dLength As Double, _
         ByVal dWidth As Double, _
         ByVal dHeight As Double, _
         ByRef dErgebnis As Double)
         dErgebnis = dLength * dWidth * dHeight
      End Sub
      
  • Übergabe von Variablen an eine andere Arbeitsmappe

    Variable an eine Funktion einer anderen Arbeitsmappe übergeben und den Rückgabewert melden.

    • Prozedur: varH und Funktion in anderer Arbeitsmappe
    • Art: Sub/Funktion
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Pfad und Dateinamen der Test-Arbeitsmappe an String-Variable übergeben
      • Wenn die Test-Arbeitsmappe nicht gefunden wurde...
      • Negativmeldung
      • Sonst...
      • Bildschirmaktualisierung ausschalten
      • Wert an Long-Variable übergeben
      • Test-Arbeitsmappe öffnen
      • Funktion in der Text-Arbeitsmappe aufrufen und Ergebnis in Long-Variable einlesen
      • Test-Arbeitsmappe schließen
      • Bildschirmaktualisierung einschalten
      • Rückgabewert melden
    • Code:
      Sub varH()
         Dim lValue As Long
         Dim sFile As String
         sFile = ThisWorkbook.Path & "\vb04_test.xls"
         If Dir(sFile) = "" Then
            MsgBox "Die Testdatei " & sFile & " fehlt!"
         Else
            Application.ScreenUpdating = False
            lValue = 12345
            Workbooks.Open sFile
            lValue = Application.Run("vb04_test.xls!Berechnung", lValue)
            ActiveWorkbook.Close savechanges:=False
            Application.ScreenUpdating = True
            MsgBox "Ergebnis: " & lValue
         End If
      End Sub
      
      Function Berechnung(lWert As Long)
         Berechnung = lWert * 54321
      End Function
      
  • Variablen füllen und zurücksetzen

    Variablenwerte werden belegt und zurückgesetzt.

    • Prozedur: varI
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Variablendeklaration
      • Aktives Arbeitsblatt an eine Objekt-Variable übergeben
      • Schleife bilden
      • Array mit Werten füllen
      • Meldung mit Arbeitsblattnamen, Array-Inhalt und Wert der Zählvariablen
      • Meldung, dass die Werte zurückgesetzt werden
      • Objektvariable zurücksetzen
      • Array zurücksetzen
      • Zählvariable zurücksetzen
      • Fehlerroutine initialisieren
      • Arbeitsblattnamen melden (führt zum Fehler)
      • Wert des ersten Datenfeldes melden (leer)
      • Wert der Zählvariablen melden (0)
      • Prozedur verlassen
      • Fehlerroutine
      • Wenn es sich um die Fehlernummer 91 handelt...
      • Meldung mit Fehlernummer und Fehlertext
      • Nächste Programmzeile abarbeiten
    • Code:
      Sub varI()
         Dim wks As Worksheet
         Dim arr(1 To 3) As String
         Dim iCounter As Integer
         Set wks = ActiveSheet
         For iCounter = 1 To 3
            arr(iCounter) = Format(DateSerial(1, iCounter, 1), "mmmm")
         Next iCounter
         MsgBox "Name des Objeks Arbeitsblatt:" & vbLf & _
            "   " & wks.Name & vbLf & vbLf & _
            "Inhalt des Arrays:" & vbLf & _
            "   " & arr(1) & vbLf & _
            "   " & arr(2) & vbLf & _
            "   " & arr(3) & vbLf & vbLf & _
            "Inhalt der Zählvariablen:" & vbLf & _
            "   " & iCounter
         MsgBox "Jetzt werden die Variablen zurückgesetzt!"
         Set wks = Nothing
         Erase arr
         iCounter = 0
         On Error GoTo ERRORHANDLER
         MsgBox wks.Name
         MsgBox "Wert des ersten Datenfeldes: " & arr(1)
         MsgBox "Wert der Zählvariablen: " & iCounter
         Exit Sub
      ERRORHANDLER:
         If Err = 91 Then
            MsgBox "Fehler Nr. " & Err & ": " & Error
            Resume Next
         End If
      End Sub
      
      
  • Konstanten auf Prozedurebene

    Konstante auf Prozedurebene als Endpunkt einer Schleife.

    • Prozedur: varJ
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Konstantendeklaration
      • Variablendeklaration
      • Schleife bilden
      • Schleife beenden
      • Zählvariable melden
    • Code:
      Sub varJ()
         Const ciLast As Integer = 100
         Dim iCounter As Integer
         For iCounter = 1 To ciLast
         Next iCounter
         MsgBox "Zähler: " & iCounter
      End Sub
      
  • Public-Konstanten

    Public-Konstante für alle Prozeduren der Arbeitsmappe.

    • Prozedur: varK
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Konstantendeklaration im Modulkopf
      • Meldung mit der Public-Konstanten
    • Code:
      Public Const gciDecember  As Integer = 12
      
      Sub varK()
         MsgBox "Monat Dezember hat den Index " & gciDecember
      End Sub
      
  • Übergabe eines variablen Wertes an eine Konstante

    Variabler Wert als Konstante. Gegen Versuche, einen variablen Wert an eine Konstante zu übergeben, wehrt sich VBA vehement. Das Beispiel zeigt eine Möglichkeit, das Problem zu umgehen.

    • Prozedur: varL
    • Art: Sub
    • Modul: Standardmodul
    • Zweck: Variablendemonstration
    • Ablaufbeschreibung:
      • Konstantendeklaration
      • Meldung mit der variablen Konstanten
    • Code:
      Sub varL()
         Const cDay As String = "Day(Now())"
         MsgBox "Tageskonstante: " & Evaluate(cDay)
      End Sub