Variant: Unterschied zwischen den Versionen

Aus VBA-wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:vba-wiki]]
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.  


Zeile 21: Zeile 22:
== 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.  
Wenn Sie zum Beispiel 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:  
Bei der Übergabe des Indexes (also einer Zahl) oder des Namens (also einer Zeichenkette) weist VBA der Variablen automatisch den passenden Datentyp zu:  
Zeile 44: Zeile 45:
  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>
  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>
  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>
  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: Max kann nicht gevierteilt werden!</span>


Im Vergleich (der Fehler tritt schon bei der Zuweisung auf):  
Im Vergleich (der Fehler tritt schon bei der Zuweisung auf):  
Zeile 52: Zeile 53:
  lngTest <span style="Color:gray">=</span> <span style="Color:gray">12</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>
  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>
  lngTest <span style="Color:gray">=</span> <span style="Color:gray">"Max"</span>               <span style="Color:green">' Fehler schon bei der Zuweisung: Max ist keine Zahl!</span>
 
  <span style="Color:green">' Diese Zeile würde selbstverständlich auch einen Fehler erzeugen, aber er ist schon bei der Zuweisung aufgefallen:</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>
  Debug<span style="Color:gray">.</span>Print varTest <span style="Color:gray">/</span> <span style="Color:gray">4</span>

Aktuelle Version vom 28. Januar 2023, 00:40 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 zum Beispiel 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: Max kann nicht gevierteilt werden!

Im Vergleich (der Fehler tritt schon bei der Zuweisung auf):

Dim lngTest As Long

lngTest = 12
Debug.Print lngTest / 4 ' 3
lngTest = "Max"                ' Fehler schon bei der Zuweisung: Max ist keine Zahl!

' Diese Zeile würde selbstverständlich auch einen Fehler erzeugen, aber er ist schon bei der Zuweisung aufgefallen:
Debug.Print varTest / 4