Mit Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Einführung

In diesem Artikel wird beschrieben, wie Sie Variablen in Microsoft Excel Unterprozeduren in Microsoft Visual Basic for Applications.

Weitere Informationen

Variablen in einer Unterprozedur

Ein leistungsfähiges Feature der Programmiersprachen ist die Möglichkeit, etwas in einer Variablen zu speichern, sodass der Inhalt der Variablen verwendet oder später im Verfahren geändert werden kann. In diesem Dokument wird die folgende Verwendung von Variablen in Visual Basic:

  • So werden Variablen deklariert.

  • Die Prozeduren und Projekte, die die Variable verwenden können.

  • Die Lebensdauer einer Variablen.

Deklarieren einer Variablen in einem Makro

Die einfachste Möglichkeit zum Deklarieren einer Variablen in einem Makro ist die Verwendung der Dim-Anweisung. In der folgenden Zeile werden zwei Variablen als ganze Zahlen deklariert:

    Dim x As Integer, y As Integer

Wenn x und y als ganze Zahlen angegeben sind, informieren Sie Visual Basic, ausreichend Arbeitsspeicher für eine ganzzahlige Variable (jeweils 2 Byte für x und y) und die in x oder y gespeicherten Informationen eine ganze Zahl zwischen -32768 und 32767 zu speichern.

HINWEIS: Wenn Sie mehr als eine Variable mit einer einzelnen Dim-Anweisung deklarieren, müssen Sie den Datentyp für jede Variable angeben.

Wenn Sie nicht den Datentyp für jede Variable angeben, wie im folgenden Visual Basic Code, wird nur die Variable y als ganzzahlige Variable eingerichtet. Die Variable x ist ein Variant-Typ:

    Dim x, y As Integer

Weitere Informationen finden Sie weiter unten unter Variant-Datentyp.
 

Führen Sie die folgenden Schritte aus, um einen Variablentest durchzuführen:

  1. Speichern und schließen Sie alle geöffneten Arbeitsmappen, und öffnen Sie dann eine neue Arbeitsmappe.

  2. Starten Sie Visual Basic-Editor (drücken Sie ALT+F11).

  3. Klicken Sie im Menü Einfügen auf Modul.

  4. Geben Sie den folgenden Code

    ein:
    Sub Variable_Test()     Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "Der Wert von x ist " & x & _
        Chr(13) & "Der Wert von y ist " & y
    End Sub

  5. Führen Sie das Variable_Test aus. Sie erhalten die folgende Meldung:

    the value of x is 10
    the value of y is 100

  6. Klicken Sie auf OK.

  7. Ändern Sie Variable_Test Im Makro die folgende Zeile:x = 10

  8. to:

    x = "error"

  9. Führen Sie das Variable_Test aus.

Sie erhalten einen Laufzeitfehler, da "Fehler" keine ganze Zahl ist, und Sie versuchen, diesen Zeichenfolgenwert der Ganzzahlvariablen x zuzuordnen.
 

Datentypzusammenfassung

Dies sind die gängigen Variablendatentypen:

Datentypen für häufige variablen Variablen

Variant-Datentyp

Wenn Sie beim Deklarieren einer Variable keinen Datentyp angeben oder wenn Sie keine Variable deklarieren, gibt Visual Basic automatisch den Variant-Datentyp für diese Variable an. Im Folgenden werden die Vorteile von Variablen erklärt, die als dieser Datentyp deklariert sind:

  • Die Variablen können Zeichenfolgen,Datum, Uhrzeit, boolesche oder numerische Werte enthalten.

  • Die Variablen können die in ihnen gespeicherten Werte automatisch konvertieren.

Der Nachteil ist, dass Variantenvariablen mindestens 16 Bytes Arbeitsspeicher erfordern. 16 Bytes Arbeitsspeicher können in großen Prozeduren oder in komplexen Modulen von Bedeutung sein.

Um zu sehen, wie dies im Makro Variable_Test funktioniert, führen Sie die folgenden Schritte aus:

Ändern Sie den Code im Variable_Test in:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Führen Sie das Variable_Test aus.

Sie erhalten keinen Fehler, da Sie den Variantenvariablen x und y irgendetwas zuweisen können.

HINWEIS: Sie können auch die folgende Zeile aus lassen, und das Makro funktioniert weiterhin, da die Variablen x und y als Variant-Datentypen behandelt werden:

    Dim x, y

Bereich einer Variablen

Wenn Sie eine Variable deklarieren, kann sie für andere Makros im selben Modul, in anderen Modulen oder in anderen Projekten angezeigt werden. Diese Verfügbarkeit einer Variablen in Modulen wird als Bereich bezeichnet. Die drei Bereichstypen sind Prozedurebene, private Modulebene und öffentliche Modulebene. Der Bereich hängt davon ab, wie und wo Die Variable oder Variablen deklariert werden.

Bereich auf Prozedurebene

Eine Variable mit Bereich auf Prozedurebene wird außerhalb des Verfahrens, in dem sie deklariert wird, nicht gesehen. Wenn Sie den Wert einer Variablen festlegen, die über einen Bereich auf Prozedurebene verfügt, wird der Inhalt dieser Variable für andere Makros nicht angezeigt.

Führen Sie die folgenden Schritte aus, um zu überprüfen, ob eine Variable mit Bereich auf Prozedurebene außerhalb des Verfahrens, in dem sie deklariert wird, nicht zu sehen ist:

  1. Fügen Sie ein neues Modul in Ihr Projekt ein.

  2. Geben Sie in diesem Modul die beiden folgenden Makros ein:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, wie von Macro1 gesehen ist " & x 'die nächste Zeile führt Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, wie von Macro2 gesehen ist " & x End Sub

  3. Führen Sie Makro1 aus, und es wird die folgende Meldung angezeigt:

    x, as seen by Macro1 is 10

  4. Klicken Sie auf OK.Dann wird die folgende Meldung angezeigt:

    x, as seen by Macro2 is

  5. Klicken Sie auf OK.

Makro2 zeigt keinen Wert für die Variable x an, da die Variable x für Makro1 lokal ist.

Bereich auf privater und öffentlicher Modulebene

Sie können Variablen im Deklarationsbereich eines Moduls definieren (oben in einem Modul, über allen untergeordneten Prozeduren) und den Bereich der Variablen festlegen, indem Sie die Public-Anweisung, die Dim-Anweisung oder die Private-Anweisung verwenden. Wenn Sie die Anweisung Public vor die Variable setzen, ist die Variable für alle Makros in allen Modulen des Projekts verfügbar. Wenn Sie die Dim-Anweisung oder die Private-Anweisung vor der Variablen verwenden, steht die Variable nur für Makros im Modul zur Verfügung, in dem sie deklariert wird.

Führen Sie die folgenden Schritte aus, um den Unterschied zwischen der Public-Anweisung und der Dim-Anweisung zu sehen:

  1. Speichern und schließen Sie alle geöffneten Arbeitsmappen, und öffnen Sie dann eine neue Arbeitsmappe.

  2. Starten Sie den Visual Basic Editor.

  3. Fügen Sie ein Modul in Ihr Projekt ein.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Fügen Sie ein weiteres Modul in Ihr Projekt ein.

  6. Geben Sie in diesem Modul den folgenden Code ein:


    Sub Macro2()     x = x * 3
        MsgBox x
    End Sub

  7. Führen Macro_1a Makro im ersten Modul aus.

  8. Wenn die Variable x als "Public x As Integer" deklariert ist, haben alle drei Makros im Projekt Zugriff auf den Wert x. Im ersten Meldungsfeld wird der Wert 10 angezeigt. Das zweite Meldungsfeld zeigt den Wert 20 an (da x in der zweiten Zeit mit 2 Macro_1b). Das dritte Meldungsfeld zeigt den Wert 60 an (weil der Wert von x in Macro_1b in 20 geändert und dann in Makro2 mit 3 multipliziert wurde).

  9. Ändern Sie die Deklarationszeile im ersten Modul von:

       Public x As Integer

    to:

       Dim x As Integer

  10. Führen Sie das Macro_1a aus.

  11. Wenn die Variable x als "Dim x As Integer" deklariert ist, haben nur die Makros im ersten Modul Zugriff auf den Wert x. Das erste Meldungsfeld zeigt also den Wert 10 an, das zweite Meldungsfeld den Wert 20 (da x in Macro_1b mit 2 multipliziert wird), und das dritte Meldungsfeld zeigt den Wert 0 an (weil Makro2 den Wert von x nicht sehen und der nicht initialisierte Wert von Null von Makro 2 verwendet wird).

  12. Ändern Sie die Deklarationszeile im ersten Modul von:

      Dim x As Integer

    An:

        Private x As Integer

  13. Führen Sie das Macro_1a aus.

  14. Die gleichen Meldungsfelder werden mithilfe des Bereichs "Private Anweisung" wie mit der Dim-Anweisung angezeigt. Die Variable x hat denselben Bereich, d. h. privat für das Modul, in dem sie deklariert ist.


HINWEIS: Wenn Sie den Umfang der Variablen auf das Modul, in dem sie deklariert ist, beschränkt sein soll, verwenden Sie die Private-Anweisung anstelle der Dim-Anweisung. Beide erzielen den gleichen Effekt, aber der Bereich ist klarer, wenn Sie den Code lesen, wenn Sie die Private-Anweisung verwenden.
 

Lebensdauer einer Variablen

Die Zeit, in der eine Variable ihren Wert beibe, wird als Lebensdauer bezeichnet. Der Wert einer Variablen kann sich während ihrer Lebensdauer ändern, der Wert bleibt jedoch erhalten. Außerdem hat eine Variable, die den Bereich verliert, keinen Wert mehr.
 

Initialisieren des Werts einer Variablen

Wenn Sie ein Makro ausführen, werden alle Variablen auf einen -Wert initialisiert. Eine numerische Variable wird auf Null, eine Zeichenfolge mit variabler Länge in eine Zeichenfolge der Länge null ("") initialisiert, und eine Zeichenfolge mit fester Länge wird mit dem ASCII-Code 0 gefüllt. Variantenvariablen werden zu "Leer" initialisiert. Eine leere Variable wird durch eine Null in einem numerischen Kontext und eine Zeichenfolge der Länge Null ("") in einem Zeichenfolgenkontext dargestellt.

Variablen auf Prozedurebene

Wenn Sie über eine Variable verfügen, die in einem Makro mithilfe der Dim-Anweisung deklariert wird, behält die Variable ihren Wert bei, solange das Makro ausgeführt wird. Wenn dieses Makro andere Makros aufruft, wird der Wert der Variablen beibehalten (steht für die anderen Makros jedoch nicht zur Verfügung), solange diese anderen Makros ebenfalls ausgeführt werden.

Führen Sie die folgenden Schritte aus, um zu veranschaulichen, wie Variablen auf Prozedurebene funktionieren:

  1. Fügen Sie ein neues Modul in Ihr Projekt ein.

  2. Geben Sie in diesem Modul die beiden folgenden Makros ein:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox "der initialisierte Wert von x ist " & x
       x = 10
        MsgBox "x is " & x
        In der nächsten Zeile wird Makro2 ausgeführt.
        Makro2
        MsgBox "x ist immer noch " & x
    End Sub
    Untermakro2()
        Meldung "x" wie von Makro2 gesehen ist " & x
    End Sub

  3. Führen Sie "Makro1" aus.

  4. Sie erhalten die folgende Meldung:

        the initialized value of x is 0

  5. Klicken Sie auf OK,und die Meldung wird angezeigt:

     x is 10

  6. Klicken Sie auf OK.Dann wird die folgende Meldung angezeigt:

    x, as seen by Macro2 is

  7. Klicken Sie auf OK.

  8. Makro2 zeigt keinen Wert für die Variable x an, da die Variable x für Makro1 lokal ist. Die folgende Meldung wird angezeigt:

    x is still 10

  9. Klicken Sie auf OK.

  10. Führen Sie Makro1 aus.

Sie erhalten dieselben Meldungen, die in Schritt 3 bis 6 beschrieben werden, da der Wert der Variablen x verloren gegangen ist, sobald die Ausführung von Makro1 in Schritt 6 beendet wurde. Wenn Sie Daher Makro1 in Schritt 7 erneut ausführen, zeigt die erste Meldung den Wert von x als Null an (den initialisierten Wert).

Static-Schlüsselwort

Wenn eine Variable auf Prozedurebene mithilfe des Schlüsselworts Static deklariert wird, behält die Variable ihren Wert bei, bis das Projekt zurückgesetzt wird. Wenn Sie also über eine statische Variable verfügen, wird die statische Variable beim nächsten Aufrufen der Prozedur mit ihrem letzten Wert initialisiert.

Führen Sie die folgenden Schritte aus, um zu sehen, wie das Schlüsselwort Static funktioniert:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Führen Sie "Makro1" aus.

  3. Die Meldung wird angezeigt:

    the initialized value of x is 0

  4. Klicken Sie auf OK,und die Meldung wird angezeigt:

    x is 10

  5. Klicken Sie auf OK.

  6. Führen Sie Makro1 aus, und es wird die folgende Meldung angezeigt:

    the initialized value of x is 10

  7. Klicken Sie auf OK.Dann wird die folgende Meldung angezeigt:

    x is 20

  8. Klicken Sie auf OK.

Die in den Meldungen angezeigten Werte unterscheiden sich beim zweiten Mal, da die Variable x als statische Variable deklariert wird und die Variable ihren Wert behält, nachdem Sie Macro1 zum ersten Mal ausgeführt haben.

HINWEIS:  Wenn Sie über eine Variable auf Modulebene verfügen, ist die Lebensdauer identisch mit einer statischen Variablen auf Prozedurebene.

Führen Sie die folgenden Schritte aus, um die Lebensdauer einer Variablen auf Modulebene zu überprüfen:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Führen Sie Makro1 aus, und es wird die folgende Meldung angezeigt:

    the initialized value of x is 0

  3. Klicken Sie auf OK. Dann wird die folgende Meldung angezeigt:

    x is 10

  4. Klicken Sie auf OK,

  5. Führen Sie "Makro1" aus, und die Meldung wird angezeigt:

    the initialized value of x is 10

  6. Klicken Sie auf OK.

  7. Sie erhalten die folgende Meldung:

    x is 20

  8. Klicken Sie auf OK.

Die in den Meldungen angezeigten Werte unterscheiden sich beim zweiten Mal, da die Variable x als statische Variable deklariert wird und ihren Wert behält, nachdem Sie "Macro1" zum ersten Mal ausgeführt haben.
 

Zurücksetzen eines Projekts zum Zurücksetzen von Variablen

Wenn Sie den Wert für eine statische Variable oder für eine Variable auf Modulebene zurücksetzen möchten,
klicken Sie auf der Standardsymbolleiste, oder klicken Sie im Menü Ausführen auf Zurücksetzen.

Wenn Sie dies für das Makro1-Projekt ausführen und dann "Makro1"erneut ausführen, wird der Wert der Variablen x wieder auf Null initialisiert, und Sie erhalten die erste Meldung:

    the initialized value of x is 0

Benötigen Sie weitere Hilfe?

Ihre Office-Fähigkeiten erweitern
Schulungen erkunden
Neue Funktionen als Erster erhalten
Microsoft Office Insidern beitreten

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?

Vielen Dank für Ihr Feedback!

×