Konstanten & Aufzählungen

Gelegentlich steht bei einer Variablen von vornherein fest, dass sie ihren Wert niemals ändern soll. In Visual Basic für Applikationen kann man dazu KonstanteKonstanten deklarieren.

Option Explicit

Sub
Mathe() Const Pi = 3.1415926535897932384626433832795 Const MwSt = 0.19 Const Nutzername = "Hans Wurst" Debug.Print Pi * 2 End Sub

Konstanten werden mit Const deklariert und bekommen gleich in der Deklaration ihren festen Wert zugewiesen. Außerdem kann man Konstanten zwar einen Datentyp zuweisen - aber wenn man das nicht macht, bekommt die Konstante automatisch einen Datentyp, der am besten für den Wert geeignet ist. Darin unterscheidet sich eine Konstante von einer Variable: Eine Variable ohne Angabe eines Datentyps bekommt den Typ Variant zugewiesen.

Manchmal braucht man eine Reihe zusammenhängender Konstanten. VBA bietet dafür EnumAufzählungen, auch Enumerationen genannt, an. Aufzählungen können nur im Deklarationsbereich, nicht in einer Prozedur deklariert werden, und können nur Zahlen vom Typ Long aufnehmen. Man kann auch darauf verzichten, diesen Konstanten Werte zuzuweisen; dann bekommt die erste Konstante den Wert „0“, die zweite „1“ usw. Eine Aufzählung kann anschließend genau wie ein Datentyp genutzt werden:

Option Explicit

Enum Farbe
    Karo = 9
    Herz = 10
    Pik = 11
    Kreuz = 12
    Grand = 24
End Enum

Sub Skat() Dim Spiel As Farbe Spiel = Herz End Sub

Praktisch an Aufzählungen ist nicht nur, dass man sich die entsprechenden Werte nicht mehr merken muss, sondern auch, dass IntelliSense beim Tippen die Konstanten der Aufzählung anbietet.

In VBA selbst sind intern schon einige Auflistungen enthalten, wie z. B. VbTriState oder VbDayOfWeek. Diese Konstanten sind für interne Funktionen von VBA gedacht, können aber natürlich nach Belieben auch anderweitig eingesetzt werden. Die meisten Applikationen bringen außerdem zahlreiche weitere eigene Auflistungen mit.

Eher der Vollständigkeit halber seien an dieser Stelle noch die Typebenutzerdefinierten Datentypen erwähnt. Zusätzlich zu den in VBA eingebauten Datentypen kann man mit Type darüber hinaus sogar eigene Datentypen definieren. Dafür gibt es aber in der Praxis nur in höchst seltenen Ausnahmefällen Bedarf.

Eine Grafik besteht beispielsweise aus Pixeln, und jeder Pixel hat eine Koordinate, bestehend aus einem X- und einem Y-Wert. Beide Werte können zusammen in einer einzigen Variablen gespeichert werden:

Type Koordinate
    x As Long
    y As Long
End Type

Function
Pixel() As String Dim p As Koordinate p.x = 800 p.y = 600 Pixel = p.x & "*" & p.y End Function

Auch Type-Anweisungen müssen im Deklarationsbereich eines Moduls erfolgen.