Typwandlungen in VBA
Eine Typwandlung ordnet einem Wert eines Datentyps einen Wert eines anderen Datentyps zu. Die Wandlung ist in gewissem Sinne willkürlich, aber sie soll die Erwartungen, den Wert beizubehalten und nur seine Typ zu ändern, so weit wie möglich erfüllen. Beispielsweise würde man als Wandlung des Wertes »5%« (»5«) vom Typ »Integer« in den Typ »Double« den Wert »5#« (»5.0«) erwarten.
Ein Wert der in einen anderen Datentyp gewandelt wurde soll bei der Rückwandlung in den ursprünglichen Datentyp möglichst wieder den ursprünglichen Wert ergeben. Beispielsweise würde man nach einer Wandlung des Wertes »5%« in den Wert »5#« als Ergebnis der Rückwandlung wieder den Wert »5%« (»5«) erwarten.
Typisch für alle Funktionen zur Typwandlung ist es, daß sie genau ein Argument akzeptieren und ein Ergebnis liefern.
Explizite Typwandlungen erfolgen durch Aufruf speziell dafür gedachter Funktionen und könnten in einem Quelltext besser verständlich sein als stillschweigende Typwandlungen und es verständlich machen, daß eine bestimmte Typwandlung vom Programmierer wirklich beabsichtigt ist.
»VBA.Conversion.CInt«
Eine Gleitkommazahl kann durch eine explizite Typwandlung mit der Funktion »VBA.Conversion.CInt« in eine ganze Zahl umgewandelt werden.
- Proklamation von »VBA.Conversion.CInt«
Function CInt(Expression) As Integer
Element von VBA.Conversion- Direktbereich
? VBA.Conversion.CInt( 3.2 )
3
- Direktbereich
? VBA.Information.TypeName( VBA.Conversion.CInt( 2.0 ))
Integer
Bei der Umwandlung wird gerundet. Bei ».5« wird dabei aufgerundet, wenn die Zahl vor dem Komma ungerade ist.
- Direktbereich
? VBA.Conversion.CInt( 0.5 )
0
? VBA.Conversion.CInt( 0.50000000000001 )
1
? VBA.Conversion.CInt( 0.6 )
1
? VBA.Conversion.CInt( 1.5 )
2
? VBA.Conversion.CInt( 2.5 )
2
? VBA.Conversion.CInt( 3.5 )
4
Entsprechend bei negativen Zahlen :
- Direktbereich
? VBA.Conversion.CInt( -2.1 )
-2
? VBA.Conversion.CInt( -2.9 )
-3
? VBA.Conversion.CInt( -2.5 )
-2
? VBA.Conversion.CInt( -3.5 )
-4
Auch eine Zeichenfolge kann nach »Integer« gewandelt werden. Dabei wird das Dezimaltrennzeichen der Umgebung (Windows -Systemsteuerung) verwendet, also beispielsweise ein Komma »,«, wenn dieses mit den Mitteln des Betriebssystems als Dezimaltrennzeichen eingestellt wurde.
- Direktbereich (deutsch: das Dezimaltrennzeichen der Umgebung ist »,«, das Tausendertrennzeichen der Umgebung ist ».«)
? VBA.Conversion.CInt( "1.5" )
15
? VBA.Conversion.CInt( "1,5" )
2
- Direktbereich (englisch: das Dezimaltrennzeichen der Umgebung ist ».«, das Tausendertrennzeichen der Umgebung ist »,«)
? VBA.Conversion.CInt( "1.5" )
2
? VBA.Conversion.CInt( "1,5" )
15
Zeitpunkte werden – mit einer gewissen Rundung – in die Tage gewandelt, die seit dem 30. Dezember 1899 vergangen sind. Dabei sind Wandlungen nur bis zum größten Integer-Wert «32767» möglich.
- Wandlung eines Zeitpunktes
? VBA.Conversion.CInt( #1899-12-30 00:00:00# )
0
? VBA.Conversion.CInt( #1899-12-30 12:00:01# )
1
? VBA.Conversion.CInt( #1989-09-16 11:59:59# )
32767
»VBA.Conversion.CDbl«
Mit »VBA.Conversion.CDbl« (convert to double ) kann in den Datentyp »Double« gewandelt werden.
- Proklamation von »VBA.Conversion.CDbl«
Function CDbl(Expression) As Double
Element von VBA.Conversion- Direktbereich
? VBA.Conversion.CDbl( 4 )
4
? VBA.Information.TypeName( 4 )
Integer
? VBA.Information.TypeName( VBA.Conversion.CDbl( 4 ))
Double
Auch diese Funktion akzeptiert auch Zeichenfolgen und interpretiert Dezimal- und Tausendertrennzeichen so, wie diese in der Umgebung (Windows -Systemsteuerung) festgelegt wurden.
- Direktbereich (deutsch: das Dezimaltrennzeichen der Umgebung ist »,«, das Tausendertrennzeichen der Umgebung ist ».«)
? VBA.Conversion.CDbl( "123,35" )
123.35
? VBA.Conversion.CDbl( "123.35" )
12335
- Direktbereich (englisch: das Dezimaltrennzeichen der Umgebung ist ».«, das Tausendertrennzeichen der Umgebung ist »,«)
? VBA.Conversion.CDbl( "123.35" )
123.35
? VBA.Conversion.CDbl( "123,35" )
12335
Bei der Wandlung eines Zeitpunkts in eine Zahl entsprechen die Vorkommstellen ganzen Tagen und die Nachkommastellen der Uhrzeit.
- Wandlung eines Zeitpunktes
? VBA.Conversion.CDbl( #2052-01-17 13:07:22# )
55535.5467824074
»VBA.Conversion.CStr«
Mit »VBA.Conversion.CStr« (convert to string ) kann in den Datentyp »String« gewandelt werden.
- Proklamation von »VBA.Conversion.CStr«
Function CDbl(Expression) As String
Element von VBA.Conversion- Direktbereich (englisch: das Dezimaltrennzeichen der Umgebung ist ».«)
? VBA.Conversion.CStr( 4 )
4
? VBA.Conversion.CStr( -4 )
-4
? VBA.Conversion.CStr( 4.1 )
4.1
? VBA.Conversion.CStr( -4.1 )
-4.1
? VBA.Conversion.CStr( 4001 )
4001
? VBA.Conversion.CStr( 4001.2 )
4001.2
Auch diese Funktion verwendet das Dezimaltrennzeichen so, wie diese in der Umgebung (Windows -Systemsteuerung) festgelegt wurden.
- Direktbereich (deutsch: das Dezimaltrennzeichen der Umgebung ist »,«)
? VBA.Conversion.CStr( 4 )
4
? VBA.Conversion.CStr( -4 )
-4
? VBA.Conversion.CStr( 4.1 )
4,1
? VBA.Conversion.CStr( -4.1 )
-4,1
? VBA.Conversion.CStr( 4001 )
4001
? VBA.Conversion.CStr( 4001.2 )
4001,2
- Wandlung eines Zeitpunktes
? VBA.Conversion.CStr( #2052-01-17 13:07:22# )
2052-01-17 13:07:22
Man beachte, daß die Format-Funktion weitere Möglichkeiten zur Wandlung eines Zeitpunktes in eine Zeichenfolge bietet. Wir beschreiben hier keine Details, sondern geben nur ein Beispiel.
- Formatierung eines Zeitpunktes
? Format( #2052-01-17 13:07:22#, "dddd, d. MMM yyyy" )
Wednesday, 17. Jan 2052
»VBA.Conversion.CDate«
Ein Datum kann mit der Nummerzeichennotation, wie »#2032-08-14#« direkt im Quelltext ausgedrückt werden. Manchmal steht ein Datum aber nur als Zahl oder als Zeichenfolge zur Verfügung. In solchen Fällen kann es mit »VBA.Conversion.CDate« in einen Wert des Typs »Date« gewandelt werden.
- Wandlung aus einer Zeichenfolge
? VBA.Conversion.CDate( "2052-01-17 13:07:22" )
2052-01-17 13:07:22
- Wandlung aus einer ganzen Zahl
? VBA.Conversion.CDate( 32767 )
1989-09-16
- Wandlung aus einer Gleitkommazahl
? VBA.Conversion.CDate( 55535.5467824074 )
2052-01-17 13:07:22
Der 16. September 1989 ⃗
An diesem Tag geschah nichts besonders Aufregendes. Man findet noch:
In Großbritannien notierte der “New Musical Express ” Madonna's Single “Cherish ” erstmals als Neueinsteiger auf Platz 15.