TempVars unter VBA

Im Artikel Programmieren mit Makros haben Sie bereits die so genannten temporären Variablen, auch TempVars genannt, kennen gelernt. Im vorliegenden Artikel vertiefen wir dieses Thema und schauen uns vor allem an, wie Sie die TempVars unter VBA nutzen und wie Sie damit die Verbindung zwischen VBA und Makros herstellen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1405_Tempvars.accdb.

Voraussetzungen

TempVars wurden erst mit Access 2007 eingeführt. Dementsprechend können Sie als Nutzer von Access 2003 und älter nicht auf dieses Feature zugreifen.

Temporäre Variablen

Temporäre Variablen sind eigentlich ein Sonderfall des Collection-Objekts.Die Unterschiede sind, dass Sie dieses Objekt nicht erst wie ein Collection-Objekt deklarieren und instanzieren müssen, sondern dass es immer und überall bereitsteht.

Warum nun sollte ich einen Wert in einer temporären Variablen speichern und nicht in einer herkömmlichen Variablen

Dafür gibt es gleich mehrere Gründe:

  • Temporäre Variablen werden im Gegensatz zu herkömmlichen Variablen im Falle eines Laufzeitfehlers nicht gelöscht – ein Beispiel folgt später. Sie werden erst beim Schließen der Access-Datei gelöscht (sofern Sie dies nicht vorher per Makro oder Code erledigt haben).
  • Temporäre Variablen können Sie sowohl von VBA als auch von Makros aus nutzen.

Temporäre Variablen nehmen Variablen des Typs Variant auf, also auch Strings, Zahlen et cetera, aber keine Objekte.

Temporäre Variablen im Makros

Schauen wir kurz auf die Verwendung von temporären Variablen in Makros. Diese legen Sie wie in mit dem Makrobefehl FestlegenTempVar fest (siehe Bild 1). In diesem Fall heißt die Variable AktuelleAusgabe und wird mit dem Wert 5/2014 gefüllt.

Festlegen einer temporären Variablen per Makro

Bild 1: Festlegen einer temporären Variablen per Makro

Das Makro macAktuelleAusgabeAusgeben sieht wie in Bild 2 aus und gibt den Inhalt der temporären Variablen in einem Meldungsfenster aus.

Ausgabe des Inhalts der temporären Variablen

Bild 2: Ausgabe des Inhalts der temporären Variablen

Das Ergebnis ist das Meldungsfenster aus Bild 3. Der Wert des Ausdrucks [TempVar]![AktuelleAusgabe] erscheint als Teil der auszugebenden Zeichenkette. Wichtig: Der Zugriff auf die Elemente der TempVar-Auflistung (die hier unsinnigerweise im Singular anzugeben ist) erfolgt über die Ausrufezeichen-Syntax.

Per Makro angezeigtes Meldungsfenster mit dem Inhalt einer temporären Variablen

Bild 3: Per Makro angezeigtes Meldungsfenster mit dem Inhalt einer temporären Variablen

Temporäre Variable per VBA festlegen

Wenn Sie eine temporäre Variable per VBA festlegen möchten, erledigne Sie dies interessanterweise nicht mit einer der Methoden des DoCmd-Objekts, welches ja fast alle in Makros verwendeten Befehle anbietet.

Stattdessen nutzen Sie direkt die TempVars-Auflistung, in diesem Fall die Add-Methode dieser Auflistung:

TempVars.Add   "AktuelleAusgabe", "5/2014"

Eine auf diese Weise festgelegte Variable können Sie auch mit dem soeben definierten Makro macAktuelleAusgabeAusgeben anzeigen. Damit ist schon einmal sichergestellt, dass Makros und VBA auf die gleichen temporären Variablen zugreifen.

Per VBA auf eine temporäre Variable zugreifen

Wenn Sie von VBA aus den Wert einer temporären Variablen zugreifen möchten, verwenden Sie die Item-Eigenschaft der TempVars-Auflistung und übergeben dieser den Namen der benötigten temporären Variablen:

MsgBox "Die aktuelle Ausgabe heißt "      & TempVars.Item("AktuelleAusgabe")

Das Ergebnis sieht nun genauso aus wie beim Aufruf des Makros macAktuelleAusgabeAusgeben.

Es gibt noch einen weiteren Weg, auf die Inhalte des TempVars-Objekts zuzugreifen – und zwar, indem Sie einfach direkt den Namen der Variablen angeben:

MsgBox "Die aktuelle Ausgabe heißt "           & TempVars("AktuelleAusgabe")

Die nächste Variante ist der Zugriff über den numerischen Index:

MsgBox "Inhalt der ersten TempVar: "                           & TempVars(0)

Damit greifen Sie aber natürlich nicht mehr gezielt auf eine benannte temporäre Variable zu.

Es gibt einen wichtigen Unterschied beim Zugriff über den Namen der Variablen und über den Index: Wenn Sie über den Namen auf die temporäre Variable zugreifen, wird schlicht eine leere Zeichenfolge zurückgegeben. Wenn Sie es über den Index versuchen und für den Index keine Variable hinterlegt ist, löst dies einen Fehler aus (Fehler 2467, In dem von Ihnen eingegebenen Ausdruck wird auf ein Objekt verwiesen, das geschlossen oder nicht vorhanden ist).

Wert einer temporären Variablen ändern

Den Wert einer temporären Variablen ändern Sie auf zwei Arten – entweder durch direkte Zuweisung oder indem Sie die Variable einfach mit der Add-Methode neu erstellen. Die erste Version sieht so aus:

TempVars("AktuelleAusgabe") = "6/2014"

Oder so:

TempVars(0) = "6/2014"

Beim überschreiben verwenden Sie diesen Befehl:

TempVars.Add("AktuelleAusgabe")                                 "6/2014"

Wichtig: Nicht nur die letztere Variante legt eine neue temporäre Variable an, wenn diese noch nicht vorhanden ist – auch die einfache Zuweisung erzeugt gegebenenfalls eine neue temporäre Variable.

Alle TempVars durchlaufen

Die einfachste Möglichkeit, die Werte aller temporären Variablen auszugeben, ist das Durchlaufen aller TempVars in einer For Each-Schleife. Dabei verwenden wir eine Variable des Typs TempVar, um die aktuelle temporäre Variable zu referenzieren. Die Prozedur aus Listing 1 zeigt, wie dies funktioniert.

Public Sub AlleTempVarsAusgeben()
     Dim objTempVar As TempVar
     For Each objTempVar In TempVars
         MsgBox "Name: " & objTempVar.Name & vbCrLf & "Wert: " & objTempVar.Value
     Next objTempVar
End Sub

Listing 1: Ausgeben aller temporären Variablen und ihrer Werte

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar