|
1.16 VBA
1.16.1 TempVars
TempVars sind eine Neuerung, die VBA mit Makros verbindet. TempVars ist eine Auflistung, die eines oder mehrere TempVar-Elemente enthält, die - wie der Name schon sagt - Variablen repräsentieren. An folgenden Codebeispielen lässt sich am einfachsten zeigen, was man damit machen kann - die erste Funktion legt eine Variable unter einem bestimmten Namen an, die zweite fragt den Wert einer Variablen ab:
Function SetVar(VarName As String, AValue As Variant) TempVars.Add VarName, AValue End Function
Listing 1.1: Hinzufügen einer temporären Variablen mit dem Namen VarName und dem Wert AValue
Function Getvar(VarName As String) As Variant Getvar = TempVarsVarName) End Function
Listing 1.2: Auslesen der temporären Variablen mit dem Namen VarName
Die TempVars-Auflistung lässt sich mit For Each durchlaufen, um alle enthaltenen Variablen samt Inhalt auszugeben. Interessant ist die TempVars-Auflistung für den Einsatz von Makros. Hier stehen die Makro-Aktionen EntfernenAlleTempvar, EntfernenTempVar und FestlegenTempVar zur Verfügung, um Elemente zur TempVarsAuflistung hinzuzufügen oder zu entfernen. Mit [TempVars]![Variablenname] greifen Sie in VBA und in Makros auf die in der TempVars-Auflistung gespeicherten Werte zu.
Wirklich interessant ist aber, dass TempVars ihren Inhalt auch beim Auftreten von Laufzeitfehlern nicht verlieren und sich leicht serialisieren lassen. Dazu noch drei kleine Beispielcodes:
Function SerializeTempVars(Optional sFile As String, _ Optional bAdd As Boolean) As Boolean
Dim vTmp As TempVar Dim F As Integer
On Error GoTo ErrHandler
If TempVars.Count > 0 Then
If Len(sFile) = 0 Then sFile = CurrentProject.path & „\Tempvars.dat" SetAttr sFile, vbNormal F = FreeFile DoEvents If bAdd Then Open sFile For Append As F Else Open sFile For Output As F End If For Each vTmp In TempVars Write #F, vTmp.name Write #F, vTmp.value Next vTmp Close F DoEvents SetAttr sFile, vbHidden Or vbReadOnly Or vbSystem End If
SerializeTempVars = True Exit Function
ErrHandler: Msgbox Err.Description, vbCritical Reset End Function
Function DeSerializeTempVars (Optional sFile As String, Optional bClear _ As Boolean) As Boolean Dim vTmp As Variant Dim sName As String Dim F As Integer
On Error GoTo ErrHandler If Len(sFile) = 0 Then sFile = CurrentProject.path & „\TempVars.dat" F = FreeFile Open sFile For Input As F If bClear Then TempVars.RemoveAll Do While Not EOF(F) Input #F, sName Input #F, vTmp TempVars.Add sName, vTmp Loop Close F
DeSerializeTempVars = True Exit Function
ErrHandler: Msgbox Err.Description, vbCritical
End Function
Function ListVars() As String() Dim vVar As TempVar Dim arrVars() As String Dim i As Long ReDim arrVars(TempVars.Count-1) For Each vVar In TempVars Debug.Print vVar.name arrVars(i) = vVar.name i = i + 1 Next vVar ListVars = arrVars Set vVar = Nothing Erase arrVars End Function
Listing 1.3 Beispiele für das Speichern, Einlesen und Ausgeben von TempVars
Nächster Abschnitt:
1.16.2 VBA in Formularen, Steuerelementen, Berichten und DAO
|