Einführung in Programmierung in Access - VBA
Grundsätzliches Automatisierung von Abläufen VBA Visual Basic for Application nahezu identisch mit VB 6.0 wesentliche Unterschiede zu VB .net Ereignis gesteuerte Programmierung 3 Komponenten Entwicklungsumgebung Kein Macro Recorder Viele Komfortfunktionen Sprache Visual Basic ist leicht zu lernen Viele Analogien zu anderen Programmiersprachen Objektmodell Für jedes MS Office Modul ähnlich aber anders VB - Hilfe verwenden Access MDB D:\Projects\Schule\ADAT\Access_Programming Unter.mdb Schriftgröße: Extras -> Optionen -> Editorformat -> 16pt
Entwicklungsumgebung Doppelclick auf Modul / Alt+F11 Project (Projektmanager) Access - Klassenobjekte (z.B. Formular) Module (z.B.: ModHilf) - benutzererstellt Klassenmodule Code Bereich - 1 Fenster je Modul 2 Dropdown Boxen (Objekte, Ereignisse / Prozeduren) Einzel Prozedur / Gesamtmodulanzeige unterer linker Rand
Entwicklungsumgebung FS Eigenschaftenfenster Name bzw. Formulareigenschaften bei Access - Klassenobjekten Direktfenster Ausgaben aus Modulen mit debug.print Direkte Befehlseingabe ? .. print Beispiel: Ausgabe von Datum und Zeit Sub - Prozedurunterprogramm Befehle: MsgBox, Strings, Verkettung, Variablen - definition, eingebaute Konstante, Fortsetzungszeile Strg+Leertaste - Code Completion Funktion Msgbox aufrufen (ohne / mit Parametern in Klammern) debug.print - Ergebnis in Direktfenster Parameterinfo - Toolbar "Bearbeiten" Hilfe - F1 sub datausgabe () msgbox "Es ist jetzt " & Time & " am " & date end sub Strings, Verkettungsoperator Ergänzen um 2. Parameter - VB Konstante Hilfe Funktion (F1) Fortsetzungszeile Unterschiede Funktionsaufruf mit Verwendung und ohne Verwendung des Returnwertes
Entwicklungsumgebung FS 2 VBA ist "case insensitiv" - automatische Anpassung der Schreibweise Variable können, müssen aber nicht deklariert werden (impliziter Typ: Variant) Kontextmenü -> Definition springt zur Definition der Variablen (oder Meldung) Syntaxfehler werden sofort erkannt Ausführen von Prozedurunterprogrammen ( , F5)
Entwicklungsumgebung FS 3 Testen 2. Beispiel: Schleife Auskommentieren: Zeichen: ' oder Toolbarfunktionen (Bearbeiten) Bearbeiten -> Suchen / Ersetzen Haltepunkte Toolbar Debuggen Einzelschritt, Prozedurschritt, Weiter, Abbrechen Position verschieben Codeänderungen vornehmen Direktfensterüberprüfungen Überwachungsfenster Menüfunktion: Überwachung hinzufügen Lokal - Fenster
Entwicklungsumgebung FS 4 Auflistungen bearbeiten Objekt - Katalog (F2) Objekttypendeklaration statisch dynamisch For Each ... Next zum Durchlaufen von Auflistungen "." und "!" Notation "." bei Verweis auf eingebaute Unterobjekte "!" bei Verweis auf Userdefinierte Objekte
Entwicklungsumgebung FS 4 Konstante Erste 2 Buchstaben - Verweis auf Bibliothek ac - Access z.B.: acTextBox als Controltyp vb - Visual Basic z.B.: vbOkCancel ad - ADO z.B. adAddNew Zuweisungen Variable: "=" Objektreferenzen: "set" Benannte Parameter ":="
Sprache Variable Name 1. Buchstabe danach Alphanumerische Zeichen oder "_" Groß- und Kleinschreibung zur Lesbarkeit einsetzen (z.B.: FehlerMeldung) Automatische Deklaration und Initialisierung Empfehlung: Am Beginn der Prozedur deklarieren. Erzwingbar mit "Option Explicit" am Modulanfang Definition mit: DIM STATIC PRIVATE PUBLIC
Sprache FS Variablen FS Beispiel: DIM i as Integer Datentyp nach as: Byte, Boolean, Currency (15 Stellen vor und 4 Stellen nach dem Komma), Date (8 Byte), Decimal, Double, Integer (2 Byte), Long (4 Byte), Object, Single, String, Variant Kurzform Integer: zahl%, Long: zahllang&, Currency: Betr@, String: mystr$, Double: dz# Array: dim sarr(3,2) as string, redim sarr(5,4) Definitionsort gibt scope an lokal (in Prozedur) - modul (in Deklarationen) - global (Public)
Sprache FS 2 Konstante Dezimalzahl (z.B.: 38) Hexadezimalzahl (z.B.: &hF4) Datum (z.B.: #1/1/2006#) Definition mit const
Beispiel Bilder verwalten Bilder in Datenbank Tabellen - OLE Feld (z.B.: tblKunst) Formularassistent erzeugt ein gebundenes Objektfeld nur BMP's direkt anzeigbar für andere Formate wird ein OLE Server benötigt MS Photo Editor hat OLE Server MS Picture Manager (Office 2003 nicht) Kompliziertes Einfügen Kontext Menü -> Objekt einfügen -> aus Datei erstellen -> Auswählen Viel Platz in Tabelle benötigt
Beispiel Bilder verwalten Bilder in Dateisystem Tabelle mit Textfeld für DateiPfad Formular mit Assistent erzeugen Bildsteuerelement hinzufügen eigene Prozedur zum Anzeigen der Bilder Aufruf der Prozedur bei Ereignissen: Beim Anzeigen des Formulars (Ereignisroutine: Current) Nach Eingabe (Nach Aktualisierung) des Dateinamens (Ereignisroutine: AfterUpdate) In Access Klassenmodul einfügen (sonst "Me" nicht verwendbar) Kommando Schaltfläche für Fileauswahl (Achtung: Verweise hinzufügen: Microsoft Office 11.0 Object Library) Tabelle mit Formularassistent -> ctl Bild - ungebundenes Bildsteuerelement dazu -> irgendein Testbild angeben -> Bildeigenschaft wieder herauslöschen Bild auswählen -> Verzeichnis
Beispiel Bilder verwalten Bilder im Report Bild Steuerelement einfügen Ereignisroutine für beim Drucken "Detailbereich_Print" schreiben "Picture" Eigenschaft des Bildsteuerelementes auf Dateinamen aus Textfeld setzen
Sortieren im Formular Formulareigenschaft: "Sortiert nach" (Daten) auf Feld setzen (z.B.: [PLZ]) (mehrere Felder durch "," trennen) Beim Start des Formulars: Schaltfläche "Filter/Sortierung anwenden" drücken Sortierung initialisiert das "RecordSet"
Sortieren im Formular Programmgesteuertes Umsortieren Tabelle tblKunden erstellen (siehe Beispieldatenbank) Formular frmKunden erstellen oder generieren. ev. in Ereignisroutine "Form_Load" die OrderByOn Eigenschaft auf "True" setzen. Kommandoschaltflächen für jede Sortierart ins Formular einfügen Ereignisroutine für "Click" Ereignis der Schaltfächen Recordset von Formular holen Primary Key Wert speichern "OrderBy" Eigenschaft setzen Im neuen Recordset zu gespeichertem Primary Key navigieren
Mit Formulare Programmieren Ereignisse bezogen auf Formular Öffnen von Formularen DoCmd.OpenForm (siehe frmKunden in Beispieldatenbank) Ereignisse unüberschaubare Menge Formular - Ereignisreihenfolge: Öffnen Schließen Beim Öffnen Beim Entladen Beim Laden Beim Deaktivieren Bei Größenänderung Beim Schließen Beim Aktivieren Beim Anzeigen
Mit Formulare Programmieren FS2 Ereignisse bezogen auf Daten Bearbeiten von Datensätzen Beginnt vor der ersten Änderung eines Feldes Endet mit der Speicherung des Datensatzes Ereignisreihenfolge: Vor Eingabe (nur bei neuen Datensätzen) Bei Geändert (Beim ersten Eingeben oder Löschen eines Zeichens) Vor Aktualisierung (Vor der Datensatzspeicherung) Nach Aktualisierung Nach Eingabe Beim Anzeigen Abbruch falls möglich mit "Cancel = True"
Mit Formulare Programmieren FS3 Startformular Extras -> Start -> Formular / Seite anzeigen: Startformular eintragen Nodrwind Datenbank Start -> Hauptübersicht OpenForms Funktion als Ausdruck aufgerufen (Modul Form_Hauptübersicht) Fehlerbehandlung OnError goto .... Resume ..... Labels
Mit Formulare Programmieren FS4 Bestellformular Bestellungen Bestellungen Unterformular Verknüpft über Bestellnr Formularfuß Feld: BestellZwischensumme Feld: Zwischensumme Berechnung aus Unterformular gesperrt angezeigt
Mit Formulare Programmieren FS5 Beziehungsarten Einfache Tabelle, Abfrage oder 1:1 Beziehung Detailansicht oder Übersichtslisten ev. mit "Lookup" Feldern Navigationsleiste und Bildlaufleisten erforderlich? wenn nein: Formateigenschaften ausblenden: Bildlaufleisten -> nein, Datensatzmarkierer -> nein, Navigationsschaltflächen -> nein, Trennlinie -> nein Schaltflächen OK und Abbrechen Ok Verlässt Formula mit Speicherung Abbrechen Verläßt ohne Speicherung