Variant: Unterschied zwischen den Versionen
Pwania (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Eine als Variant deklarierte Variable kann einen beliebigen Wert entgegennehmen, inklusive einer Objektreferenz. Wenn Sie bei der Deklaration einer Variablen k…“) |
Pwania (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
Eine als Variant deklarierte Variable kann einen beliebigen Wert entgegennehmen, inklusive einer Objektreferenz. | Eine als Variant deklarierte Variable kann einen beliebigen Wert entgegennehmen, inklusive einer Objektreferenz. | ||
Wenn Sie bei der Deklaration einer Variablen keinen Datentyp angeben, verwendet VBA automatisch den Datentyp Variant: | |||
<span style="Color:blue"> Dim </span>strText | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>strText<span style="Color:gray">)</span> <span style="Color:green">' 0 (Empty, Variant-Variable wurde noch nicht verwendet)</span> | |||
strText <span style="Color:gray">=</span> <span style="Color:gray">"Text"</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>strText<span style="Color:gray">)</span> <span style="Color:green">' 8 (Zeichenkette)</span> | |||
strText <span style="Color:gray">=</span> <span style="Color:gray">15</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>strText<span style="Color:gray">)</span> <span style="Color:green">' 2 (Integer)</span> | |||
Zum Vergleich: | |||
<span style="Color:blue"> Dim </span>strText<span style="Color:blue"> As String</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>strText<span style="Color:gray">)</span> <span style="Color:green">' 8 (von Anfang an Zeichenkette)</span> | |||
strText <span style="Color:gray">=</span> <span style="Color:gray">"Text"</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>strText<span style="Color:gray">)</span> <span style="Color:green">' 8 (immer noch Zeichenkette)</span> | |||
strText <span style="Color:gray">=</span> <span style="Color:gray">15</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>strText<span style="Color:gray">)</span> <span style="Color:green">' 8 (die Ganzzahl wurde automatisch in eine Zeichenkette umgewandelt!)</span> | |||
== Vorteile des Variant == | == Vorteile des Variant == | ||
Wenn Sie bei einem Übergabeparameter wahlweise eine Zahl oder eine Zeichenkette erwarten (wie etwa die 'Item'-Funktion einer Auflistung), bietet sich der Datentyp 'Variant' an. Bei der Übergabe des Indexes (also einer Zahl) oder des Namens (also einer Zeichenkette) weist VBA der Variablen automatisch den passenden Datentyp zu: Dim varTest As Variant Debug.Print VarType(varTest) ' 0 vbEmpty varTest = "Hallo!" Debug.Print VarType(varTest) ' 8 vbString varTest = 12 Debug.Print VarType(varTest) ' 2 vbInteger | Wenn Sie bei einem Übergabeparameter wahlweise eine Zahl oder eine Zeichenkette erwarten (wie etwa die 'Item'-Funktion einer Auflistung), bietet sich der Datentyp 'Variant' an. | ||
Bei der Übergabe des Indexes (also einer Zahl) oder des Namens (also einer Zeichenkette) weist VBA der Variablen automatisch den passenden Datentyp zu: | |||
<span style="Color:blue">Dim </span>varTest<span style="Color:blue"> As Variant </span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>varTest<span style="Color:gray">)</span> <span style="Color:green">' 0 vbEmpty </span> | |||
varTest <span style="Color:gray">=</span> <span style="Color:gray">"Hallo!"</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>varTest<span style="Color:gray">)</span> <span style="Color:green">' 8 vbString </span> | |||
varTest <span style="Color:gray">=</span> <span style="Color:gray">12</span> | |||
Debug<span style="Color:gray">.</span>Print VarType<span style="Color:gray">(</span>varTest<span style="Color:gray">)</span> <span style="Color:green">' 2 vbInteger</span> | |||
== Nachteile des Variant == | == Nachteile des Variant == | ||
Da kein fester Datentyp vorgegeben ist, erfolgt keine Prüfung, ob der zugewiesene Wert dem erwarteten Datentyp entspricht bzw. wird nicht bei der Zuweisung schon eine Umwandlung in den passenden Datentyp versucht. Diese erfolgt gegebenenfalls erst, wenn die Werte weiter verarbeitet wird: Dim varTest As Variant varTest = 12 Debug.Print varTest / 4 ' 3 varTest = "Max" Debug.Print varTest / 4 ' Fehler! Im Vergleich (der Fehler tritt schon bei der Zuweisung auf): Dim lngTest As Long lngTest = 12 Debug.Print lngTest / 4 ' 3 lngTest = "Max" ' Fehler! Debug.Print | Da kein fester Datentyp vorgegeben ist, erfolgt keine Prüfung, ob der zugewiesene Wert dem erwarteten Datentyp entspricht bzw. wird nicht bei der Zuweisung schon eine Umwandlung in den passenden Datentyp versucht. | ||
Diese erfolgt gegebenenfalls erst, wenn die Werte weiter verarbeitet wird: | |||
<span style="Color:blue">Dim </span>varTest<span style="Color:blue"> As Variant</span> | |||
varTest <span style="Color:gray">=</span> <span style="Color:gray">12</span> | |||
Debug<span style="Color:gray">.</span>Print varTest <span style="Color:gray">/</span> <span style="Color:gray">4</span> <span style="Color:green">' 3</span> | |||
varTest <span style="Color:gray">=</span> <span style="Color:gray">"Max"</span> | |||
Debug<span style="Color:gray">.</span>Print varTest <span style="Color:gray">/</span> <span style="Color:gray">4</span> <span style="Color:green">' Fehler bei der Verwendung der Werte!</span> | |||
Im Vergleich (der Fehler tritt schon bei der Zuweisung auf): | |||
<span style="Color:blue">Dim </span>lngTest<span style="Color:blue"> As Long</span> | |||
lngTest <span style="Color:gray">=</span> <span style="Color:gray">12</span> | |||
Debug<span style="Color:gray">.</span>Print lngTest <span style="Color:gray">/</span> <span style="Color:gray">4</span> <span style="Color:green">' 3</span> | |||
lngTest <span style="Color:gray">=</span> <span style="Color:gray">"Max"</span> <span style="Color:green">' Fehler bei der Zuweisung!</span> | |||
<span style="Color:green">' Diese Zeile würde selbstverständlich auch einen Fehler erzeugen, aber er ist schon bei der Zuweisung aufgefallen:</span> | |||
Debug<span style="Color:gray">.</span>Print varTest <span style="Color:gray">/</span> <span style="Color:gray">4</span> |
Version vom 21. Juni 2019, 17:34 Uhr
Eine als Variant deklarierte Variable kann einen beliebigen Wert entgegennehmen, inklusive einer Objektreferenz.
Wenn Sie bei der Deklaration einer Variablen keinen Datentyp angeben, verwendet VBA automatisch den Datentyp Variant:
Dim strText Debug.Print VarType(strText) ' 0 (Empty, Variant-Variable wurde noch nicht verwendet) strText = "Text" Debug.Print VarType(strText) ' 8 (Zeichenkette) strText = 15 Debug.Print VarType(strText) ' 2 (Integer)
Zum Vergleich:
Dim strText As String Debug.Print VarType(strText) ' 8 (von Anfang an Zeichenkette) strText = "Text" Debug.Print VarType(strText) ' 8 (immer noch Zeichenkette) strText = 15 Debug.Print VarType(strText) ' 8 (die Ganzzahl wurde automatisch in eine Zeichenkette umgewandelt!)
Vorteile des Variant
Wenn Sie bei einem Übergabeparameter wahlweise eine Zahl oder eine Zeichenkette erwarten (wie etwa die 'Item'-Funktion einer Auflistung), bietet sich der Datentyp 'Variant' an.
Bei der Übergabe des Indexes (also einer Zahl) oder des Namens (also einer Zeichenkette) weist VBA der Variablen automatisch den passenden Datentyp zu:
Dim varTest As Variant Debug.Print VarType(varTest) ' 0 vbEmpty varTest = "Hallo!" Debug.Print VarType(varTest) ' 8 vbString varTest = 12 Debug.Print VarType(varTest) ' 2 vbInteger
Nachteile des Variant
Da kein fester Datentyp vorgegeben ist, erfolgt keine Prüfung, ob der zugewiesene Wert dem erwarteten Datentyp entspricht bzw. wird nicht bei der Zuweisung schon eine Umwandlung in den passenden Datentyp versucht.
Diese erfolgt gegebenenfalls erst, wenn die Werte weiter verarbeitet wird:
Dim varTest As Variant varTest = 12 Debug.Print varTest / 4 ' 3 varTest = "Max" Debug.Print varTest / 4 ' Fehler bei der Verwendung der Werte!
Im Vergleich (der Fehler tritt schon bei der Zuweisung auf):
Dim lngTest As Long lngTest = 12 Debug.Print lngTest / 4 ' 3 lngTest = "Max" ' Fehler bei der Zuweisung!
' Diese Zeile würde selbstverständlich auch einen Fehler erzeugen, aber er ist schon bei der Zuweisung aufgefallen: Debug.Print varTest / 4