Access 2010 Ricardo Hernández García 1. Ausgabe, 1. Aktualisierung, Dezember 2011 für Windows Automatisierung, Programmierung ACC2010P 4 Access 2010 für Windows - Automatisierung, Programmierung 4 Mit Modulen arbeiten In diesem Kapitel erfahren Sie D was unter Modulen zu verstehen ist D welche Modultypen es gibt D was Prozeduren sind Voraussetzungen D Access-Grundlagen D Grundlagen der Programmierung 4.1 Module Beschreibung Durch die Vorgaben der strukturierten Programmierung entsteht fast automatisch die Situation, dass ganze Programmierprojekte sich in kleinere Einheiten zerlegen lassen, die dann jeweils einzeln und fast getrennt vom Gesamtprojekt erstellt werden können. In Access stehen dazu sogenannte Module zur Verfügung, die sich jeweils eigenständig um einen Teilbereich der Programmieraufgaben kümmern können. Jedes Modul fungiert dabei wie ein Container, in dem Prozeduren und Funktionen zum gleichen Thema zusammengefasst werden. Die in Modulen enthaltenen Prozeduren werden dann im Gesamtablauf der Anwendung bei bestimmten Ereignissen aufgerufen, z. B. durch das Anklicken einer Schaltfläche. Modultypen in Access Standardmodul (globales Modul) D D Ist für die gesamte Datenbank gültig D Wird im Navigationsbereich von Access verwaltet Enthält Prozeduren, die nicht an ein bestimmtes Datenbankobjekt gebunden sind Modultypen Standardmodul Formularmodul Klassenmodul Berichtsmodul Access-Modultypen im Überblick Klassenmodul Formularmodul Berichtsmodul 20 D D D D D D D Ist mit einem Datenbankobjekt verbunden Es sind Formular- und Berichtsmodule verfügbar. Es gibt die Option, eigene Klassen (Datenbankobjekte) zu programmieren. Klassenmodul für ein Formular Alle Ereignisprozeduren eines Formulars werden hier erstellt und gespeichert. Klassenmodul für einen Bericht Alle Ereignisprozeduren eines Berichts werden hier erstellt und gespeichert. © HERDT-Verlag 4 Mit Modulen arbeiten Aufbau eines Moduls Ein Modul besteht aus zwei Teilen: dem Deklarationsbereich ganz am Anfang und dem Prozedurbereich . Im Deklarationsbereich werden allgemeine Einstellungen zum Modul angegeben, die alle Prozeduren des Moduls beeinflussen. Standardmäßig gibt Access hier z. B. die Anweisung Option Compare Database vor, die die Sortierreihenfolge von Zeichenketten bestimmt. Im Prozedurbereich sind alle Prozeduren des Moduls untergebracht. Deklarationsbereich Deklarationen Prozedur 1 Prozedurbereich Funktion Prozedur 2 Aufbau eines Moduls im Programmcode Aufbau eines Moduls im Modell 4.2 Standardmodule Module im Navigationsbereich Standardmodule enthalten allgemeine Prozeduren, die nicht mit einem anderen Objekt verbunden sind und die von jeder beliebigen Stelle innerhalb Ihrer Datenbank aus ausgeführt werden können. Ein Modul als solches kann nicht ausgeführt werden. Access stellt für die Verwaltung der Standardmodule die Kategorie MODULE im Navigationsbereich zur Verfügung. Falls diese Kategorie nicht sichtbar sein sollte, können Sie mit Anklicken der Schaltfläche z. B. den Befehl ALLE ACCESS-OBJEKTE enthält. Der Navigationsbereich ein Menü öffnen, das Standardmodul erstellen f Wählen Sie im Menüband das Register ERSTELLEN. f Klicken Sie in der Gruppe MAKROS UND CODE auf die Schaltfläche . Access öffnet die VBA-Entwicklungsumgebung (detaillierte Beschreibung vgl. Kapitel 5) und blendet ein leeres Code-Fenster ein, das standardmäßig die Anweisungen Option Compare Database und Option Explicit enthält. Die zweite Anweisung erscheint allerdings nur, wenn die explizite Deklaration von Variablen durch die entsprechende VBA-Option vorher aktiviert worden ist. Möchten Sie, dass Variablendeklarationen für alle neuen Module nicht zwingend erforderlich sind, rufen Sie den Menüpunkt EXTRAS - OPTIONEN auf. Dort deaktivieren Sie im Register EDITOR das KontrollVBA-Entwicklungsumgebung mit einem neuen Modul feld VARIABLENDEKLARATION ERFORDERLICH. © HERDT-Verlag 21 4 Access 2010 für Windows - Automatisierung, Programmierung Option Compare Database Diese Anweisung legt die Sortierreihenfolge beim Vergleich von Zeichenfolgen fest. Näheres hierzu finden Sie im VBA-Hilfesystem unter dem Stichwort Option CompareAnweisung. Sie können die Vorgabe beibehalten. Option Explicit Diese Anweisung legt fest, dass Variablen vor ihrer ersten Verwendung deklariert werden müssen. Dies erleichtert Ihnen den Überblick über die verwendeten Variablen und hilft Ihnen, Fehler im späteren Programmablauf durch falsch geschriebene Variablennamen zu vermeiden. In das Code-Fenster schreiben Sie Ihren Programmtext. Die VBA-Entwicklungsumgebung erleichtert Ihnen dabei mit vielen Funktionen die Arbeit. Modul speichern f Wählen Sie in der VBA-Entwicklungsumgebung den Menüpunkt DATEI Datenbankname - SPEICHERN oder klicken Sie auf die Schaltfläche Alternative: STRG . S Das Modul wird zusammen mit allen anderen Modulen und Formularen in der Datenbankdatei gespeichert. Beim ersten Speichern erscheint ein Dialogfenster, in dem Sie den Namen des Moduls eingeben können . Standardmodul bearbeiten f Öffnen Sie im Navigationsbereich von Access die Kategorie MODULE. f Klicken Sie mit der rechten Maustaste auf das Modul, das Sie bearbeiten möchten. f Wählen Sie den Kontextbefehl ENTWURFSANSICHT. oder f Klicken Sie doppelt auf das Modul, das Sie bearbeiten möchten. Code-Fenster mit geladenem Modul Access öffnet die VBA-Entwicklungsumgebung und blendet das Code-Fenster mit dem Programmcode des ausgewählten Moduls ein. Standardmodul löschen f f Öffnen Sie im Navigationsbereich von Access die Kategorie MODULE. f Wählen Sie den Kontextbefehl LÖSCHEN. Klicken Sie mit der rechten Maustaste auf das Modul, das Sie löschen möchten. Alternative: ENTF Standardmodul löschen oder exportieren und löschen 22 f Markieren Sie im Projekt-Explorer der VBA-Entwicklungsumgebung das Modul, das Sie löschen möchten . f Rufen Sie den Kontextmenüpunkt ENTFERNEN VON Modulname auf. Der Projekt-Explorer © HERDT-Verlag 4 Mit Modulen arbeiten Das abgebildete Dialogfenster erscheint. Wählen Sie NEIN, um das Modul sofort zu löschen, oder JA, um das Modul in einer Datei zu speichern (exportieren) und dann aus dem Projekt zu löschen. Als Dateiformat wird eine ganz normale Textdatei mit dem Kürzel *.bas als Dateinamenserweiterung verwendet. Solche Abfrage vor dem Entfernen Dateien können jederzeit in Access-Projekte importiert werden und stehen dann wieder als Module zur Verfügung. Standardmodul exportieren f f Öffnen Sie das Modul, das Sie exportieren möchten, zum Bearbeiten im Entwurfsmodus. In der VBA-Entwicklungsumgebung wählen Sie den Menüpunkt DATEI - DATEI EXPORTIEREN. Alternative: STRG E Access öffnet das Fenster DATEI EXPORTIEREN. f Wählen Sie einen Dateinamen und ein Verzeichnis, um die Datei zu speichern, und bestätigen Sie die Auswahl mit OK. Access speichert das Modul in einer Textdatei mit der Endung *.bas für BASIC-Dateien, analog zum Vorgehen beim Löschen eines Moduls. Standardmodul kopieren f f f Öffnen Sie im Navigationsbereich von Access die Kategorie MODULE. Klicken Sie mit der rechten Maustaste auf das Modul, das Sie kopieren möchten. Wählen Sie den Kontextbefehl KOPIEREN. Alternativen: f STRG C oder Schaltfläche KOPIEREN (Register START, Gruppe ZWISCHENABLAGE) Wählen Sie den Kontextbefehl EINFÜGEN. Alternativen: STRG V oder Schaltfläche EINFÜGEN (Register START, Gruppe ZWISCHENABLAGE) Access fordert Sie in einem Fenster auf, einen Namen für die Kopie einzugeben. f 4.3 Geben Sie einen Namen ein und bestätigen Sie mit OK. Formular- und Berichtsmodule Formular- oder Berichtsmodul bearbeiten Jedem Formular und Bericht ist ein Klassenmodul zugeordnet. Dieses Klassenmodul wird Formular- oder Berichtsmodul genannt. In Formular- und Berichtsmodulen sind die Prozeduren zusammengefasst, die das betreffende Datenbankobjekt direkt betreffen. Meistens sollen diese Prozeduren auf bestimmte Vorgänge im Formular oder Bericht reagieren, wie den Klick auf eine Schaltfläche oder das Öffnen eines Berichts. Access erstellt Formular- und Berichtsmodule automatisch, wenn Sie eine Ereignisprozedur für das Formular oder den Bericht erstellen. Den Namen für diese Module legt Access dabei selbst fest: D Der Name eines Formularmoduls setzt sich immer aus dem Text Form_ und dem Namen des Formulars zusammen, zum Beispiel Form_Mitarbeiter. D Der Name eines Berichtsmoduls beginnt stets mit Report_. Danach folgt der Name des Berichts, zum Beispiel Report_Stundennachweis. f f Öffnen Sie das betreffende Formular oder den Bericht in der Entwurfsansicht. f Klicken Sie in der Gruppe TOOLS auf die Schaltfläche CODE ANZEIGEN Wählen Sie im Menüband das Register ENTWURF der FORMULAR- bzw. BERICHTSLAYOUTTOOLS. © HERDT-Verlag . 23 4 Access 2010 für Windows - Automatisierung, Programmierung Vom Entwurf zum Quellcode Access öffnet die VBA-Entwicklungsumgebung und stellt im Code-Fenster den Quellcode des entsprechenden Formular- oder Berichtsmoduls zur Bearbeitung bereit. Formular- oder Berichtsmodul löschen Im Normalfall bilden ein Formular oder ein Bericht im Vordergrund und das entsprechende Modul im Hintergrund ein Paar aus zwei zwar zusammengehörenden, aber doch eigenständigen Objekten. Für den Fall, dass es Formulare oder Berichte gibt, für die keinerlei Programmiercode notwendig ist, ist es möglich, ein Modul zu löschen. Ein erwähnenswerter Vorteil dieser Vorgehensweise ist, dass das Öffnen der Vordergrundobjekte, z. B. eines Formulars, erheblich schneller vor sich geht. f Öffnen Sie das betreffende Formular oder den Bericht im Entwurfsmodus. f Klicken Sie doppelt auf den Formularoder Berichtsmarkierer in der linken oberen Ecke. f Das Fenster mit der Liste der Eigenschaften des Formulars oder Berichts wird geöffnet. Alternative: Kontextmenüpunkt EIGENSCHAFTEN f Wählen Sie im Eigenschaftenfenster das Register ANDERE. f Im Listenfeld der Eigenschaft ENTHÄLT MODUL wählen Sie den Eintrag NEIN. f Es erscheint ein Warnhinweis. Bestätigen Sie diesen mit JA. Access löscht mit dem Formular- oder Berichtsmodul den gesamten dort enthaltenen Programmcode. Eventuell vorhandene Ereignisprozeduren oder Funktionen gehen damit verloren. 24 © HERDT-Verlag 4 Mit Modulen arbeiten 4.4 Prozeduren in VBA Prozedurtypen Prozedurtypen Die Hilfe von VBA unterscheidet zwischen FunctionProzeduren und Sub-Prozeduren. Alternativ dazu ist es auch möglich, von Funktionen und Prozeduren zu sprechen. Sub-Prozedur Function-Prozedur Allgemeine Prozedur Function-Prozeduren D D Werden in einer anderen Prozedur aufgerufen D Können in allen Modultypen erstellt werden Ereignisprozedur Prozedurtypen in Access Liefern einen Wert zurück, der einer Variablen zugewiesen werden kann Sub-Prozeduren D D Geben keinen Wert zurück Werden in allgemeine Prozeduren und Ereignisprozeduren unterteilt Allgemeine Prozeduren D D D Sind für die gesamte Datenbankanwendung gültig Werden in Standardmodulen erstellt Der Aufruf erfolgt durch eine andere Prozedur. Ereignisprozeduren D D Werden als Reaktion auf ein Ereignis ausgeführt (zum Beispiel Klicken auf eine Schaltfläche) Werden in Formular- oder Berichtsmodulen gespeichert 4.5 Schnellübersicht Was bedeutet …? Objekte Alle Elemente in Access Standardmodule Enthalten Prozeduren, die für die gesamte Datenbank Gültigkeit haben Formular- oder Berichtsmodule (Klassenmodule) Enthalten alle Ereignisprozeduren des betreffenden Formulars oder Berichts (Prozeduren sind mit dem Objekt verbunden.) Prozedur Anweisungen zum Durchführen einer Teilaufgabe; werden in Modulen gespeichert Sub-Prozedur Spezielle Prozedur, die keinen Rückgabewert liefert Function-Prozedur Prozedur, die einen Wert zurückliefert © HERDT-Verlag 25 4 Access 2010 für Windows - Automatisierung, Programmierung Sie möchten … ein Standardmodul erstellen Register ERSTELLEN, Gruppe MAKROS UND CODE, Schaltfläche ein Standardmodul bearbeiten Doppelklick auf das Modul im Navigationsbereich ein Standardmodul löschen Modul im Navigationsbereich markieren, ein Formular-/Berichtsmodul bearbeiten Formular oder Bericht in der Entwurfsansicht öffnen, Register FORMULARENTWURFTOOLS BZW. BERICHTSENTWURFSTOOLS - ENTWURF, Gruppe TOOLS, Schaltfläche ein Formular-/ Berichtsmodul löschen Eigenschaftenfenster des Formulars oder Berichts öffnen, Eigenschaft ENTHÄLT MODUL auf NEIN setzen 4.6 ENTF -Taste Übung Module erstellen, umbenennen und löschen Übungsdatei: Gehalt04.accdb Öffnen Sie die Datenbank Gehalt04.accdb und erstellen Sie ein neues leeres Modul. Schließen Sie die VBA-Entwicklungsumgebung, die sich durch die vorherige Aktion automatisch geöffnet hat. Sie sehen, dass Access noch kein neues Modul anzeigt. Öffnen Sie nun erneut die VBA-Entwicklungsumgebung; benutzen Sie dazu die Tastenkombination ALT 26 Ergebnisdatei: Gehalt04-E.accdb F11 . Speichern Sie die Datenbank, z. B. über den Menüpunkt DATEI - GEHALT04 SPEICHERN in der VBA-Entwicklungsumgebung. Geben Sie dem Modul den Namen AllgemeineProzeduren, wenn Access Sie dazu auffordert. Erstellen Sie ein neues Modul mit dem Namen Modul2, indem Sie das bestehende Modul kopieren. Löschen Sie das Modul Modul2. © HERDT-Verlag Mit Modulen arbeiten 4 © HERDT-Verlag 27