window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Datentypen konvertieren unter VBA

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Ohne Variablen kommt fast keine Programmiersprache aus. Variablen wiederum sind an bestimmte Datentypen gebunden, die die Programmiersprache vorgibt. Die Anforderung, den Wert einer Variablen in den einer anderen Variablen unterschiedlichen Typs zu überführen, stellt sich über die Parameter von Funktionen häufig. Was es dabei zu beachten gibt, beleuchten wir in diesem Beitrag.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1506_Konvertierungen.accdb

Datentypen unter VBA

Imgrunde müssten Sie sich unter VBA keine Gedanken über Dateitypen machen. Denn der Standarddatentyp ist hier der Variant. Wenn in den Modulen Ihrer Datenbank kein Option Explicit im Modulkopf steht, so nimmt VBA für jede Variable automatisch an, dass es sich um einen Variant handelt. Sie brauchen die Variablen dann weder über Dim-Anweisungen zu deklarieren, noch ihren Datentyp vorzubestimmen. VBA versucht dann intern selbst, den Datentyp zu erraten. Denn ein Variant ist natürlich kein wirklicher Datentyp, sondern eine Kapselung von allen erdenklichen Typen. Ob Text, Zahl, Datum oder Objekt, alle können im Variant unterkommen, ohne dass dem Programmierer bewusst wird, was hier im Hintergrund geschieht.

VBA leitet aus der Wertzuweisung ab, um welchen Typ es sich handeln dürfte. Bei

sText = "ACCESS BASICS"

ist durch die Anführungszeichen deutlich gemacht, dass es sich um einen String handelt. VBA speichert den Text nun als Variant, der intern ein Kennzeichen enthält, welches mit dem Marker für einen String versehen wird. Die eigentlichen Daten werden je nach Typ in einer bestimmten Datenstruktur abgelegt, über die man ebenfalls nichts erfährt. Ein Zeiger auf die Struktur macht den Variant vollständig.

Nicht immer ist die Sache jedoch so eindeutig. Nehmen Sie etwa diese Wertzuweisung:

Dim A As Variant
A = 123

Was nimmt VBA hier als Datentyp an Dass es sich um eine Zahl handelt, ist nicht schwer zu erraten. Doch liegt hier ein Long-Wert vor, ein Integer, oder ein Double-Wert

Sie sind nicht auf Spekulationen angewiesen, denn die Funktion TypeName von VBA kann Auskunft darüber geben, wie VBA die Variable sieht:

Debug.Print TypeName ( A)
> "Integer"

Hoffentlich liegt es hier richtig! Denn folgende Formel könnte zu einem Fehler wegen überlaufs führen:

A = A * A * A 
Debug.Print A, TypeName(A)

Eine Fehlermeldung tritt jedoch nicht auf. Das Ergebnis wird korrekt angezeigt, und der Datentyp ist auf Long gewechselt. ähnlich verhält es sich mit

Debug.Print TypeName (A / 3)
> "Double"

Aber auch dies ist möglich:

A = "123"
Debug.Print TypeName (A)
A = A / 3
Debug.Print TypeName (A)
> "String"
  "Double"

Obwohl hier VBA zunächst einen String annimmt, stolpert es im nächsten Schritt über den Teilungsoperator und verwandelt deshalb schnell den Datentyp in Double, um die Berechnung durchführen zu können.

Anderes Beispiel:

A = 123
Debug.Print TypeName(A)
A = A & "ACCESS"
Debug.Print A, TypeName(A)
> "Integer"
  "String"

Durch den Verknüpfungsoperator & für Strings errät VBA, dass das Ergebnis ebenfalls ein String sein muss, weshalb der Wert der Integer-Variablen A intern zunächst in einen String umgewandelt und schließlich der hartkodierte Text angefügt wird.

VBA scheint also ziemlich intelligent zu sein, wenn es um das Erraten der benötigten Datentypen geht. Das geht auch solange gut, wie Sie lediglich die VBA-Bibliothek selbst benutzen. Sobald Sie aber auch andere Bibliotheken verwenden, etwa die Datenzugriffsbibliothek DAO, ist VBA häufig überfordert.

Denn bei der Zuweisung eines Variablenwerts etwa zum Feldinhalt einer Tabelle weiß VBA unter Umständen nichts über den Datentyp, den Sie beim Entwurf der Tabelle für das Feld vorsahen. Hier kann es zu Fehlern wegen nicht übereinstimmender Datentypen kommen, oder zu Fehlern durch überläufe.

Option Explicit

Um solche undurchsichtigen Fehler zu vermeiden, setzen Sie besser in den Modulkopf jedes Ihrer Module ein Option Explicit. Das weist VBA an, jede im Programmcode auftauchende Variable zu überprüfen und deren Deklaration zu suchen. Findet es keine, so tritt beim Kompilieren eine entsprechende Fehlermeldung auf. Das manuelle Einsetzen der Option-Explicit-Anweisung können Sie sich sparen, wenn Sie in den Optionen von VBA (Menü Extras) den Eintrag Variablendeklaration erforderlich aktivieren (siehe Bild 1). Dann nämlich setzt VBA beim Neuanlegen eines Moduls die Anweisung automatisch in den Modulkopf.

Optionen von VBA: Einschalten der Notwendigkeit für Variablendatentypen

Bild 1: Optionen von VBA: Einschalten der Notwendigkeit für Variablendatentypen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar