Lösungen

Die Eval-Funktion richtig nutzen

Funktionen und Methoden

Neben einfachen mathematischen Berechnungen kann die Eval-Funktion aber auch Funktionen und sogar Eigenschaften und Methoden auswerten und Zeichenkettenoperationen durchführen. Generell gilt dabei, dass Sie Zeichenketten, die nicht ausgewertet, sondern als Zeichenkette verwendet werden sollen, in Hochkommata einfassen müssen. Die Prozedur in Listing 2 zeigt, wie Sie nacheinander die Access-Version, den Datenbanknamen und den Datenbankpfad ausgeben.

Sub FunktionenMethoden()
Dim strFormel As String
strFormel = "'Access-Version: ' & application.version"
Debug.Print Eval(strFormel)
strFormel = "'Datenbankname: ' & Application.CurrentDb.Name"
Debug.Print Eval(strFormel)
strFormel = "'Datenbankpfad: ' & getPfad1()"
Debug.Print Eval(strFormel)
End Sub
Function getPfad1() As String
getPfad1 = Left(CurrentDb.Name, _
Len(CurrentDb.Name) - _
Len(Dir(CurrentDb.Name)))
End Function

Der Datenbankpfad wird hier über die benutzerdefinierte Funktion getPfad1 ermittelt. Sie sehen daran, dass auch benutzerdefinierte Funktionen möglich sind, solange sie innerhalb eines normalen Moduls und nicht in einem Klassenmodul definiert sind.

Allerdings gibt es ein paar Einschränkungen. Sie können nur die Methoden und Eigenschaften verwenden, die VBA kennt. Das sind also alle Eigenschaften und Methoden des Access-Objektmodells, die zu Objekten gehören, die Access automatisch erzeugt. Es ist nämlich nicht möglich, Objektvariablen zu verwenden. Daher scheitert auch der Code in Listing 3, der zunächst eine Objektvariable erzeugt und dieser einen Verweis auf die aktuelle Datenbank zuweist. Der direkte Zugriff auf den Datenbanknamen über Application.CurrentDB.Name (Listing 2) funktioniert hingegen.

Sub FunktionenMethoden()
Dim strFormel As String
Dim objDB As DAO.Database
Set objDB = Application.CurrentDb
strFormel = "'Datenbankname:' & objDB.Name"
Debug.Print Eval(strFormel)
End Sub