window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

DoCmd- und RunCommand-Anweisungen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Aktionen, die Sie über die Oberfläche von Access durchführen, lassen sich fast alle auch über VBA anstoßen. Für die hinter Menüs, Kontextmenüs und Ribbon liegenden Befehle gibt es Pendants, welche sich in zahlreichen Methoden vor allem des DoCmd-Objekts und der RunCommand-Anweisung verstecken. über diese VBA-Funktionen lassen sich komplexe Aufgaben mit wenig Aufwand erledigen. Das ist Grund genug für eine ausführlichere übersicht.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1511_DocmdAnweisung.accdb

Unterschiede zwischen DoCmd und RunCommand

Zunächst handelt es sich bei RunCommand um eine direkte Methode der Access.Application-Instanz. DoCmd hingegen ist ein Eigenschaftsobjekt von Application, das generell verfügbar ist:

Application.RunCommand acCmd-Konstante
Application.DoCmd.

RunCommand nimmt grundsätzlich nur einen einzigen Parameter entgegen, der aus der Enumeration acCommand stammen muss. Das sind Konstanten, die bestimmten Aktionen entsprechen. Wollen Sie etwa ein Fenster, sei es ein Formular oder ein Bericht, maximieren, so lautet die entsprechende Konstante acCmdDocMaximize:

RunCommand acCmdDocMaximize

Die Zahl dieser Konstanten in den aktuellen Access-Versionen liegt bei etwa 600.

Beim DoCmd-Objekt sind es deutlich weniger Methoden, circa 70 nämlich, die dafür aber eine variable Zahl an Parametern aufweisen, mit denen die Aktionen gesteuert werden können. Ein Beispiel für eine Anweisung ohne Parameter wäre

DoCmd.Maximize

Auch dieser Befehl maximiert ein Formular- oder Berichtsfenster, welches aktuell den Fokus besitzt. Eine Methode mit mehreren Parametern wäre

DoCmd.Close acForm, _
    "frmAdressen", acSaveYes

Dies schließt das Formular frmAdressen und und speichert seinen Zustand, also vor allem seine Abmessungen, explizit. Auch ein im Entwurfsmodus befindliches Formular wird damit geschlossen und die änderungen abgespeichert. Ohne den optionalen Parameter acSaveYes würden Sie mit dem Bestätigungsdialog zum Speichern konfrontiert.

Sowohl RunCommand-, wie DoCmd-Anweisungen spiegeln das wieder, was Sie auch über Schaltflächen der Oberfläche erreichen. Es handelt sich deshalb auch immer um Sub-Prozeduren, die keinen Rückgabewert haben. Generell könnte man formulieren, dass RunCommand Anweisungen entspricht, die keine weitere Interaktion erfordern, während die DoCmd-Methoden eher mit den Access-Assistenten zu vergleichen wären, die über mehrere Schritte Angaben abfragen, bevor die eigentliche Aktion ausgeführt wird. Diese vom Assistenten gesammelten Informationen entsprechen dann den Parametern, die die DoCmd-Methode erwartet. Ein Beispiel hierfür wäre der Text-Export-Assistent, der sein Spiegelbild in der Anweisung DoCmd.TransferText hat.

Während die DoCmd-Anweisungen in der Hilfe von Access alle hinreichend dokumentiert sind, sind Sie bei den RunCommand-Konstanten auf den sprechenden Namen oder Experimente angewiesen.

Microsoft selbst hat über alle Versionen von Access hinweg keine übersicht über die Bedeutung der Konstanten veröffentlicht. Im Zweifel finden Sie Im Internet auf Seiten Dritter weitere Erläuterungen.

Im Folgenden geht es in erster Linie um die Möglichkeiten, die DoCmd eröffnet. Nicht alle Methoden sind aufgeführt, da viele nicht wirklich relevant sind oder nur im Umfeld von Access-Projekten (SQL-Server) Bedeutung haben. Die Methoden sind thematisch zusammengefasst.

Objekte öffnen

Dass sich ein Formular über die DoCmd-Anweisung OpenForm laden lässt, ist Ihnen sicher schon untergekommen. Aber für alle anderen Access-Objekte gibt es ebenfalls äquivalente Methoden, deren wesentliche Vertreter Sie in Listing 1 finden. Interessant sind dabei vor allem die Parameter, welche das Laden steuern.

Sub TestOpenObjects()
     DoCmd.OpenModule "mdlDoCommands", "TestOpenObjects"
         Msg "Modul und Prozedur geöffnet"
     DoCmd.OpenQuery "qryAdressenG", acViewNormal, acReadOnly
         Msg "Abfrage geöffnet"
     DoCmd.OpenReport "rptAdressen", acViewPreview, "Vorname Like 'B*'", acDialog
         Msg "Bericht geöffnet"
     DoCmd.OpenForm "frmAdressen", , , , acFormReadOnly, acDialog, "Test1"
         Msg "Formular war geöffnet"
     DoCmd.OpenTable "tblLaender", acViewNormal, acReadOnly
         Msg "Tabelle geöffnet"
End Sub

Listing 1: Die relevanten öffnen-Methoden des DoCmd-Objekts

OpenModule ist für den Laufzeitbetrieb einer Datenbank überflüssig. Die Anweisung öffnet ein VBA-Modul, das Sie namentlich angeben. Zusätzlich kann mit weiterem Parameter auch eine Prozedur des Moduls spezifiziert werden, auf die beim öffnen der Cursor positioniert wird. Die Beispieldatenbanken von Access Basics verwenden den Befehl etwa hin und wieder im Intro-Formular, um beim Start sogleich ein Modul und damit den VBA-Editor zu öffnen, welches von besonderem Interesse sein kann.

OpenQuery öffnet eine Abfrage. über den View-Parameter steuern Sie dabei, in welcher Gestalt die Abfrage erscheinen soll. Möchten Sie die normale Datenblattansicht, so setzen Sie acViewNormal ein. Für den Entwurfsmodus steht acViewDesign. Weniger bekannt ist, dass acViewPreview die Abfrage in die Seitenansicht für den Druck bringt, womit etwa kontrolliert werden kann, ob das Ergebnis auf eine Seite passt. Diese View-Parameter teilt sich die Anweisung mit den anderen öffnungsmethoden. Nur sind bei Abfragen die Konstanten acViewReport (Berichtsansicht) und acViewLayout (Layout-Ansicht) nicht erlaubt und führen zum Fehler.

Handelt es sich bei der Abfrage um eine Aktionsabfrage, so hat der View-Parameter keinerlei Bedeutung, denn ein Fenster öffnet sich hier nicht.

Interessant ist der letzte optionale Parameter DataMode, mit dem Sie bestimmen können, ob das Abfrageergebnis editierbar sein soll. acReadOnly führt nämlich zu einer schreibgeschützten Ansicht, während ein acEdit (Vorgabe) die Datensätze bearbeitbar macht, falls die Abfrage selbst das unterstützt.

Die gleichen Parameter, wie für OpenQuery, finden Sie auch bei der Anweisung OpenTable, mit der Sie eine Tabelle öffnen. Auch hier können Sie über DataMode entscheiden, ob die Ansicht schreibgeschützt oder editierbar sein soll.

Umfangreich sind die Parameter, die die zum Laden eines Formulars dienende Anweisung OpenForm erwartet. Bis auf den Namen des Formulars sind diese allerdings alle optional und deshalb auch nicht so bekannt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar