Das Application-Objekt

Eines der wichtigsten Objekte bei der Programmierung von Access-Anwendungen ist das Application-Objekt. Es bietet viele Eigenschaften und Methoden, die stiefmütterlich behandelt werden. Dabei lohnt es sich, einmal einen Blick darauf zu werfen – dann weiß man im Fall der Fälle, dass es da irgendwo einen passenden Befehl geben muss. Dieser Beitrag zeigt eine Übersicht der Elemente des Application-Objekts und deren Funktion. In weiteren Beiträgen schauen wir uns die Funktion der einzelnen Eigenschaften und Methoden im Detail an.

Application-Objekt im Objektkatalog

Wenn Sie irgendwann einmal vor einer Aufgabe stehen, von der Sie wissen, dass Sie in diesem Beitrag von einer möglichen Lösung gelesen haben, können Sie schnell im Objektkatalog des VBA-Editors nachsehen – dort finden Sie zumindest eine Auflistung der Methoden und Eigenschaften des Application-Objekts. Den Objektkatalog öffnen Sie mit der Taste F2. Oben im Suchfeld geben Sie Application ein und klicken dann auf den gefundenen Eintrag. Die untere Liste liefert dann alle Member dieser Klasse (siehe Bild 1).

Elemente des Application-Objekts

Bild 1: Elemente des Application-Objekts

Nachfolgend finden Sie die mehr oder weniger kurzen Beschreibungen der Elemente des Application-Objekts. Elemente für Webdatenbanken oder Elemente für ältere Techniken wie DDE haben wir nicht berücksichtigt. Sie können die Befehle auch ohne vorangestelltes Application nutzen.

AccessError

Diese Funktion erwartet eine Fehlernummer als Parameter und liefert die Beschreibung des Fehlers in der Anwendungssprache (siehe Bild 2). Praktisch, wenn ein Kunde Ihnen nur die Fehlernummer zu einem Fehler liefert und Sie schnell nachsehen wollen, welche Meldung sich dahinter verbirgt.

Ermitteln des Textes eines Access-Fehlers

Bild 2: Ermitteln des Textes eines Access-Fehlers

AddToFavorites

Hat in früheren Versionen von Access die aktuelle Datenbank zur Liste der Favoriten hinzugefügt.

Assistance

Das mit der Eigenschaft Assistance gelieferte Objekt bietet vier Methoden an, die Sie in Bild 3 sehen.

Methoden des Assistance-Objekts

Bild 3: Methoden des Assistance-Objekts

SearchHelp scheint noch die nützlichste Methode zu sein, sie öffnet nach Eingabe eines Suchbegriffs als Parameter die Support-Seite von Microsoft mit den passenden Themen:

Application.Assistance.SearchHelp "Assistance"

Dies funktioniert jedoch nicht gut, denn für dieses Beispiel liefert die Seite keine Suchergebnisse.

AutoCorrect

Das mit AutoCorrect gelieferte Objekt bietet nur eine Eigenschaft namens DisplayAutoCorrectOptions an. Hier mit können Sie einstellen, ob die entsprechenden Optionen angezeigt werden sollen:

Application.AutoCorrect.DisplayAutoCorrectOptions = False

Weitere Informationen zur Autokorrektur finden Sie im Beitrag Autokorrektur-Einträge im Griff (www.access-im-unternehmen.de/1279).

AutomationSecurity

Diese Eigenschaft legt fest, in welchem Sicherheitsmodus Access andere Access-Anwendungen per VBA öffnet (auch einsetzbar von anderen Office-Anwendungen aus). Zum Öffnen wird hier OpenCurrentDatabase verwendet (siehe weiter unten). Es gibt drei Einstellungen:

  • msoAutomationSecurityByUI: Verwendet die Einstellungen in den Access-Optionen (zu finden in dem Dialog, der mit Datei|Optionen geöffnet wird, unter Trust Center|Einstellungen für das Trust Center|Makroeinstellungen).
  • msoAutomationSecurityForceDisable: Öffnet die Anwendung ohne Aktivierung von VBA, wenn die Makroeinstellung im oben genannten Dialog auf Alle Makros ohne Benachrichtigung aktivieren oder Alle Makros mit Benachrichtigung aktivieren steht. Wenn die Einstellung auf Alle Makros aktivieren steht, hat msoAutomationSecurityForceDisable keine Wirkung.
  • msoAutomationSecurityLow: Aktiviert VBA, auch wenn die Makroeinstellung im oben genannten Dialog auf Alle Makros ohne Benachrichtigung aktivieren oder Alle Makros mit Benachrichtigung aktivieren steht.

BrokenReference

Mit dieser Eigenschaft finden Sie heraus, ob das VBA-Projekt kaputte oder nicht vorhandene Verweise enthält:

Public Sub Test_BrokenReference()
     Dim objReference As Access.Reference
     If Application.BrokenReference Then
         MsgBox "Es gibt kaputte Verweise."
         For Each objReference In Application.References
             If objReference.IsBroken Then
                 Debug.Print objReference.Name
             End If
         Next objReference
     Else
         MsgBox "Alle Verweise in Ordnung."
     End If
End Sub

Damit brauchen Sie dann nicht erst die Verweise- beziehungsweise References-Auflistung zu durchlaufen. Das ist erst notwendig, wenn BrokenReference den Wert True liefert. In diesem Fall prüfen wir mit der Eigenschaft IsBroken des Reference-Objekts, ob der aktuell durchlaufene Verweis kaputt ist und geben dann seinen Namen im Direktbereich des VBA-Editors aus.

Build

Gibt die Buildnummer der aktuellen Version von Microsoft Access zurück:

  Application.Build
  14228 

BuildCriteria

Die BuildCriteria-Funktion erlaubt es, Vergleichsausdrücke für verschiedene Datentypen zusammenzustellen. Das ist insbesondere praktisch, wenn man Kriterien etwa für die DLookup-Funktion oder andere Domänenfunktionen zusammenstellen möchte. Die Funktion erwartet folgende Parameter:

  • Field: Name des Feldes, nach dessen Inhalt gesucht werden soll
  • FieldType: Felddatentyp, zum Beispiel dbText, dbLong, dbCurrency oder dbDate
  • Expression: Vergleichsausdruck, zum Beispiel André, 1, Date()

Hier sind einige Beispiele:

Debug.Print BuildCriteria("Vorname", dbText, "André")
Vorname="André"
Debug.Print BuildCriteria("Vorname", dbText, "A*")
Vorname Like "A*"
Debug.Print BuildCriteria("Menge", dbLong, "1")
Menge=1
Debug.Print BuildCriteria("Geburtsdatum", dbDate, Date)
Geburtsdatum=#10/30/2021#
Debug.Print BuildCriteria("Startzeit", dbDate, Now)
Startzeit=#10/30/2021 10:13:4#
Debug.Print BuildCriteria("Einzelpreis", dbCurrency, "10,50")
Einzelpreis=10.5
Debug.Print BuildCriteria("Aktiv", dbBoolean, "Falsch")
Aktiv=False

Wir sehen hier, dass die Funktion recht flexibel ist. Beim Vergleich von Textfeldern ohne Platzhalter wie dem Sternchen (*) wird das Gleichheitszeichen als Operator verwendet, bei solchen mit Sternchen LIKE. Außerdem werden Zeichenketten automatisch in Anführungszeichen eingefasst. Datumsangaben werden in ein SQL-kompatibles Format umgewandelt und in Zahlen werden Kommata durch das aktuell verwendete Dezimaltrennzeichen ersetzt. Außerdem wandelt die Funktion verschiedene Boolean-Werte, zum Beispiel Wahr, direkt in eine verwertbare Form um (True).

Im Beitrag Suchfunktion mit BuildCritera (www.access-im-unternehmen.de/1339) zeigen wir einen Anwendungszweck für diese Funktion.

CloseCurrentDatabase

Schließt die Datenbank in der mit dem Application-Objekt angegebenen Access-Instanz. Sie können diesen Befehl in der aktuellen Access-Instanz wie folgt einsetzen:

Application.CloseCurrentDatabase

Wenn Sie eine Datenbank wie weiter unten unter dem Befehl OpenCurrentDatabase beschrieben in einer eigenen Instanz geöffnet haben, die beispielsweise objAccess heißt, verwenden Sie folgende Anweisung, um die Datenbank zu schließen:

objAccess.Application.CloseCurrentDatabase

CodeContextObject

CodeContextObject liefert den Namen des Objekts, in dem ein Code ausgeführt wird. Es funktioniert nur für Code in den Klassenmodulen von Formular- und Berichtsmodulen. Allerdings können Sie es auch in Routinen nutzen, die von Code in Formularen oder Berichten aus aufgerufen werden. So können Sie etwa in Fehlerbehandlungsroutinen abfragen, in welchem Objekt der Fehler ausgelöst wurde, ohne dass Sie einen Verweis auf das Objekt oder seinen Namen als Parameter an die Fehlerbehandlungsroutine übergeben müssen.

Dazu platzieren wir beispielsweise folgende Prozedur hinter der Ereigniseigenschaft einer Schaltfläche in einem Formular:

Private Sub cmdFehlerAusloesen_Click()
     On Error Resume Next
     Debug.Print 1 / 0
     If Not Err.Number = 0 Then
         Call ErrorHandler
     End If
End Sub

Die von dort aufgerufene Prozedur ErrorHandler legen wir in einem Standardmodul an:

Public Sub ErrorHandler()
     MsgBox "Fehler in ''"  & Application.CodeContextObject.Name & "'' ("  & TypeName(Application.CodeContextObject) & ")"
End Sub

Diese liefert dann den Namen des Formulars sowie den Typ (siehe Bild 4).

Meldung mit Informationen der Eigenschaft CodeContextObject

Bild 4: Meldung mit Informationen der Eigenschaft CodeContextObject

CodeData

Die Eigenschaft CodeData hat eine sehr ähnliche Funktion wie CurrentData (für die Beschreibung verweisen wir daher auf die Eigenschaft CurrentData, die Sie weiter unten finden). Die Eigenschaft ist für die Nutzung in Access-Add-Ins vorgesehen. Dort können Sie dann mit CodeData auf die Elemente der Add-In-Datenbank zugreifen und mit CurrentData auf die Elemente der aktuell geladenen Datenbank.

CodeDb

CodeDb entspricht im Prinzip der Eigenschaft CurrentDb, daher verweisen wir an dieser Stelle auf die Beschreibung der Eigenschaft CurrentDb, die wir weiter unten vorstellen. Genau wie bei CodeData und CurrentData ist CodeDb für den Einsatz in Access-Add-Ins vorgesehen, um auf das Database-Objekt der Add-In-Datenbank zuzugreifen. Mit CurrentDb hingegen greift man von der Add-In-Datenbank auf das Database-Objekt der aktuell in Access angezeigten Datenbank zu.

CodeProject

CodeProject entspricht im Prinzip der Eigenschaft CurrentProject, daher verweisen wir an dieser Stelle auf die Beschreibung der Eigenschaft CurrentProject, die wir weiter unten vorstellen. Genau wie bei CodeData und CurrentData ist CodeProject für den Einsatz in Access-Add-Ins vorgesehen, um auf das CurrentProject-Objekt der Add-In-Datenbank zuzugreifen. Mit CurrentProject hingegen greift man von der Add-In-Datenbank auf das CurrentProject-Objekt der aktuell in Access angezeigten Datenbank zu.

ColumnHistory

Mit dieser Funktion können Sie den Versionsverlauf der Daten in einem Memofeld abfragen. Dazu erstellen Sie ein Memofeld (Datentyp Langer Text) und stellen dessen Eigenschaft Nur anfügen auf Ja ein (siehe Bild 5). Dann können Sie mit ColumnHistory für einen bestimmten Datensatz den Versionsverlauf auslesen. Für unser Beispiel und den Datensatz mit dem Wert 1 im Feld ID sieht der Aufruf wie folgt aus:

Memofeld zum Anfügen von Texten

Bild 5: Memofeld zum Anfügen von Texten

Debug.Print Application.ColumnHistory("tblMemofelder", "Memofeld", "ID = 1")

Nachdem wir erst eine, dann eine zweite Zeile eingegeben haben, erhalten wir dieses Ergebnis:

[Version: 30.10.2021 11:27:22 ] Erste Zeile.
[Version: 30.10.2021 11:27:43 ] Erste Zeile.
Zweite Zeile.

COMAddIns

Die Auflistung COMAddIns liefert alle COM-Add-Ins, die für die aktuelle Access-Instanz vorliegen. COM-Add-Ins sind Add-Ins, die im Gegensatz zu Access-Add-Ins mit alternativen Entwicklungsumgebungen erstellt werden, zum Beispiel VB6, .NET oder twinBASIC. Die folgende For Each-Schleife gibt die Beschreibung und die ProgID aller aktuell installierten Elemente aus:

Public Sub Test_COMAddIns()
     Dim objCOMAddIn As COMAddIn
     For Each objCOMAddIn In Application.COMAddIns
         Debug.Print objCOMAddIn.Description,  objCOMAddIn.ProgId
     Next objCOMAddIn
End Sub

CommandBars

Mit der CommandBars-Auflistung greifen Sie auf alle CommandBar-Definitionen der aktuellen Instanz von Access zu. Das mag in Zeiten des Ribbons veraltet zu sein, aber wir wollen die guten, alten Kontextmenüs nicht vergessen: Auch diese lassen sich mit dieser Auflistung ermitteln.

Im folgenden Beispiel durchlaufen wir alle Elemente der CommandBars-Auflistung und geben all diejenigen im Direktbereich des VBA-Editors aus, deren Eigenschaft Type den Wert msoBarTypePopup aufweist:

Public Sub Test_CommandBars()
     Dim cbr As CommandBar
     Debug.Print "Anzahl CommandBars:"  & Application.CommandBars.Count
     For Each cbr In Application.CommandBars
         If cbr.Type = msoBarTypePopup Then
             Debug.Print cbr.Name
         End If
     Next cbr
End Sub

CompactRepair

Diese Methode komprimiert und repariert die im ersten Parameter angegeben Datenbank und erzeugt eine komprimierte und reparierte Version unter dem mit dem zweiten Parameter angegebenen Dateinamen:

Application.CompactRepair  CurrentProject.Path & "\Beispiel.accdb",  CurrentProject.Path & "\Beispiel_Komprimiert.accdb",  True

Mit dem dritten Parameter geben Sie an, ob im Falle von bei der Reparatur entdeckten korrupten Elemente eine Logdatei im Verzeichnis der Datenbank angelegt werden soll.

ConvertAccessProject

Diese Methode konvertiert eine ADP-Datei, also ein Access Data Project, in eine reine Access-Datenbank. Sie erwartet die folgenden Parameter:

  • SourceFilename: Name der zu konvertierenden ADP-Datei
  • DestinationFilename: Name der zu erstellenden Datei
  • DestinationFileFormat: Format der zu erstellenden Datei (zum Beispiel acFileFormatAccess2007)

CreateAccessProject

Mit dieser Methode können Sie eine ADP-Datei, also ein Access Data Project, erzeugen. Sie ist allerdings in neueren Versionen von Access nicht mehr verfügbar und der Aufruf löst den Fehler Das Format ADP (Access Data Project) wird ab dieser Version von Access nicht mehr unterstützt. aus:

Application.CreateAccessProject  CurrentProject.Path & "\Beispiel.adp"

Als zweiten Parameter können Sie noch die Verbindungszeichenfolge für die zu verbindende SQL Server-Datenbank angeben.

CreateAdditionalData

Diese Methode dient dazu, bei einem Export im XML-Format der Daten weitere Tabellen zu den Daten der zu exportierenden Tabelle hinzuzufügen.

Weitere Informationen zu dieser Methode finden Sie im Beitrag XML-Export mit VBA (www.access-im-unternehmen.de/1046).

CreateControl

Die Funktion CreateControl erstellt ein neues Steuerelement in einem Formular und liefert einen Verweis auf das neue Steuerelement als Funktionswert zurück. Diese und die Methoden CreateForm und DeleteControl erläutern wir im Artikel Formulare per VBA erstellen (www.access-im-unternehmen.de/1332).

CreateForm

Die Methode CreateForm erstellt ein neues Formular und liefert einen Verweis auf das neu erstellte Formular als Funktionswert zurück.

CreateGroupLevel

Diese Methode erzeugt in einem Bericht einen neuen Gruppierungs- oder Sortierungsbereich.

Diese und die Methoden CreateReport, CreateReportControl und DeleteReportControl erläutern wir im Artikel Berichte per VBA erstellen (www.access-im-unternehmen.de/1338).

CreateReport

Diese Funktion erstellt einen neuen Bericht und liefert einen Verweis auf den neu erstellten Bericht als Funktionswert zurück.

CreateReportControl

Diese Funktion erstellt ein Steuerelement in einem Bericht und liefert einen Verweis auf das Steuerelement als Funktionswert zurück.

CurrentData

Das mit der Eigenschaft CurrentData gelieferte Objekt liefert Eigenschaften mit verschiedenen Auflistungen:

  • AllQueries: Liefert eine Auflistung aller Abfragen der aktuellen Datenbank.
  • AllTables: Liefert eine Auflistung aller Tabellen der aktuellen Datenbank.
  • AllDatabaseDiagrams, AllFunctions, AllStoresProcedures, AllViews: Liefert Auflistung der SQL Server-Objekte (nur in ADP-Dateien verfügbar, die nicht mehr unterstützt werden)

Der folgende Code gibt die Anzahl der Abfragen und Tabellen aus und anschließend in einer For Each-Schleife die Namen aller Einträge der Auflistung AllTables:

Public Sub Test_CurrentData()
     Dim objObject As AccessObject
     Debug.Print Application.CurrentData.AllQueries.Count
     Debug.Print Application.CurrentData.AllTables.Count
     For Each objObject In Application.CurrentData.AllTables
         Debug.Print objObject.FullName
     Next objObject
End Sub

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar