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:
-
Speichern und schließen Sie alle geöffneten Arbeitsmappen, und öffnen Sie dann eine neue Arbeitsmappe.
-
Starten Sie Visual Basic-Editor (drücken Sie ALT+F11).
-
Klicken Sie im Menü Einfügen auf Modul.
-
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 -
Führen Sie das Variable_Test aus. Sie erhalten die folgende Meldung:
the value of x is 10
the value of y is 100 -
Klicken Sie auf OK.
-
Ändern Sie Variable_Test Im Makro die folgende Zeile:x = 10
-
to:
x = "error" -
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:
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:
-
Fügen Sie ein neues Modul in Ihr Projekt ein.
-
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 -
Führen Sie Makro1 aus, und es wird die folgende Meldung angezeigt:
x, as seen by Macro1 is 10 -
Klicken Sie auf OK.Dann wird die folgende Meldung angezeigt:
x, as seen by Macro2 is -
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:
-
Speichern und schließen Sie alle geöffneten Arbeitsmappen, und öffnen Sie dann eine neue Arbeitsmappe.
-
Starten Sie den Visual Basic Editor.
-
Fügen Sie ein Modul in Ihr Projekt ein.
-
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
-
Fügen Sie ein weiteres Modul in Ihr Projekt ein.
-
Geben Sie in diesem Modul den folgenden Code ein:
Sub Macro2() x = x * 3
MsgBox x
End Sub -
Führen Macro_1a Makro im ersten Modul aus.
-
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).
-
Ändern Sie die Deklarationszeile im ersten Modul von:
Public x As Integer
to:
Dim x As Integer -
Führen Sie das Macro_1a aus.
-
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).
-
Ändern Sie die Deklarationszeile im ersten Modul von:
Dim x As Integer
An:
Private x As Integer -
Führen Sie das Macro_1a aus.
-
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:
-
Fügen Sie ein neues Modul in Ihr Projekt ein.
-
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 -
Führen Sie "Makro1" aus.
-
Sie erhalten die folgende Meldung:
the initialized value of x is 0 -
Klicken Sie auf OK,und die Meldung wird angezeigt:
x is 10 -
Klicken Sie auf OK.Dann wird die folgende Meldung angezeigt:
x, as seen by Macro2 is -
Klicken Sie auf OK.
-
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 -
Klicken Sie auf OK.
-
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:
-
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
-
Führen Sie "Makro1" aus.
-
Die Meldung wird angezeigt:
the initialized value of x is 0 -
Klicken Sie auf OK,und die Meldung wird angezeigt:
x is 10 -
Klicken Sie auf OK.
-
Führen Sie Makro1 aus, und es wird die folgende Meldung angezeigt:
the initialized value of x is 10 -
Klicken Sie auf OK.Dann wird die folgende Meldung angezeigt:
x is 20 -
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:
-
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
-
Führen Sie Makro1 aus, und es wird die folgende Meldung angezeigt:
the initialized value of x is 0 -
Klicken Sie auf OK. Dann wird die folgende Meldung angezeigt:
x is 10 -
Klicken Sie auf OK,
-
Führen Sie "Makro1" aus, und die Meldung wird angezeigt:
the initialized value of x is 10 -
Klicken Sie auf OK.
-
Sie erhalten die folgende Meldung:
x is 20 -
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