TOP

VBA-Lektion 6.2. Datentypen (Variables)

YouLibreCalc for Excel logo

In der vorherigen Lektion haben wir uns Variablen angesehen, in die bestimmte Daten geschrieben werden können, die jedoch nicht mehr als einen Wert enthalten können. Um diese Einschränkung zu umgehen, gibt es in VBA Arrays, die mehrere Werte speichern können.


Hier sind einige Beispiele für verschiedene Arrays:

Sub variables()
    'Ein Beispiel für die Deklaration einer Variablen
    Dim var1 As String
    
    'Ein Beispiel für die Deklaration eines eindimensionalen Arrays
    Dim array1(4) As String
    
    'Ein Beispiel für die Deklaration eines zweidimensionalen Arrays
    Dim array2(4, 3) As String
    
    'Ein Beispiel für die Deklaration eines dreidimensionalen Arrays
    Dim array3(4, 3, 2) As String
End Sub

Eindimensionales Array

Dim array1(4) As String

Ein eindimensionales Array kann man sich als eine Tabelle vorstellen, die aus einer Spalte besteht. Das Array array1(4) ist ein eindimensionales Array, das 5 Datensätze enthalten kann. Warum 5? Weil die Anzahl der Datensätze im Array bei Null beginnt (0, 1, 2, 3, 4).

Betrachten wir nun ein zweidimensionales Array:

Dim array2(4, 3) As String

Es wird bereits wie eine Tabelle mit 5 Zeilen und 4 Spalten aussehen:

'Zuweisen von Werten für farbige Zellen
array2(0, 0) = „Wert in roten Blutkörperchen“
array2(4, 1) = „Wert in grüner Zelle“
array2(2, 3) = „Der Wert in der blauen Zelle“

Konstanten

Konstanten können wie Variablen zum Speichern von Werten verwendet werden, der Unterschied besteht jedoch darin, dass sich Werte nicht ändern können. Wir können eine Konstante hinzufügen, um eine Wiederholung des Werts zu vermeiden, zum Beispiel 13.14:

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

Dadurch ist der Code leichter zu verstehen und zu bearbeiten. Außerdem können Sie den Wert der Konstante ganz einfach ändern:

Sub const_example()
   'Eine Konstante deklarieren + einen Wert zuweisen
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

Umfang der Variablen

Wenn eine Variable zu Beginn einer Prozedur (Sub) deklariert wird, kann sie nur in dieser Prozedur verwendet werden. Der Wert der Variablen ist nach Ausführung der Prozedur nicht mehr verfügbar.

Sub procedure1()
   Dim var1 As Integer
   '=> Die Variable ist nur in dieser Prozedur gültig
End Sub

Sub procedure2()
   '=> var1 kann hier nicht verwendet werden
End Sub

Um eine Variable in einer beliebigen Modulprozedur zu verwenden, müssen wir sie nur ganz am Anfang des Moduls deklarieren. Und wenn Sie eine Variable wie diese deklarieren, bleibt sie verfügbar, bis die Arbeitsmappe geschlossen wird.

Dim var1 As Integer

Sub procedure1()
   '=> var1 kann hier verwendet werden
End Sub

Sub procedure2()
   '=> var1 kann hier auch verwendet werden
End Sub

Wenn Sie in allen Modulen des Buches dieselbe Variable verwenden möchten, sollten Sie im vorherigen Beispiel nur Dim durch Global ersetzen:

Global var1 As Integer

Um eine Variable nach der Ausführung der Prozedur, in der sie erscheint, zu verwenden, ersetzen Sie Dim durch Static:

Sub procedure1()
    Static var1 As Integer
End Sub

Um die Werte aller Variablen in der Prozedur zu verwenden, fügen Sie Static vor Sub hinzu:

Static Sub procedure1()
    Dim var1 As Integer
End Sub

Erstellen Sie Ihren eigenen Variablentyp

Hier ist ein kurzes Beispiel, wie Sie Ihren eigenen Typ erstellen können:

 'Erstellen eines Variablentyps
 Type customers
    last_name As String
    first_name As String
 End Type
   
 Sub variables()
    'Deklaration einer Variablen
    Dim cust1 As customers
   
    'Cust1 einen Wert zuweisen
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    'Anwendungsbeispiel
    MsgBox cust1.last_name & " " & cust1.first_name
 End Sub