Erstellen Sie ein Standardmodul, Seite 131. Legen Sie Optionen fest oder deklarieren Sie Konstanten für ein Modul, Seite 133



Ähnliche Dokumente
ACCESS. Formulare per VBA referenzieren FORMULARE MIT VBA PROGRAMMIEREN FORMULARE PER VBA REFERENZIEREN BASICS

Access für Windows. Ricardo Hernández García 1. Ausgabe, 1. Aktualisierung, Dezember Automatisierung, Programmierung ACC2010P

Access Programmierung. Ricardo Hernández García. 1. Ausgabe, November 2013 ACC2013P

11.1 Warum überhaupt VBA?

Access für Windows. Andrea Weikert 1. Ausgabe, 4. Aktualisierung, Juni Grundlagen für Anwender

Makro + VBA 2007 effektiv

Michael Kolberg. einfach klipp & klar. Microsofft* Press

Microsoft Access 2010 Bilder

Formulare. Datenbankanwendung 113

Algorithmen und ihre Programmierung

Vorwort...10 Einleitung...12 Lernen Üben Anwenden...12 Inhalt und Aufbau des Buches...13 Inhalt...13 Aufbau Access 2007 (fast) alles ist

Als Einstieg in das Thema des Buches möchte ich Ihnen gleich zeigen, wie Sie ein kleines Makro definieren, das sich mit einem Meldungsfenster

13 Unterprogramme erstellen

Access für Windows. Ricardo Hernández García 1. Ausgabe, Dezember Automatisierung, Programmierung ACC2010P

Arrays. Arrays werden verwendet, wenn viele Variablen benötigt werden. Der Vorteil in Arrays liegt darin, dass man nur eine Variable deklarieren muss

4 Makros ausprobieren

Access Grundlagen für Anwender. Sabine Spieß, Andrea Weikert. 1. Ausgabe, 1. Aktualisierung, September Trainermedienpaket ACC2010_TMP

Kapitel 5 auf einen Blick

Word 2010 Formulare erstellen mit Inhaltssteuerelementen

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Verknüpfen & Einbetten von Daten

Abb. 1. Abb. 2. Schaltflächen Speichern und Bericht öffnen. Abb. 3.

Sie haben mehrere Möglichkeiten neue Formulare zu erstellen. Achten Sie darauf, dass das Objekt Formulare aktiviert ist: Klicken Sie auf.

Unterrichtseinheit 10

Das in Abb. 2 und Abb. 3 dargestellte Kombinationsfeld (Abb. 2 roter Kreis) wurde mit Hilfe des Kombinationsfeld-Assistenten

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Rückgabewerte von Methoden

3.1 Allgemeines. Abbildung 3.1: Eröffnungsmenü einer Excel-Mappe

Funktionen nur wenn dann

17 VBA-Praxisbeispiel

5 DATENSÄTZE SUCHEN, SORTIEREN UND

SERIENBRIEFE DAS PRINZIP DES SERIENDRUCKS

ProMaSoft.de WordPDFFormular Version (1.083) Seite 1 von 7

Zweitens über eine Abfrage, welche die Tabellen tblartikel und tbllieferanten verknüpft. Auf diese Weise würde das Kombinationsfeld

VBA Programmierung Einführung

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Anleitung zur Erstellung eines Serienbriefes

INFORMATIK TEIL: VBA. Infromatik WS 17/18 Teil: VBA. Allgemeines: - 4 Übungen á 3 Stunden

1. Im Hauptmenü wechseln Sie in den Punkt Liste. 2. Im Seitenbaum klicken Sie in den Menüpunkt, wo das Formular eingefügt werden soll.

Programmieren in Anwendungen

Visual Basic Express Fehlerermittlung

Im Original veränderbare Word-Dateien

Werte zu Kombinationsfeldern hinzufügen

Daten auf einem Formular zusammenführen

Erstellung von abhängigen Kombinationsfeldern mit dazugehörigen Unterformular...1

ACCESS. Access-Daten nach Excel verknüpfen INTERAKTIV ACCESS-DATEN NACH EXCEL VERKNÜPFEN BASICS

Access [basics] Aktionsabfragen per VBA ausführen. Beispieldatenbank. Aktionsabfragen. Die Execute-Methode. Datenzugriff per VBA

10 Anwenderfreundlich mit Makros

Überschrift/Caption. Eigenschaftenfenster

Schnellübersichten. ECDL Datenbanken mit Windows 10 und Access 2016

Funktionen in JavaScript

14. Es ist alles Ansichtssache

Übungsblatt 1. Java Vorkurs (WS 2017)

Skriptum Bauinformatik SS 2013 (Vorlesung IV)

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

Abb. 1. Abb. 2.

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Einfache Dialoge in VBA HARALD NAHRSTEDT. Erstellt am Bearbeitet am

Access Seminare. Excel Basismodule

Kapitel 3 Datentypen, Variablen und Konstanten

1 Einführung zur Windowsprogrammierung für das Programm Hallo mit Visual Studio.Net

Kennen, können, beherrschen lernen was gebraucht wird

MS Access 2010 Kompakt

Programmieren in Anwendungen

Objektorientiertes Programmieren (Java)

MiniPPS - Systembeschreibung

Xpert - Europäischer ComputerPass. Konrad Stulle, Andrea Weikert, Tanja Bossert. Datenbankanwendung (mit Access 2010)

Wichtige Standardaktionen durchführen

Seriendruck Einführung

Inhalt. Dokument Beschreibung. Bentley Technical Support ProStructures.Net - Zusatzprogrammierung Visual Basic Express PST_Bearbeitung_Dialog

Unterlagen, Literatur. Grundlegende Einstellungen. HILFE!? Wenn Excel nicht mehr so aussieht wie beim letzten mal!

Zarb Arbeitsblätter kreativ und schnell erstellen Netzwerk-Installation von Zarb 5 für Windows 1

VBA- Programmierung. Integrierte Lösungen mit Office Ricardo Hernández García. 1. Ausgabe, November 2013

Attributs-Wertverteilungen / Distribution of Distinct Values Seite 1 von 5

Anleitung zur Benutzung des Admin Control Panel

Schnellübersichten. Access 2016 Grundlagen für Anwender

Arbeiten mit einem Touchscreen. Voraussetzungen. Ein letztes Wort. Zur Beispieldatenbank

Access 2000 und MS SQL Server im Teamwork

Während in Tabellen die Daten gespeichert werden, sind Abfragen für die Darstellung und Auswertung der Daten zuständig.

Herunterladen von Schriftarten

Immo Meets Office Easy Office Storage Easy Outlook Storage Handbuch

3 Die Tabellen von PROJEKT. Tabellenerstellung in der Entwurfsansicht Dateneingabe direkt in die Tabelle Tabellen mit dem Tabellen-Assistenten anlegen

Access 2010 Programmierung Import und Export nach Excel

4 SERIENDRUCK. 4.1 Vorbereitung

Bilderverwaltung mit Access

Citrix Zugang Inhaltsverzeichnis

Nützliche Tastenkombinationen (Word)

DAS EINSTEIGERSEMINAR

Klausur WS 2014/15 EDV Anwendungen im Bauwesen. Name: Vorname: Matr.-Nr:

Programmieren lernen mit Visual Basic

Wichtige Standardaktionen durchführen

Access für Windows. Andrea Weikert 1. Ausgabe, Oktober Grundlagen für Anwender

Access Grundlagen für Anwender. Sabine Spieß. 1. Ausgabe, Dezember 2015 ISBN ACC2016

Fachbericht DPR. Name: René Wagener. Klasse: CI3O1. Fachlehrer: Herr Balog

Funktionen nur wenn dann

Anleitung zum Download der EBMG_Datei_9_2.xls

Stand Seite 1 von 19

Der Serienbrief bzw. Seriendruck

Projekt 3 Variablen und Operatoren

Transkript:

Erstellen Sie ein Standardmodul, Seite 131 Legen Sie Optionen fest oder deklarieren Sie Konstanten für ein Modul, Seite 133 Erstellen Sie allgemeine Subund Function-Prozeduren, Seite 134 bzw. Seite 138 Erstellen Sie eine Funktion, die eine Formulareigenschaft definiert, Seite 145 128

5 zzzzzzzzzzz zz In diesem Kapitel lernen Sie wie Sie ein Standardmodul erstellen. wie Sie allgemeine Sub- und Function-Prozeduren schreiben. wie Sie mithilfe von Argumenten Daten an eine Prozedur übergeben. wie Sie allgemeine Prozeduren in Code oder Ausdrücken von Formularen verwenden. Es ist faszinierend zu beobachten, wie kleine Kinder das Sprechen lernen. Lange bevor sie überhaupt etwas von Grammatik und Satzstrukturen wissen, können sie bereits Sätze bilden. Ohne die Sprachregeln zu kennen, können sie kommunizieren. Sobald sie aber etwas lesen oder schreiben wollen, müssen sie zumindest etwas über die Sprache lernen. Programmiersprachen haben einiges mit der menschlichen Sprache gemeinsam. Beide verfügen über ein umfangreiches Vokabular und über komplexe Grammatikregeln. Wie Sie aber in den vorhergehenden Kapiteln gesehen haben, können Sie mit Visual Basic arbeiten, sogar Anwendungen erstellen und anpassen, ohne viel über die Regeln der Programmiersprache erfahren zu haben. Um Visual Basic effizient einsetzen zu können, ist es an der Zeit, mehr über die Regeln und Komponenten dieser Programmiersprache zu lernen. Bisher haben Sie einen groben Überblick darüber erhalten, welche Aufgaben Sie mit Visual Basic durchführen können. In diesem Kapitel erfahren Sie mehr über die grundlegenden Bausteine von Visual Basic für Applikationen Module und Prozeduren, und Sie lernen, wie Sie sie zusammen einsetzen, um flexible, leistungsstarke Anwendungen zu erstellen. Es werden neue Begriffe eingeführt, und im gesamten Teil B lernen Sie weitere Regeln der Visual Basic-Programmierung sowie die Werkzeuge kennen, die Microsoft Access zur Erstellung von Modulen zur Verfügung stellt. 129

05Kontaktverwaltung.mdb z Sie arbeiten in diesem Kapitel mit der Übungsdatei 05Kontaktverwaltung.mdb, die Sie von der CD-ROM installiert haben, die in diesem Buch enthalten ist. Weitere Informationen zur Installation der Übungsdateien finden Sie unter Vorbereitungen am Anfang dieses Buchs. Die ersten Schritte @? Starten Sie Microsoft Access, und öffnen Sie im Ordner mit den Übungsdateien die Datenbank 05Kontaktverwaltung. Module und Prozeduren verstehen Bis jetzt haben Sie ausschließlich mit Ereignisprozeduren für bereits vorhandene Formulare gearbeitet. Da Formulare die Dreh- und Angelpunkte in Microsoft Access-Anwendungen darstellen, werden Sie vermutlich häufig mit dieser Prozedurform arbeiten. Es gibt aber noch einen anderen wichtigen Prozedurtyp, den Sie in diesem Kapitel kennen lernen die allgemeine Prozedur. Diese Prozeduren werden nicht automatisch als Reaktion auf ein Ereignis ausgeführt. Sie müssen explizit gestartet werden, indem Sie in einem Formular oder in einem Bericht in einem Ausdruck auf die Prozedur verweisen, oder indem Sie die Prozedur in Visual Basic-Code verwenden. Warum allgemeine Prozeduren erstellen? Stellen Sie sich allgemeine Prozeduren als eine Art unterstützendes Werkzeug in Ihren Anwendungen vor. Die meisten Aufgaben könnten in Microsoft Access auch lediglich mit Ereignisprozeduren ausgeführt werden. Mit allgemeinen Prozeduren erstellen Sie aber effektivere Lösungen, da damit die Flexibilität der Anwendung wächst. Allgemeine Prozeduren können auf unterschiedliche Art und Weise eingesetzt werden: Komplexe Aufgaben ausführen, die nicht in einen Ausdruck passen Wenn Sie bereits Ausdrücke zum Definieren von Eigenschaften in Formularen oder Berichten verwendet haben, dann wissen Sie, dass Ausdrücke schnell sehr groß und unübersichtlich werden. Sie können diese Komplexität verbergen, indem Sie eigene, mit denen die benötigte Aufgabe ausgeführt wird. Anschließend beziehen Sie sich in Ausdrücken auf diese Funktion. Darüber hinaus können Sie mithilfe von Visual Basic-Code Operationen ausführen, die mit Ausdrücken nicht möglich sind. Programmcode wieder verwenden, um eine Aufgabe zu wiederholen Mit Ereignisprozeduren werden häufig dieselben oder ähnliche Aktionen zu unterschiedlichen Zeitpunkten ausgeführt. So wird beispielsweise häufig eine Meldung für den Benutzer ausgegeben. Natürlich können Sie 130

z den entsprechenden Code in neue Ereignisprozeduren kopieren. Dies ist aber nicht sehr effizient. Stattdessen erstellen Sie eine allgemeine Prozedur, in der eine allgemeine Aufgabe ausgeführt wird, und verwenden sie in jeder Prozedur, die diese Aufgabe ausführt. Programmieraufgaben in überschaubare Einheiten unterteilen Wenn Sie den gesamten Programmiercode in Ereignisprozeduren schreiben müssten, würden diese sehr lang und unübersichtlich werden. Wenn Sie einzelne Prozeduren für jede Teilaufgabe schreiben, wird das Ganze übersichtlicher und einfacher zu schreiben und zu verstehen. Standardmodule und Formularmodule Sie können allgemeine Prozeduren entweder in Formular- und Berichtsmodulen (Klassenmodule) zusammen mit Ereignisprozeduren oder in Standardmodulen ablegen. Standardmodule stellen separate Datenbankobjekte dar, die eine oder mehrere Prozeduren enthalten können. Meistens enthalten sie so genannte Utility- oder Hilfsfunktionen, die in unterschiedlichen Programmsituationen verwendet werden können. Ein Standardmodul kann beispielsweise mehrere allgemeine Funktionen für das Arbeiten mit Daten in Visual Basic enthalten. Sie kopieren dann ein solches Modul einfach in die Anwendung, in der Sie es benötigen. Wenn Sie eine allgemeine Prozedur in einem Formular- oder Berichtsmodul ablegen, gehört sie zu dem entsprechenden Formular bzw. zu dem entsprechenden Bericht. Meistens werden Sie diese Prozedurform nur in dem Formular oder dem Bericht selbst verwenden, sei es in Ausdrücken oder in anderen Prozeduren desselben Moduls. Erstellen Sie diese Prozedurart zum Ausführen einer Aufgabe, die sich direkt auf das Formular bezieht um beispielsweise mit Daten in den Formularfeldern zu arbeiten. Allgemeine Prozeduren, die in ein Standardmodul eingefügt werden, gehören in der Regel zur Anwendung als Ganzes. Erstellen Sie diese Prozedurart, um eine Aufgabe auszuführen, die auf mehrere Formulare oder Berichte angewendet werden kann. Allgemeine Prozeduren in einem Standardmodul erstellen Eine Datenbank kann ein oder mehrere Standardmodule enthalten. Jedes Standardmodul kann sich wiederum aus vielen Prozeduren zusammensetzen. In der Regel werden alle Prozeduren für eine spezielle Aufgabe in einem Modul zusammengefasst. In der folgenden Übung erstellen Sie ein Modul, in dem zwei Prozeduren abgelegt werden, mit denen Meldungen ausgegeben werden. 131

Abbildung 5.1 Das neue Standardmodul z Ein neues Standardmodul erstellen @1 Klicken Sie im Datenbankfenster auf das Objekt Module. Bei Standardmodulen handelt es sich, wie bei Tabellen oder Formularen, um Objekte im Datenbankfenster. @2 Klicken Sie auf die Schaltfläche Neu. Microsoft Access erstellt ein neues Standardmodul und zeigt es im Codefenster an. Sie können nun Visual Basic-Code eingeben und eine neue allgemeine Prozedur erstellen. Der Deklarationsbereich Ein neues Modul enthält keine Prozeduren. Stattdessen gibt es dort, wie bei allen Modulen, einen speziellen Bereich den Deklarationsbereich. In diesem Bereich deklarieren Sie Variablen und Konstanten und geben einleitenden Code ein, der sich auf das gesamte Modul bezieht. Codezeilen im Deklarationsbereich eines Standardmoduls können sich sogar auf alle Module einer Anwendung beziehen. Wie Sie in Abbildung 5.1 sehen, fügt Visual Basic automatisch die Anweisung Option Compare Database in den Deklarationsbereich des Moduls ein. Diese Anweisung verwendet das Schlüsselwort Option, mit der eine Option für das gesamte Modul festgelegt wird. Es gibt noch weitere Anweisungen, die mit dem Schlüsselwort Option beginnen. Mit der Option Compare wird die Methode bestimmt, mit der Microsoft Access Zeichenfolgen im Modul vergleicht. Sie kann auf Database, Text oder Binary gesetzt werden. Mit der Option Database werden Zeichenfolgen in der Sortierreihenfolge verglichen, die in der Datenbank definiert ist im Unterschied zur herkömmlichen Sortierreihenfolge in Visual Basic, die zwischen Groß- und Kleinbuchstaben unterscheidet. Da die 132

z Anweisung Option Compare Database in den meisten Anwendungen eingesetzt werden kann, sollten Sie diese Programmzeile unverändert lassen. Eine Visual Basic-Option für das Modul festlegen Ihnen steht noch eine weitere Option zur Verfügung, die Sie mit dem Schlüsselwort Option festlegen können: die Option Explicit. Mit dieser Option werden alle Variablennamen geprüft, die im Modul verwendet werden. Damit ist gewährleistet, dass sie auch wirklich deklariert sind. Wenn Sie diese Anweisung aus dem Deklarationsbereich eines Moduls löschen, wird Ihre Anwendung anfälliger für Fehler, da z.b. Tippfehler bei der Eingabe von Variablen nicht mehr automatisch erkannt werden. Weil diese Anweisung so überaus hilfreich ist, sollten Sie eine spezielle Einstellung vornehmen, damit in jedem Modul, das Sie in Visual Basic erstellen, automatisch diese Option bereits eingefügt wird. @1 Drücken Sie [Rücktaste], um die Einfügemarke in die vorherige Zeile im Modul zu setzen. @2 Geben Sie Option Explicit ein, und drücken Sie dann zweimal [Eingabe]. Damit haben Sie die Option für dieses eine Modul festgelegt. Im Folgenden legen Sie die Option für alle Module fest, die Sie ab jetzt erstellen. @3 Wählen Sie im Menü Extras den Befehl Optionen. @4 Klicken Sie im Register Editor auf das Kontrollkästchen Variablendeklaration erforderlich, um es zu aktivieren. @5 Klicken Sie auf OK. Ab jetzt wird jedes Modul, das Sie erstellen, die Zeile Option Explicit enthalten, und Sie werden stets Meldungen erhalten, wenn der Code nicht deklarierte oder falsch geschriebene Namen enthält. Konstantenwerte deklarieren Eine weitere Anweisung, die im Deklarationsbereich von Modulen eingefügt werden kann, ist die Anweisung Const. Damit wird eine Konstante deklariert. Stellen Sie sich eine Konstante wie eine Variable vor, mit dem Unterschied, dass der Wert einer Konstanten nach der Deklaration nicht mehr geändert werden kann er ist konstant. Sie haben bereits in den vorhergehenden Kapiteln mit Konstanten gearbeitet, z.b. mit der Konstanten vbcancel. Ihre eigenen Konstanten funktionieren genauso; Sie bestimmten aber ihren Namen und den Wert selbst. Stellen Sie sich eine Konstante als einen Platzhalter für einen bestimmten Wert vor, der lediglich das Verweisen im Code einfacher und verständlicher machen soll. 133

Abbildung 5.2 Das Standardmodul mit der Konstanten für den Anwendungsnamen z Eine Konstante für den Anwendungsnamen deklarieren Angenommen, Sie möchten eine Konstante deklarieren, die den Namen der Anwendung enthält, den Sie in den Prozeduren des Moduls verwenden werden. @? Geben Sie Const conappname = "Kontaktpersonen-Verwaltung" ein, und drücken Sie [Eingabe]. Damit ersetzt Visual Basic jedes Mal das Schlüsselwort conappname durch diesen Zeichenfolgewert. Sollten Sie zu einem späteren Zeitpunkt den Namen der Anwendung ändern wollen, müssen Sie ihn lediglich einmal korrigieren und nicht im gesamten Modul. Eine im Deklarationsbereich deklarierte Konstante steht im gesamten Modul zur Verfügung. Soll eine Konstante nur in einer bestimmten Prozedur verwendet werden, ist es zu empfehlen, die Konstante in der entsprechenden Prozedur zu deklarieren. Wenn Sie vorhaben, eine Konstante in der gesamten Datenbank zu verwenden, sollten Sie anstelle der Anweisung Const die Anweisung Global Const verwenden. Fügen Sie eine solche Anweisung nur im Deklarationsbereich eines Standardmoduls ein. Eine Sub -Prozedur erstellen In den vorhergehenden Kapiteln haben Sie bereits Ereignisprozeduren erstellt und in Visual Basic Code für die Ereignisprozeduren eingegeben. Das Erstellen von allgemeinen Prozeduren funktioniert genauso, ist aber flexibler. Während nämlich die Attribute einer Ereignisprozedur Name, Typ und Argumente von Visual Basic vorgegeben werden, wählen Sie die Attribute einer allgemeinen Prozedur selbst aus. 134

Abbildung 5.3 Das Dialogfeld Prozedur einfügen Abbildung 5.4 Die Sub-Prozedur DisplayMessage wurde eingefügt. z Die DisplayMessage -Prozedur erstellen In der folgenden Übung erstellen Sie eine allgemeine Prozedur, mit der eine Meldung angezeigt wird eine allgemeine Aufgabe, die mithilfe der Prozedur einfacher auszuführen ist. @1 Klicken Sie in der Symbolleiste auf den Pfeil neben der Schaltfläche Modul einfügen (sie enthält das Symbol der Schaltfläche, die Sie hier zuletzt gewählt haben), und wählen Sie Prozedur. Das Dialogfeld Prozedur hinzufügen wird geöffnet. Geben Sie dort den Namen ein, und legen Sie den gewünschten Prozedurtyp fest. @2 Geben Sie in das Textfeld Name DisplayMessage ein. @3 Klicken Sie auf OK. Da der Standardprozedurtyp Sub ist, erstellt Visual Basic eine neue Sub- Prozedur und zeigt deren Programmzeilen Sub und End Sub unter dem Deklarationsbereich des Moduls an. 135

Abbildung 5.5 Geben Sie den Namen der Meldung im Direktfenster ein. z Code in die Prozedur eingeben @1 Geben Sie die folgende Codezeile in die Prozedur ein: Eine wichtige Meldung für den Anwender anzeigen MsgBox "Dies ist wichtig!", vbexclamation, conappname Mit dieser Codezeile wird über die Anweisung MsgBox eine Meldung angezeigt. Das Meldungsfenster soll das Ausrufezeichensymbol (vbexclamation) und im Titel den Namen der Anwendung (conappname) enthalten. @2 Klicken Sie in der Symbolleiste auf die Schaltfläche Speichern. @3 Geben Sie im Textfeld Modulname Meldungen ein, und bestätigen Sie mit OK. Das Modul wird in der Kontaktverwaltungsdatenbank gespeichert. Die Prozedur im Testfenster testen Sie können allgemeine Prozeduren wie DisplayMessage im Direktfenster testen. @1 Wählen Sie im Menü Ansicht den Befehl Direktfenster. Sie können das Direktfenster unten oder seitlich im Visual Basic-Fenster verankern, oder es als frei schwebendes Fenster geöffnet lassen. Um mehr Platz im Codefenster zu haben, sollten Sie das Direktfenster unverankert über das Visual Basic-Fenster legen. @2 Ziehen Sie hierzu die Titelleiste des Direktfensters bis zur Mitte des Visual Basic-Fensters, und ordnen Sie das Fenster in Größe und Position so an, dass Sie so viel wie möglich vom Code sehen können. @3 Geben Sie DisplayMessage ein. @4 Drücken Sie [Eingabe]. Die Prozedur wird ausgeführt und die Meldung angezeigt. @5 Klicken Sie auf OK. 136

Abbildung 5.6 Die von Ihnen definierte Meldung wird angezeigt mit Ausrufezeichensymbol und dem Namen der Anwendung in der Titelleiste. z Nachdem die Prozedur ausgeführt ist, wird erneut das Visual Basic-Fenster angezeigt. Argumente in eine Prozedur einfügen So weit funktioniert die Prozedur ganz gut. Es dürfte für den Benutzer aber auf Dauer ermüdend sein, dass immer dieselbe Meldung angezeigt wird. Sie benötigen eine flexible Prozedur, in der gewählt werden kann, welche Meldung angezeigt werden soll. Hierfür müssen Argumente in die Prozedur eingefügt werden. Ein Argument in die DisplayMessage -Prozedur einfügen @1 Klicken Sie im Fenster 05Kontaktpersonenverwaltung - Meldungen (Code) zwischen die runden Klammern in der Sub-Anweisung, und geben Sie strmessage As String ein. Public Sub DisplayMessage(strMessage As String) Damit wird angezeigt, dass Sie an die DisplayMessage-Prozedur Daten übergeben wollen, sprich die Meldung, die angezeigt werden soll. Das Argument besagt weiter, dass es sich um eine Zeichenfolge handelt, und dass die Zeichenfolge die Bezeichnung strgmessage trägt. @2 Bearbeiten Sie die MsgBox-Zeile, indem Sie die Meldungszeichenfolge durch ein Argument ersetzen durch die Variable strmessage, die Sie soeben im Prozedurkopf deklariert haben. MsgBox strmessage, vbexclamation, conappname Wann immer nun Visual Basic die Anweisung MsgBox ausführt, wird der aktuelle Wert der Variablen strmessage verwendet und nicht stets dieselbe Zeichenfolge. Die Prozedur mit einem Argument starten Wenn Sie eine Prozedur mit einem Argumentwert starten, wird das Argument an die Prozedur übergeben. @1 Wechseln Sie zum Direktfenster, indem Sie auf dessen Titelleiste klicken. @2 Geben Sie dort DisplayMessage "Ich kann hier sagen, was ich will!" ein, und drücken Sie [Eingabe]. 137

Abbildung 5.7 Mit dem Argument strmessage können Sie eine beliebige Meldung anzeigen lassen. z Die Prozedur wird ausgeführt und verwendet die Zeichenfolge, die Sie mit dem Argument strmessage übergeben haben. @3 Klicken Sie auf OK. Eine Function -Prozedur erstellen Mit der gerade erstellten Prozedur wird eine Aktion ausgeführt. Es werden aber keinerlei Daten an das Programm zurückgegeben. Eine noch allgemeinere Form der allgemeinen Prozedur ist eine Function-Prozedur. Mit einer Function-Prozedur wird ein Wert an die Prozedur zurückgegeben, mit der die Funktion ausgeführt wird. Sie haben bereits mit einigen in Microsoft Access integrierten Funktionen gearbeitet, z.b. mit der Funktion IsNull. Im Folgenden werden Sie eigene, die Sie in Microsoft Access oder in Visual Basic-Code verwenden können. Eine Prozedur erstellen, die eine Bestätigung abfragt In Kapitel 4 haben Sie bereits mit der Funktion MsgBox abgefragt, ob der Datensatz auch ohne Postleitzahl gespeichert werden soll. In der folgenden Übung erstellen Sie eine allgemeine Funktion Confirm, mit der dieselbe Aufgabe für jede Aktion ausgeführt wird, für die eine Bestätigung erforderlich ist. @1 Wechseln Sie zum Fenster 05Kontaktpersonenverwaltung - Meldungen (Code). @2 Klicken Sie in der Symbolleiste auf die Schaltfläche Prozedur einfügen. @3 Geben Sie im Textfeld Name Confirm ein. @4 Klicken Sie im Gruppenfeld Typ auf das Optionsfeld Function und anschließend auf OK. Visual Basic erstellt eine neue Funktion und zeigt deren Function- und End Function-Anweisung an. @5 Geben Sie strmessage as String in die runden Klammern der Function- Anweisung und As Boolean am Zeilenende ein. Public Function Confirm(strMessage As String) As Boolean 138

Abbildung 5.8 Die neue Funktion Confirm z Die Function-Deklaration im Einzelnen: Das Schlüsselwort Public am Zeilenanfang besagt, dass die Funktion in der gesamten Anwendung zur Verfügung steht. Würden Sie hier stattdessen das Schlüsselwort Private verwenden, könnte die Funktion Confirm nur innerhalb des Moduls Meldungen ausgeführt werden. Die Deklaration des Arguments in den runden Klammern besagt, dass die Meldung, die angezeigt werden soll, an die Prozedur übergeben wird (wie in der Prozedur DisplayMessage weiter oben in diesem Kapitel). Mit As Boolean am Ende der Function-Anweisung wird festgelegt, dass die Funktion einen bestimmten Wertetyp ausgegeben soll in diesem Fall Boolean zur Ausgabe von True oder False. Andere Ergebnisse sind mit diesem Wertetyp nicht möglich. @6 Geben Sie die folgenden Codezeilen zwischen die Anweisungen Function und End Function ein: Der Benutzer soll eine bestimmte Aktion bestätigen dabei wird True oder False zurückgegeben Dim bytchoice As Byte bytchoice = MsgBox(strMessage, vbquestion + vbokcancel, conappname) If bytchoice = vbok Then Confirm = True 139

Abbildung 5.9 Die Funktion Confirm gibt diese Meldung aus. z Else Confirm = False End If Die Codezeilen im Einzelnen: Zunächst wird mit der Anweisung Dim die Variable bytchoice definiert, in der die Zahl abgelegt werden soll, die die Funktion MsgBox zurückgibt. Danach wird die Funktion MsgBox aufgerufen, das Argument strmessage an die Funktion übergeben und die Optionen mit den integrierten Konstanten vbquestion und vbokcancel festgelegt. Mithilfe dieser Konstanten werden im Meldungsfeld das Fragezeichensymbol sowie die beiden Schaltflächen OK und Abbrechen angezeigt. Abschließend wird in der Funktion eine If...Then-Anweisung ausgeführt um zu prüfen, ob der Benutzer die Schaltfläche OK gewählt hat. Hierbei wird abgefragt, ob die Variable bytchoice der integrierten Konstanten vbok entspricht. Ist dies der Fall, wird das Ergebnis für die Confirm-Funktion auf True gesetzt, ansonsten auf False. Um den Wert zu definieren, den eine Funktion ausgeben soll, schreiben Sie den Funktionsnamen, ein Gleichheitszeichen sowie den Wert. Der Wert muss dem Datentyp der Funktion entsprechen in diesem Fall Boolean. Die Confirm-Funktion testen Testen Sie die Funktion im Direktfenster. Um den Wert einer Funktion im Direktfenster anzuzeigen, geben Sie ein Fragezeichen und dann den Funktionsnamen ein. Die Argumente für die Funktion müssen in runde Klammern gesetzt werden. @1 Wechseln Sie zum Direktfenster. @2 Geben Sie?Confirm("Ist alles OK?") ein, und drücken Sie [Eingabe]. Die Prozedur wird gestartet. Sie übergibt den angegebenen Zeichenfolgewert an das Argument strmessage und zeigt das Meldungsfeld mit den angegebenen Optionen an. @3 Klicken Sie auf OK. 140

Abbildung 5.10 Da der Benutzer auf OK geklickt hat, wird im Direktfenster als Ergebnis der Funktion Wahr angezeigt. z Im Direktfenster wird der Wert der Funktion Confirm angezeigt. @4 Drücken Sie sechs Mal [Rücktaste], um das Ergebnis zu löschen und die Einfügemarke an das Zeilenende?Confirm... zu setzen, und drücken Sie [Eingabe]. @5 Klicken Sie auf Abbrechen. Da Sie die Meldung nicht mit OK bestätigt haben, wird im Testfenster als Ergebnis für die Confirm-Funktion Falsch ausgegeben. @6 Schließen Sie das Direktfenster. @7 Klicken Sie in der Symbolleiste auf die Schaltfläche Speichern. Sie haben nun zwei leistungsstarke allgemeine Prozeduren erstellt DisplayMessage und Confirm, die Sie in der gesamten Datenbank verwenden können. Darüber hinaus könnten Sie das Modul Meldungen auch in andere Datenbanken kopieren, d.h., diese Aufgaben müssten Sie zukünftig nicht mehr neu schreiben. Dies ist der große Vorteil von Standardmodulen. Bei Bedarf greifen Sie auf ein bereits erstelltes Standardmodul zurück und können es in jeder neuen Datenbank einsetzen. Allgemeine Prozeduren in Formularen Nun sollen die neuen Prozeduren eingesetzt werden. Da es sich dabei um allgemeine Prozeduren mit der Deklaration Public handelt, können Sie sie in jede beliebige Anwendung einbinden. In der folgenden Übung vereinfachen Sie Code im Formularmodul Kontaktpersonen, indem Sie auf die allgemeinen Prozeduren zurückgreifen. Das Formularmodul Kontaktpersonen öffnen Sie können das Formularmodul Kontaktpersonen öffnen, indem Sie Ereigniseigenschaften im Eigenschaftenfenster festlegen. Es geht aber auch einfacher. Klicken Sie dazu in der Symbolleiste auf die Schaltfläche Code, um zum Visual Basic-Code eines Formulars zu wechseln. @1 Wechseln Sie zu Microsoft Access. (Klicken Sie hierzu in der Symbolleiste auf die Schaltfläche Microsoft Access. 141

Abbildung 5.11 Das Formularmodul Kontaktpersonen, nachdem zur Ereignisprozedur Form_ BeforeUpdate geblättert wurde. z @2 Klicken Sie im Datenbankfenster auf das Objekt Formulare und dann auf das Formular Kontaktpersonen. @3 Klicken Sie in der Symbolleiste auf die Schaltfläche Code. Das Formular Kontaktpersonen wird in der Entwurfsansicht geöffnet. Anschließend wird das Formular in Visual Basic mit den enthaltenen Prozeduren angezeigt. Sie können nun in den Prozeduren blättern oder neuen Visual Basic-Code eingeben. Blättern Sie im Modul zur Ereignisprozedur Form_BeforeUpdate. Hiermit wird eine Meldung angezeigt, wenn der Benutzer eine Adresse, aber keine Postleitzahl eingegeben hat. Wenn der Benutzer in der Meldung auf Abbrechen klickt, wird die Aktualisierung abgebrochen, d.h., der Datensatz wird nicht gespeichert. Die Funktion Confirm einbinden Mit der Prozedur Form_BeforeUpdate wird eine einfache Aktion ausgeführt. Dennoch werden einige Variablen und Programmzeilen verwendet, die nicht direkt mit der Aufgabe zu tun haben, sondern sich auf die allgemeine Aufgabe beziehen, eine Meldung anzuzeigen, in der eine Benutzerantwort abgefragt wird. Da Sie bereits eine allgemeine Funktion erstellt haben, die diese Aufgabe erledigt, können Sie die Ereignisprozedur folgendermaßen vereinfachen. @1 Ersetzen Sie die drei Dim-Anweisungszeilen durch eine einzige Dim-Anweisung. Dim blnok As Boolean 142

Abbildung 5.12 Die mit der Funktion Confirm überarbeitete Ereignisprozedur z Damit wird die Variable blnok deklariert, in der der Wert abgelegt wird, den die Funktion Confirm übergibt. Da diese Funktion einen Wert des Typs Boolean übergibt (True oder False), muss auch die Variable diesem Datentyp entsprechen. @2 Ersetzen Sie die drei Zeilen, mit denen die Meldung definiert und angezeigt wird (nach der ersten If...Then-Anweisung), mit der folgenden Zeile: blnok = Confirm("Sie haben keine Postleitzahl eingegeben. Trotzdem speichern?") Mit dieser Zeile wird die Funktion Confirm aufgerufen, an die die Meldung, die angezeigt werden soll, übergeben wird. Der Rückgabewert der Funktion True, wenn der Benutzer auf OK geklickt hat, False, wenn der Benutzer auf Abbrechen geklickt hat wird in der Variablen blnok abgelegt. @3 Ersetzen Sie die zweite If...Then-Anweisung, in der abgefragt wird, welche Schaltfläche gewählt wurde, durch die folgende Zeile: If Not blnok Then Benutzer hat Abbrechen gewählt. In dieser Zeile wird abgefragt, ob der Benutzer auf OK oder auf Abbrechen geklickt hat. Da der Wert der Variablen blnok True lautet, wenn der Benutzer OK gewählt hat, ist die Bedingung Not blnok erfüllt (True), wenn der Benutzer Abbrechen gewählt hat. Klickt der Benutzer also in der Meldung auf die Schaltfläche Abbrechen, wird der Code unter der If...Then-Anweisung ausgeführt. Das heißt, das Feld Postleitzahl erhält den Fokus, und die Aktualisierung wird abgebrochen. Abbildung 5.12 zeigt die nunmehr stark vereinfachte Ereignisprozedur BeforeUpdate. 143

Abbildung 5.13 Die durch die Funktion Confirm generierte Meldung z Die Prozedur testen @1 Wechseln Sie zurück zu Microsoft Access. @2 Klicken Sie in der Symbolleiste auf die Schaltfläche Formularansicht. @3 Klicken Sie auf die Feldbeschriftung des Feldes Postleitzahl, um den Texteintrag zu markieren, und drücken Sie [Entf], um die Postleitzahl im aktuellen Datensatz zu löschen. @4 Drücken Sie [Umschalt]+[Eingabe], um den aktuellen Datensatz zu speichern. Das Ereignis BeforeUpdate findet statt und ruft die überarbeitete Ereignisprozedur auf. Diese arbeitet wie zuvor: Die Meldung wird angezeigt, in der der Benutzer wählen kann, ob er den Datensatz auch ohne Postleitzahl speichern möchte. Dieses Mal wurde die Meldung aber mithilfe der Funktion Confirm generiert. @5 Klicken Sie auf OK. Allgemeine Funktionen in einem Formularmodul Bisher haben Sie zwei allgemeine Funktionen erstellt und eine davon im Formular Kontaktpersonen verwendet. Angenommen, Sie haben eine Idee zu neuen Funktionen, die aber nur im Formular Kontaktpersonen sinnvoll verwendet werden können, z.b. Funktionen, mit denen Textwerte im Formular bearbeitet werden. Es macht in diesem Fall keinen Sinn, eine solche Funktionsprozedur in einem Standardmodul zu erstellen, da kein anderes Formular darauf zugreifen würde. In einem Standardmodul müssten Sie außerdem stets auf den entsprechenden Formularnamen verweisen, damit klar ist, auf welche Steuerelemente Sie sich beziehen. Es ist also besser, die Funktionsprozedur im Formularmodul direkt zu erstellen. In der folgenden Übung erstellen Sie allgemeine Funktionen, die speziell für das Formular Kontaktpersonen gelten. 144

z Die Funktion FullName erstellen In der Tabelle Kontaktpersonen gibt es zwei Namensfelder, eines für den Nachnamen und eines für den Vornamen und dies aus gutem Grund: In einer Datenbank, die nur ein Feld für den Namen zur Verfügung stellt, kann man nur schwer nach Nachnamen suchen und sortieren. Aber angenommen, Sie benötigen häufig eine Möglichkeit, sich auf den gesamten Namen der aktuellen Kontaktperson zu beziehen, sei es in einem Ausdruck oder in Programmcode. Für diese Fälle schreiben Sie eine einfache allgemeine Funktion für das Formular, das den gesamten Namen als Ergebnis ausgibt. Anschließend können Sie sich einfach auf das Ergebnis beziehen, um den vollständigen Namen zu erhalten. @1 Wechseln Sie zu Visual Basic. (Klicken Sie hierzu in der Windows- Taskleiste auf die Schaltfläche Microsoft Visual Basic 05Kontaktverwaltung.) Bisher haben Sie eine Prozedur erstellt, indem Sie in der Symbolleiste auf eine Schaltfläche geklickt haben. Zum Erstellen einer neuen Prozedur ist aber nicht unbedingt ein Befehl notwendig. Sie können den Prozedurkopf auch direkt im Codefenster eingeben. @2 Drücken Sie [Strg]+[Ende], um zum Modulende zu blättern. @3 Geben Sie den folgenden Funktionskopf ein: Private Function FullName() As String Wenn Sie [Eingabe] drücken, wird die neue Prozedur erstellt. Visual Basic fügt automatisch die Anweisung End Function ein. (Unter Umständen müssen Sie im Codefenster nach unten blättern, um die Zeile anzuzeigen.) Wie im Prozedurkopf deklariert, gibt die Funktion FullName einen Zeichenfolgewert als Ergebnis aus. Das Schlüsselwort Private besagt, dass sich die Funktion nur auf das Formularmodul Kontaktpersonen bezieht, d.h. nicht aus anderen Formularen heraus aufgerufen werden soll. @4 Geben Sie die folgende Zeile ein: FullName = Vorname & & Nachname In dieser Zeile wird der Wert des Feldes Vorname mit einem Leerzeichen und dem Wert des Feldes Nachname verkettet, und dieser Wert soll von der Funktion übergeben werden. Die Funktion FullName in einem Ausdruck verwenden Das Formular Kontaktpersonen enthält ein berechnetes Feld, in dem der vollständige Name der Kontaktperson angezeigt wird. Dieses Feld befindet sich oben auf Seite 2 des Formulars. Deren Eigenschaft Steuerelementinhalt ist auf einen Ausdruck gesetzt, in dem die beiden Namensfel- 145

Abbildung 5.14 Im Feld Kontaktperson wird der vollständige Name des aktuellen Datensatzes angezeigt. Abbildung 5.15 Im Einstellungsfeld Steuerelementinhalt werden in einem Ausdruck der Vorname, ein Leerzeichen und der Nachname miteinander verkettet. z der verkettet sind. Da Sie nun aber eine Funktion für diese Aufgabe erstellt haben, können Sie als Inhalt des Steuerelements die Funktion definieren. Dies ist eine typische Situation für das Einbinden einer privaten Funktion in ein Formularmodul: Sie wollen sich auf eine Berechnung in einem Formularausdruck beziehen. @1 Wechseln Sie zurück zu Microsoft Access. @2 Klicken Sie unten im Formular auf die Schaltfläche Seite 2. Sie bearbeiten jetzt das Steuerelement Kontaktperson, um die neue Funktion einzubinden. @3 Klicken Sie in der Symbolleiste auf die Schaltfläche Entwurfsansicht. @4 Blättern Sie im Formular ein wenig nach unten, und klicken Sie auf das Textfeld Kontaktperson. @5 Wenn das Eigenschaftenfenster nicht angezeigt wird, klicken Sie in der Symbolleiste auf die Schaltfläche Eigenschaften. @6 Klicken Sie im Eigenschaftenfenster auf das Register Daten. Die Eigenschaft Steuerelementinhalt enthält einen ziemlich langen Ausdruck, den Sie mithilfe der neuen Funktion vereinfachen können. 146

@7 Geben Sie im Einstellungsfeld Steuerelementinhalt =FullName() ein. Damit wird die Funktion FullName aufgerufen, wenn das Steuerelement Kontaktperson aktualisiert wird, und der Wert der Funktion im Steuerelement übernommen. z @8 Schließen Sie das Eigenschaftenfenster. @9 Klicken Sie in der Symbolleiste auf die Schaltfläche Formularansicht. @a Klicken Sie unten im Formular auf die Schaltfläche Seite 2. Im Steuerelement Kontaktperson wird wie bisher der vollständige Name des aktuellen Datensatzes angezeigt. Im Unterschied zu vorher wird der vollständige Name aber von der Funktion FullName übergeben. In diesem Beispiel ginge es selbstverständlich auch ohne die Funktion vor allem deshalb, weil der Assistent den Steuerelementausdruck erstellt hat. Aber nun können Sie diese Funktion im gesamten Formular in Ausdrücken oder Visual Basic-Code verwenden. Die Funktion FullAddress erstellen Angenommen, Sie möchten den vollständigen Namen und die vollständige Adresse in einem Feld verbinden. Im Unterschied zur Funktion Full- Name, die nur im Formular Kontaktpersonen verwendet wird, soll die neue Funktion außerhalb des Formulars aufgerufen werden, um die Adresse z.b. in ein anderes Formular oder einen Bericht zu übernehmen. Damit die Funktion auch außerhalb des Formulars zur Verfügung steht, deklarieren Sie sie mit dem Schlüsselwort Public. @1 Wechseln Sie zu Visual Basic. @2 Klicken Sie unterhalb der Zeile End Function der Funktion FullName, und geben Sie die folgenden Zeilen ein (mit Ausnahme der Zeile End Function, die automatisch nach dem Eingeben des Funktionskopfes eingefügt wird): Public Function FullAddress() As String Gibt einen String zurück, der den vollständigen Namen und die Adresse enthält. Wenn Name oder Adresse nicht vorhanden, leeren String zurückgeben If IsNull(Nachname) Or IsNull(Adresse) Then FullAddress = " Else Adressstring erstellen FullAddress = FullName & vbnewline & _ Adresse & vbnewline & _ Postleitzahl & & Ort 147

z End If End Function In der Funktion gibt es Folgendes zu beachten: In der Anweisung If...Then wird abgefragt, ob im Formular Werte für die Felder Nachname oder Adresse enthalten sind. Ist dies nicht der Fall, wird eine leere Zeichenfolge ausgegeben. Enthält eines der Felder oder beide Felder Werte, wird der Adressstring durch Verkettung des vollständigen Namens, der Adresse, der Postleitzahl und des Ortes erstellt. In der Else-Anweisung wird der Adressstring erstellt. Da der Code zu lang ist, um in eine Zeile zu passen, wird er auf drei Zeilen verteilt. Hierzu verwenden Sie das Zeilenfortsetzungszeichen der Unterstrich (_), der am Zeilenende eingefügt wird. Wenn Sie also Code in einer neuen Zeile fortsetzen möchten, geben Sie ein Leerzeichen und den Unterstrich ein und fahren in der neuen Zeile fort. Visual Basic interpretiert die Codezeilen als eine einzige Zeile. Die Else-Anweisung enthält die weiter oben erstellte Funktion Full- Name, mit der der vollständige Name ausgegeben wird. In einem Ausdruck müssen Sie vor dem Funktionsnamen ein Gleichheitszeichen und nach dem Funktionsnamen ein rundes Klammerpaar () setzen; in Visual Basic-Code genügt dagegen die Angabe des Funktionsnamens, um eine Funktion ohne Argumente aufzurufen. Unter der Else-Anweisung werden die Felder verkettet und die benötigten Leerzeichen zwischen den Feldern definiert. Damit der Name und die Adresse in drei Zeilen ausgegeben wird, verwenden Sie die Visual Basic-Konstante vbnewline, mit der ein Zeilenvorschub definiert wird. Im Adressstring wird also in der ersten Zeile der vollständige Namen, in der zweiten Zeile die Straße (Feld Adresse) und in der dritten Zeile die Postleitzahl, ein Leerzeichen und abschließend der Ort ausgegeben. Die Funktion FullAddress im Direktfenster testen Nun können Sie im gesamten Formular in Ausdrücken oder Visual Basic-Code auf diese Funktion Bezug nehmen. Sie können jetzt beispielsweise ein Steuerelement erstellen, in dem der vollständige Name und die Adresse ausgegeben werden. Da Sie die Funktion mit dem Schlüsselwort Public deklariert haben, können Sie die Funktion auch außerhalb des Formulars Kontaktpersonen verwenden, z.b. im Testfenster. @1 Wählen Sie im Menü Ansicht den Befehl Direktfenster. @2 Geben Sie?Forms!Kontaktpersonen.FullAddress ein. 148

Abbildung 5.16 Vorname, Nachname, Adresse, Postleitzahl und Ort werden zu einem Feld zusammengefasst. z Mit dem Ausdruck Forms!Kontaktpersonen wird Bezug auf das Formular Kontaktpersonen genommen. Um eine als Public deklarierte Funktion zu verwenden, geben Sie nach dem Formularnamen einen Punkt und den Funktionsnamen ein. (Falls die Funktion Argumente enthält, setzen Sie sie hinter den Funktionsnamen in runde Klammern.) @3 Drücken Sie [Eingabe]. Die Funktion FullAddress wird ausgeführt, d.h., die Namens- und Adressfelder des aktuellen Datensatzes werden verkettet. Der Wert der Funktion wird im Testfenster ausgegeben. Da die Funktion FullAddress auf mehrere Werte im Formular Kontaktpersonen Bezug nimmt, muss immer dann, wenn Sie die Funktion verwenden, das Formular in der Formularansicht geöffnet sein. Ist das Formular in der Entwurfsansicht geöffnet, verursacht die Funktion einen Fehler. Sollte dies bei Ihnen der Fall sein, wechseln Sie im Kontaktpersonenformular in die Formularansicht, und testen Sie dann die Funktion erneut im Testfenster. Die Funktion FullName im Testfenster testen Es ist also überhaupt kein Problem eine Public-Funktion außerhalb des Formulars aufzurufen. Was ist aber mit der Funktion FullName. Diese wurde mit dem Schlüsselwort Private deklariert. @1 Geben Sie im Testfenster?Forms!Kontaktpersonen.FullName ein, und drücken Sie [Eingabe]. Microsoft Access gibt eine Fehlermeldung bezüglich eines anwendungsoder objektdefinierten Fehlers aus. Dies bedeutet, dass das Formular zu einer Aktion aufgefordert wurde, die es nicht ausführen darf. Das Formular reagiert dementsprechend und lehnt die Anforderung ab. @2 Klicken Sie auf OK. Es ist also nicht möglich, auf eine als Private deklarierte Funktion außerhalb ihres Moduls Bezug zu nehmen. Wenn aber eine Public-Funktion im Modul eine Private-Funktion verwendet, können Sie die Private-Funktion indirekt von jedem beliebigen Ort aus aufrufen. Dies ist z.b. in der Funktion FullAddress der Fall. Dort wird die Private-Funktion FullName ver- 149

z wendet. Auch wenn die Funktion FullName nicht direkt im Testfenster zur Verfügung steht, kann indirekt über die Funktion FullAddress bzw. über jede andere Public-Funktion im Formularmodul Kontaktpersonen darauf Bezug genommen werden. Variablen deklarieren Wie bei Prozeduren, können auch Variablen als Public oder Private verwendet und an verschiedenen Positionen in der Datenbank abgelegt werden. Die Funktionsweise von Variablen hängt vollständig davon ab, wo und wie sie deklariert wurden. Bisher haben Sie lediglich mit privaten Variablen gearbeitet, die mit einer Dim-Anweisung in einer Prozedur definiert und auch nur dort in der Prozedur verwendet wurden. Ist die Ausführung einer Prozedur beendet, wird eine auf diese Weise deklarierte Variable mit ihrem Inhalt gelöscht. Es gibt verschiedene Verfahren, um Variablen zu deklarieren: Dim Um eine Variable zum Einsatz in einem Modul zu deklarieren, verwenden Sie im Deklarationsbereich des Moduls die Anweisung Dim, d.h. außerhalb jeglicher Prozedur. Die Variable behält dann ihren Wert, während verschiedene Prozeduren aufgerufen werden. Verwenden Sie diese Form der Variablen, wenn mehrere Prozeduren im Modul mit denselben Daten arbeiten. Public Um eine Variable zu deklarieren, die in der gesamten Anwendung eingesetzt werden soll, verwenden Sie im Deklarationsbereich des Moduls anstelle der Anweisung Dim die Anweisung Public. Diese Variablen behalten ihren Wert während der gesamten Ausführung der Anwendung. Public-Variablen können auch in einem Formular- oder Berichtsmodul deklariert werden. Hierzu müssen Sie aber in jedem Bezug auf die Variable außerhalb des Objekts den Objektnamen angeben. Verwenden Sie mit Public deklarierte Variablen für anwendungsübergreifende Daten, z.b. für den Benutzernamen. Static Variablen, die in einer Prozedur deklariert werden, verlieren in der Regel ihren Wert, wenn die Ausführung der Prozedur beendet ist. Soll der Wert einer Variablen von einem Aufruf der Prozedur zum nächsten erhalten bleiben, deklarieren Sie sie als Static. Dies ist beispielsweise für Variablen zu empfehlen, deren Werte bei jedem Prozeduraufruf kumuliert (z.b. addiert) werden sollen. In einigen Kapiteln weiter unten in diesem Buch werden diese Verfahren zur Variablendeklaration verwendet. Sie sollten aber in der Regel versuchen, Variablen mit der Anweisung Private auf Prozedurebene zu deklarieren. Dieser Variablentyp benötigt Arbeitsspeicher nur während der Prozedurausführung. Außerdem kann es mit diesen Variablen nicht zu 150

z Konflikten mit gleichnamigen Variablen in anderen Prozeduren kommen. Viele Optionen wenig Regeln Sie haben als Programmierer nahezu uneingeschränkte Freiheit bei der Entscheidung, wo Sie Visual Basic-Code einfügen wollen in Standardmodulen, in Formular- und Berichtsmodulen und in Ereignisprozeduren, und welche Optionen, z.b. Private oder Public, sie setzen möchten. Nach welchen Kriterien entscheiden Sie nun, wo Sie Code einfügen und welche Optionen Sie verwenden? Im Folgenden sind einige Richtlinien hierzu aufgeführt. Prozeduren in mehrere Aufgaben unterteilen Versuchen Sie, eine Prozedur pro Aufgabe zu erstellen. Dadurch können Anwendungen einfacher und effizienter gewartet werden. Wenn Sie beim Schreiben einer Ereignisprozedur feststellen, dass die Prozedur sehr komplex wird, überlegen Sie, ob es nicht besser wäre, für jede Teilaufgabe eine allgemeine Funktion zu erstellen. Prozeduren so allgemein wie möglich halten Erstellen Sie, wenn möglich, Prozeduren so allgemein, dass sie in jedem Formular oder Bericht verwendet werden können, und legen Sie sie in einem Standardmodul ab. Definieren Sie dazu für die Prozedur Argumente, an die beim Aufrufen der Prozedur die aktuell benötigten Inhalte übergeben werden. Objektspezifische Prozeduren im Objektmodul ablegen Schreiben Sie Prozeduren, die nur von einem einzigen Formular oder Bericht verwendet werden, im entsprechenden Formular- bzw. Berichtsmodul. Auf diese Weise herrscht eine klare Struktur, und Sie können einfacher auf Objekte, Eigenschaften und Steuerelemente im Formular verweisen. Durch die Schlüsselwörter Private und Public Konflikte vermeiden Deklarieren Sie in Formular- und Berichtsmodulen die Prozeduren mit dem Schlüsselwort Private, es sei denn, die Prozeduren sollen auch außerhalb des Formulars aufgerufen werden. In Standardmodulen werden Prozeduren in der Regel mit dem Schlüsselwort Public deklariert, da sie in der gesamten Datenbank verwendet werden sollen. Wird mit einer Prozedur in einem Standardmodul lediglich eine Teilaufgabe einer anderen Prozedur im Modul ausgeführt, deklarieren Sie sie mit Private. Als Private deklarierte Prozeduren benötigen weniger Arbeitsspeicher und sind eindeutiger, d.h., es entstehen weniger Konflikte. 151

z Die Fenster schließen und Microsoft Access beenden @1 Schließen Sie Visual Basic. @2 Schließen Sie das Formular Kontaktpersonen, und bestätigen Sie die Speicherabfrage mit Ja. @3 Beenden Sie Microsoft Access. 152