VBA in Access -Formularen
Die Erklärungen in dieser vorläufigen Lektion sind knapp und könnten sogar teilweise noch fehlerhaft sein!
Die Access -Formularen können mit VBA genauso verwendet werden wie in Excel, allerdings gibt es noch zusätzliche Möglichkeiten, um ein Formular oder ein Steuerelement mit einer Datenquelle zu verbinden. Außerdem werden viele Funktionen über »DoCmd« realisiert.
Namen, die mit »0« enden, stehen beispielhaft für Namen von Datenbankobjekten, die an ihrer Statt dort einzusetzen sind.
Datenquelle eines Formulars
Ein Formular kann mit einer Tabelle verbunden werden, und dann kann in jener navigiert werden.
Hierzu dient die Eigenschaft »RecordSource«.
Eigenschaften eines Formulars
Hier behandeln wir besonders diejenigen Eigenschaften eines Formulars, welche mit der Bindung an eine Datenquelle zu tun haben.
DoCmd.CurrentRecord
Die 1-basierte Kennzahl des aktuellen Datensatzes.
DoCmd.NewRecord
Ob dies ein neu eingefügter Datensatz ist
Ausdrücke in einem Formulars
Hier behandeln wir einige Ausdrücke, die in Prozeduren eines Formulars nützlich sein könnten.
DoCmd.DCount( "*", RecordSource )
Zählt die Datensätze der Datenquelle
Navigation eines Formulars
- Zum Datensatz 7 des Formulars »FormularPerson« gehen.
DoCmd.GoToRecord acDataForm, "FormularPerson", acGoTo, 7
- »acDataForm« gibt den Typ des Objektes an, das navigiert werden soll (acActiveDataObject (Fehlwert), acDataForm, acDataQuery oder acDataTable)
- »"FormularPerson"« gibt den Namen des Objektes an, das navigiert werden soll.
- »acGoTo« gibt an, daß zu einer Position gesprungen werden soll.
- »7« Zielposition (acGoTo) oder Versatz (acNext, acPrevious)
- Einige typische Zeilen
DoCmd.GoToRecord,, acFirst DoCmd.GoToRecord,, acLast DoCmd.GoToRecord,, acNext DoCmd.GoToRecord,, acPrevious DoCmd.GoToRecord,, acNewRec
DoCmd.GoToPage zu Seite gehen
DoCmd.FindRecord Suchtext[, Vergleichstyp] [, Groß-/Kleinschreibung][, Suchen][, Formatierung] [, aktuelles Feld durchsuchen][, Von Anfang an]
- Einige typische Zeilen
DoCmd.FindRecord o.v( w ), , True, , True DoCmd.FindRecord x, , True, , True
Daten und Formulare
DoCmd.Requery Daten auffrischen
DoCmd.RepaintObject Bildschirmaktualisierungen eines Formulars ausführen
Steuerelemente
Von einem Formular aus werden Steuerelemente mit Ausdrücken wie »Me!control0« erreicht.
Einige Steuerelemente können ebenfalls direkt mit Datenquellen verbunden werden.
Die Datenquelle eines Steuerelements heißt »SourceObject«.
- Beispiel
Me.control0.SourceObject = "Abfrage.t"
Steuerelemente-Eigenschaften:
Enabled
Kann dieses Steuerelement für Eingaben verwendet werden?
Visible
Ist dieses Steuerelement sichtbar?
DoCmd.GoToControl Fokus auf Steuerelement setzen
DoCmd.GoToControl "x"
Unterformulare
Von einem Formular aus werden Unterformulare mit Ausdrücken wie »Me!subform0.Form« erreicht.
Um in einem Unterformular navigieren zu können, muß dies erst den Fokus erhalten: »Me![subform0].SetFocus«
Das übergeordnete Formular eines Unterformulars heißt »Parent«.
Schließen eines Objekts
DoCmd.Close [Objekttyp, Objektname], [Speichern]
Suchen
DoCmd.GoToRecord (siehe oben)
DoCmd.FindRecord (siehe oben)
DoCmd.FindNext Dialog zum Suchen öffnen
Anwendungssteuerung
DoCmd.Quit Access-Anwendung schließen
DoCmd.SetWarnings Warnungsanzeige festlegen
DoCmd.RunMacro Makro ausführen
DoCmd.RunSQL SQL-Abfrage vornehmen
DoCmd.Echo Bildschirmaktualisierung ein- oder ausschalten
Filter
DoCmd.ApplyFilter Anwendung eines Filters
DoCmd.ShowAllRecords Filter deaktivieren
Verschiedenes
DoCmd.Beep Piepsen
DoCmd.Hourglass Sanduhr an/aus
Ereignisse
DoCmd.CancelEvent Ereignis abbrechen
Objektbehandlung
DoCmd.CopyObject Access-Objekt kopieren
DoCmd.DeleteObject Objekt löschen
DoCmd.Rename Objekt umbenennen
DoCmd.SelectObject Access-Objekt fokussieren
DoCmd.Save Access-Objekt speichern
DoCmd.SendObject Objekt in Mail versenden
Öffnungen
DoCmd.OpenDataAccessPage Datenzugriffsseite öffnen
DoCmd.OpenDiagram Diagramm öffnen
DoCmd.OpenModule Modul öffnen
DoCmd.OpenQuery Abfrage öffnen
DoCmd.OpenReport Bericht öffnen
DoCmd.OpenStoredProcedure Prozedur öffnen
DoCmd.OpenTable Tabelle öffnen
DoCmd.OpenView Sicht öffnen
DoCmd.OpenForm Name [, Ansicht][, Filtername] [, Bedingung][, Datenmodus][, Fenstermodus] [, Öffnungsargumente]
DoCmd.OpenForm "x"
Fenstersteuerung
DoCmd.Maximize Fenster maximieren
DoCmd.Minimize Fenster minimieren
DoCmd.MoveSize Fenster verschieben
DoCmd.MoveSize 0, 0
DoCmd.Restore vorherige Fenstergröße wiederherstellen
Import, Export und Drucken
DoCmd.OutputTo Tabelle oder Abfrage exportieren
DoCmd.TransferDatabase Tabelle oder Abfrage importieren, exportieren oder verknüpfen
DoCmd.TransferSpreadsheet Tabelle einlesen
DoCmd.TransferText Text einlesen
DoCmd.PrintOut drucken
DoCmd.PrintOut acSelection
Menüs und Symbolleisten (veraltet?)
DoCmd.AddMenu hinzufügen eines Menüs
DoCmd.DoMenuItem Menükommando ausführen
DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
DoCmd.RunCommand Menübefehl ausführen
DoCmd.SetMenuItem Menüeintrag festlegen
DoCmd.ShowToolbar Symbolleiste darstellen
Form-Einträge
Datensätze können gefiltert werden.
- Einige typische Zeilen
Me.x.Form.Filter = "c like 'abc'" : Me.x.Form.FilterOn = True : Me.x.SourceObject = "t" Me.x.Form.Filter = "" : Me.x.Form.FilterOn = False : Me.x.SourceObject = "t"
Aktualisierung
- Einige typische Zeilen
Me.Eingebettet31.Form.Requery Me.Refresh
Schließen und Speichern
- Einige typische Zeilen
Me.SetFocus : DoCmd.Close Me.Visible = False : DoCmd.Close acForm, "x", acSaveYes
Diverses
CurrentDb.Execute x
- Ähnlich zu DoCmd.RunSQL, soll aber einige Vorteile haben. Beispielsweise abfangen von Fehlern:
- CurrentDb.Execute "SQL-COMMAND WITHOUT SEMICOLON", dbFailOnError
Set kv_table = CurrentDb.CreateQueryDef( "t", q )
- Neue Abfrage anlegen.
Dim o As Object : Set o = CurrentProject.AllForms( "x" )
- Kollektion aller Forms.
Forms![ x ].Visible = True : Forms![ x ].Repaint: m : Forms![ x ].Visible = False
- Repaint verlangt sofortiges Malen der Form.
Let Me.Eingebettet20.Form![ x ]= "u"
- Schreiben in Feld einer eingebetteten Form.
Let kv_t = Me.Eingebettet20![ x ]
- Lesen aus Feld einer eingebetteten Form.
q = "SELECT * FROM t" : Me.Eingebettet31.Form.RecordSource = q : Me.Eingebettet31.Form.Requery
- Abfrage als Datenquelle festlegen und Anzeige aktualisieren
rs.Fields( "f" ) = Me.f.value
- Wert aus einem anderen Formfeld in ein Datenbankfeld kopieren.
Public d As DAO.Database : Set d = Access.Application.CurrentDb
- Datenbankobjekt merken (normalerweise nicht nötig).
Formularereignisse
Formularereignisse finden sich auch im Eigenschaftendialog (F4) eines Formulars.