Variablen haben den Zweck, Werte zu speichern und zu verarbeiten. Texte kann man z. B. zusammenfügen, mit Zahlen kann man rechnen. Die Software muss dazu erkennen, ob eine Variable einen Text oder eine Zahl enthält. So erwartet man z. B., dass „Mittag“ und „essen“ zu „Mittagessen“ zusammengesetzt wird, aber „1“ und „2“ soll wohl in der Regel „3“ ergeben, und nicht „12“. Wünschen wir es doch anders (also eine Interpretation als Text), müssen wir es dem Programm gezielt sagen können. Verschiedene Computerprogramme stellen dazu unterschiedliche Verfahren zur Verfügung. VBA ist diesbezüglich eine sogenannte typisierte Programmiersprache. Das bedeutet, dass jede Variable einen bestimmten Datentyp hat, es also von vornherein festgelegt ist, welche Art von Werten in einer Variablen gespeichert werden kann.
a + b = ? | ||
Text: | Mittag | essen |
Zahl: | 1 | 2 |
3 |
Option Explicit
Sub HalloDu() Dim meinText As String meinText = "Hallo Welt" Debug.Print meinText End Sub
Dieses Beispiel kannten wir schon, aber bei der
Variablendeklaration ist As String
hinzugekommen,
womit die Variable nur noch Texte speichern kann. Der Datentyp folgt nach dem
Schlüsselwort As
. Sobald man As
getippt hat, stellt
IntelliSense eine ziemlich lange Auswahlliste zur Verfügung. Die Liste variiert je
nachdem, in welcher Applikation VBA gerade läuft. Wer „seine“ Applikation kennt,
dem kommt hier Vieles bekannt vor. Uns interessieren aber zunächst nur die
VBA-internen Datentypen:
Datentypen | ||||
---|---|---|---|---|
Typ | Wertebereich | Speicherbedarf | Anfangswert | Beispiel |
Boolean | Ja/Nein-Werte (True oder False) | 2 Byte | False | weiblich = True |
Byte | Ganzzahlen 0 bis 255 | 1 Byte | 0 | Alter = 42 |
Integer | Ganzzahlen -32.768 bis 32.767 | 2 Byte | 0 | Baujahr = 1950 |
Long | Ganzzahlen -2.147.483.648 bis 2.147.483.647 | 4 Byte | 0 | KundenNr = 23 |
LongLong ¹ | Ganzzahlen ca. ± 9 Trillionen | 8 Byte | 0 | Menschen = |
Currency | skalierte Ganzzahlen ca. ± 9 Billionen, 4 Nachkommastellen | 8 Byte | 0 | Euro = -47.11 |
Single | Gleitkommazahl, einfache Genauigkeit | 4 Byte | 0 | gerundet = 1.5 |
Double | Gleitkommazahl, doppelte Genauigkeit | 8 Byte | 0 | Ergebnis = 1.75 |
Date | Datum (1. Jan 100 bis 31. Dez 9999) und Zeit | 8 Byte | 30.12.1899 00:00 | Heute = |
String | Texte | Anz. Zeichen * 2 | vbNullString | Info = "Hallo Welt" |
Object | abhängig vom Objekt | 4 Byte | Nothing | Set BMW = Auto |
Variant | abhängig vom gerade aktuellen Inhalt | unterschiedlich | Empty | diverses = -1 |
¹ Nur auf 64-Bit-Systemen verfügbar
Die Entscheidung für einen Datentyp hängt davon ab, ob man Texte oder Zahlen
speichern will. Für Texte fester Länge gibt es noch die Syntax
String * Länge
, also z. B.
Dim MeinZeichen As String * 1
,
wenn der String immer exakt ein Zeichen enthalten soll. Bei Zahlen wird zwischen
Ganzzahlen und Gleitkommazahlen unterschieden. Dafür gibt es jeweils mehrere
Datentypen (Ganzzahlen: Byte
,
Integer
und Long
.
Fließkommazahlen: Single
und
Double
). Single
existiert eher aus Kompatibilitätsgründen und sollte heute nicht mehr verwendet werden.
Currency
ist intern eine Ganzzahl, die durch
10000 geteilt wird und so 4 feste Nachkommastellen hat. Im Gegensatz zu „normalen“
Fließkommazahlen ist das ein sehr genaues Rechenverfahren und daher besonders im
Zusammenhang mit Geldbeträgen zu empfehlen.
Variant
-Variablen können jeden beliebigen
Wert annehmen. Eine Dim
-Anweisung ohne
Datentyp deklariert die Variable als Variant.
Sobald man eine Variable deklariert hat, wird ihr ein Anfangswert und Speicherplatz
zugewiesen. Numerische Variablen bekommen den Wert 0, Strings entsprechen der leeren
Zeichenfolge ""
. Strings fester Länge bekommen eine Zeichenfolge zugewiesen,
die aus dem Steuerzeichen vbNullChar
besteht, und zwar so oft, wie der String lang ist. Eine Variant-Variable bekommt
den Sonderwert Empty
, der anzeigt, dass sie noch keinen Wert zugewiesen
bekommen hat. Man kann ihr auch später wieder Empty
zuweisen, um sie
wieder in einen „jungfräulichen Zustand“ zu versetzen. Außerdem kann ein Variant
auch den Sonderwert Null
enthalten, um anzuzeigen, dass die Variable
keine gültigen Daten enthält.
Object
-Variablen werden erst sehr viel
später im Tutorial angesprochen. Hier sei nur schon erwähnt, dass der Anfangswert
Nothing
ein Sonderwert ist, um anzuzeigen, dass die Variable auf kein
Objekt verweist.
Wieviel Speicherplatz eine Variable verbraucht, interessiert in der Praxis selten
- es sei denn, man will z. B. eine ganze Datenbank auf einmal in Variablen
speichern. Bei String
und
Variant
zeigt sich dann, warum diese Datentypen
ein Performanceproblem haben können: Je nach Inhalt der Variable ändert sich ihr
Speicherbedarf. „Unter der Haube“ muss der Computer im Speicher einiges umräumen,
wenn sich der Inhalt ändert. Zudem muss sich VBA bei
Variant
auch noch merken, als welcher Datentyp
der derzeitige Wert gerade interpretiert werden soll. Während deswegen im Umfeld
z. B. von Microsoft Access der Datentyp
Variant
eher verpönt ist, wird dessen
Flexibilität von manchen Usern von Microsoft Excel gerne
genutzt, um Variablen wie in einer nicht-typisierten Scriptsprache zu nutzen.