Access Anfänger: Tipps zur Variablendeklaration

Aus DBWiki
Wechseln zu: Navigation, Suche

Beschreibung

Gerade bei der Verwendung und Deklaration von Variablen machen Anfänger oft Fehler, und gewöhnen sich an einen Programmierstil, der zwar scheinbar funktioniert, aber inhärente Fehlerquellen und Unsauberkeiten beinhaltet, die oft erst wesentlich später und an anderer Stelle auftreten.

Alle Variablen deklarieren

Alle Variablen sollten explizit deklariert werden. Um dies zu erzwingen und Kompilationsfehler zu vermeiden, muss im Deklarationsteil jedes Moduls (gleich, ob Klassenmodul oder normales Modul) stehen:

Option Explicit

Man errreicht den automatischen Eintrag dieser Deklarationsvorschrift über das Menü Extras/Optionen im VBA-Editor. Es muss hier das Kontrollkästchen Variablendeklaration erforderlich auf der Registerkarte Editor gesetzt werden, da dieses nach der Installation von Access standardmäßig nicht angekreuzt ist.

Wird danach ein neues Modul angelegt, steht im Modulkopf automatisch:

Option Compare Database
Option Explicit

Gelegentlich wird die Deklarationsvorschrift aber auch versehentlich gelöscht, daher gilt: Überprüfen, ob in allen Modulen Option Explicit im Modulkopf vorhanden ist, und anschließend das gesamte Projekt kompilieren (Debuggen - Kompilieren von ...).

Formular- oder Berichtsobjekte in VBA referenzieren

Man kann sich im Code eines Klassenmoduls auf Felder der Datensatzquelle und auf Steuerelemente der Klasse mit einfachen Bezeichnern (analog zu Variablennamen) beziehen. Üblicher und lesbarer ist es jedoch, eine Referenz auf die Instanz des Objekts über das VBA-Schlüsselwort Me herzustellen:

   ' besser als
   Formularfeld = "MeinWert"
 
   ' ist
   Me.Formularfeld = "MeinWert"
 
   ' oder noch etwas verständlicher, aber dafür auch etwas länger
   Me.Formularfeld.Value = "MeinWert"

Datentypen richtig deklarieren

Häufig sieht man bei Anfängern (gerade solchen, die von anderen Programmiersprachen kommen) Deklarationen der folgenden Art:

   Dim lngCnt, lngTest As Long
   Dim strTmp, strTmp1 As String

Damit wird jedoch nur lngTest als Long und nur strTmp1 als String deklariert. lngCnt und strTmp sind vom Standard-Datentyp Variant, weil eine Datentypangabe hinter der Variablen fehlt.

Richtig im Sinne von "Beide Variablen der Deklarationszeile sollen denselben Datentyp erhalten" wäre dann:

   Dim lngCnt As Long, lngTest As Long
   Dim strTmp As String, strTmp1 As String
 
   'oder noch besser lesbar
   Dim lngCnt  As Long
   Dim lngTest As Long
   Dim strTmp  As String
   Dim strTmp1 As String

Passende Datentypen verwenden

Nach Möglichkeit sollte man Variablen nicht unnötig As Variant, sondern mit einem passenden Datentyp deklarieren. Das kann allerdings bei der Verwendung von Tabellen- bzw. Formularfeldern zu Problemen führen, weil diese Null-Werte annehmen können. Der einzige Datentyp, der in VBA jedoch mit Null umgehen kann, ist Variant. Daher muss man in einem solchen Fall entweder vorher in geeigneter Weise konvertieren (typischerweise mit der Nz()-Funktion), oder den Null-Fall separat abhandeln.

Ebenso sollte darauf geachtet werden, dass Variablen einerseits zwar passend (z.B. wenn es um ganze Zahlen geht, mit einem ganzzahligen Datentyp) deklariert werden, andererseits der Wertebereich nicht überläuft (siehe dazu den ausführlicheren Artikel Niemals Datentyp Integer verwenden).

Deklarationen im Prozedurkopf

Variablen sollten möglichst im Kopfbereich einer Prozedur deklariert, und nötigenfalls auch kommentiert werden. Das hält den Code übersichtlich. Ausnahmen, die bekanntlich ja eine Regel bestätigen, sind erlaubt, wenn es dem Verständnis dient. Das gilt besonders für längeren Code, der jedoch auch eine Ausnahme darstellen sollte.

Wikilinks


Wiki faq.png FAQ: Dieser Artikel gehört zu den "Häufig gestellten Fragen" (FAQ). Die Seite Access-FAQ bietet eine Übersicht aller FAQ-Artikel.