Erstellen Sie ein...zzzzzzzzzzzz 128 Erstellen Sie ein Standardmodul, Seite 131 Erstellen Sie...

26
128 Erstellen Sie ein Standardmodul, Seite 131 Erstellen Sie allgemeine Sub- und Function-Prozeduren, Seite 134 bzw. Seite 138 Erstellen Sie eine Funktion, die eine Formulareigen- schaft definiert, Seite 145 Legen Sie Optio- nen fest oder deklarieren Sie Konstanten für ein Modul, Seite 133

Transcript of Erstellen Sie ein...zzzzzzzzzzzz 128 Erstellen Sie ein Standardmodul, Seite 131 Erstellen Sie...

zzzzzzzzzzzz

128

Erstellen Sie einStandardmodul,

Seite 131

Erstellen Sie allgemeine Sub- und Function-Prozeduren,Seite 134 bzw. Seite 138

Erstellen Sie eine Funktion, die eine Formulareigen-schaft definiert,Seite 145

Legen Sie Optio-nen fest oder deklarieren Sie Konstanten für ein Modul,Seite 133

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

129

Funktionen erstellen

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 ler-nen. Lange bevor sie überhaupt etwas von Grammatik und Satzstruktu-ren 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 ge-meinsam. Beide verfügen über ein umfangreiches Vokabular und über komplexe Grammatikregeln. Wie Sie aber in den vorhergehenden Kapi-teln gesehen haben, können Sie mit Visual Basic arbeiten, sogar Anwen-dungen erstellen und anpassen, ohne viel über die Regeln der Program-miersprache 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 ler-nen.

Bisher haben Sie einen groben Überblick darüber erhalten, welche Auf-gaben Sie mit Visual Basic durchführen können. In diesem Kapitel erfah-ren Sie mehr über die grundlegenden Bausteine von Visual Basic für Applikationen – Module und Prozeduren –, und Sie lernen, wie Sie sie zu-sammen einsetzen, um flexible, leistungsstarke Anwendungen zu erstel-len. Es werden neue Begriffe eingeführt, und im gesamten Teil B lernen Sie weitere Regeln der Visual Basic-Programmierung sowie die Werk-zeuge kennen, die Microsoft Access zur Erstellung von Modulen zur Ver-fügung stellt.

5

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

130

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Sie arbeiten in diesem Kapitel mit der Übungsdatei 05Kontakt-verwaltung.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 Übungs-

dateien die Datenbank 05Kontaktverwaltung.

Module und Prozeduren verstehenBis jetzt haben Sie ausschließlich mit Ereignisprozeduren für bereits vorhandene Formulare gearbeitet. Da Formulare die Dreh- und Angel-punkte in Microsoft Access-Anwendungen darstellen, werden Sie ver-mutlich 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 wer-den. 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 passenWenn Sie bereits Ausdrücke zum Definieren von Eigenschaften in For-mularen oder Berichten verwendet haben, dann wissen Sie, dass Aus-drücke schnell sehr groß und unübersichtlich werden. Sie können diese Komplexität „verbergen“, indem Sie eigene Funktionen erstellen, mit de-nen die benötigte Aufgabe ausgeführt wird. Anschließend beziehen Sie sich in Ausdrücken auf diese Funktion. Darüber hinaus können Sie mit-hilfe von Visual Basic-Code Operationen ausführen, die mit Ausdrücken nicht möglich sind.

Programmcode wieder verwenden, um eine Aufgabe zu wiederholenMit 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

05Kontakt-verwaltung.mdb

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

131

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

den entsprechenden Code in neue Ereignisprozeduren kopieren. Dies ist aber nicht sehr effizient. Stattdessen erstellen Sie eine allgemeine Proze-dur, in der eine allgemeine Aufgabe ausgeführt wird, und verwenden sie in jeder Prozedur, die diese Aufgabe ausführt.

Programmieraufgaben in überschaubare Einheiten unterteilenWenn Sie den gesamten Programmiercode in Ereignisprozeduren schrei-ben 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 FormularmoduleSie können allgemeine Prozeduren entweder in Formular- und Berichts-modulen (Klassenmodule) zusammen mit Ereignisprozeduren oder in Standardmodulen ablegen. Standardmodule stellen separate Datenbank-objekte dar, die eine oder mehrere Prozeduren enthalten können. Meis-tens 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 Berichts-modul 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 Proze-durart zum Ausführen einer Aufgabe, die sich direkt auf das Formular bezieht – um beispielsweise mit Daten in den Formularfeldern zu arbei-ten.

Allgemeine Prozeduren, die in ein Standardmodul eingefügt werden, ge-hören in der Regel zur Anwendung als Ganzes. Erstellen Sie diese Proze-durart, um eine Aufgabe auszuführen, die auf mehrere Formulare oder Berichte angewendet werden kann.

Allgemeine Prozeduren in einem Standardmodul erstellenEine Datenbank kann ein oder mehrere Standardmodule enthalten. Je-des Standardmodul kann sich wiederum aus vielen Prozeduren zusam-mensetzen. In der Regel werden alle Prozeduren für eine spezielle Auf-gabe in einem Modul zusammengefasst. In der folgenden Übung erstellen Sie ein Modul, in dem zwei Prozeduren abgelegt werden, mit denen Mel-dungen ausgegeben werden.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

132

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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 Code-fenster an. Sie können nun Visual Basic-Code eingeben und eine neue all-gemeine 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 ein-leitenden 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 Anwei-sung 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 An-weisungen, 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 Zeichenfol-gen 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

Abbildung 5.1Das neue Standard-modul

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

133

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

Anweisung Option Compare Database in den meisten Anwendungen ein-gesetzt werden kann, sollten Sie diese Programmzeile unverändert las-sen.

Eine Visual Basic-Option für das Modul festlegenIhnen 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 Ein-stellung vornehmen, damit in jedem Modul, das Sie in Visual Basic erstel-len, 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 Folgen-den 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 Variablendekla-ration erforderlich, um es zu aktivieren.

@5 Klicken Sie auf OK.

Ab jetzt wird jedes Modul, das Sie erstellen, die Zeile Option Explicit ent-halten, und Sie werden stets Meldungen erhalten, wenn der Code nicht deklarierte oder falsch geschriebene Namen enthält.

Konstantenwerte deklarierenEine weitere Anweisung, die im Deklarationsbereich von Modulen einge-fü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 Kon-stanten 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 ledig-lich das Verweisen im Code einfacher und verständlicher machen soll.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

134

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Eine Konstante für den Anwendungsnamen deklarierenAngenommen, Sie möchten eine Konstante deklarieren, die den Namen der Anwendung enthält, den Sie in den Prozeduren des Moduls verwen-den 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 ein-mal 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 Pro-zedur verwendet werden, ist es zu empfehlen, die Konstante in der ent-sprechenden Prozedur zu deklarieren. Wenn Sie vorhaben, eine Kon-stante 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 erstellenIn 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.

Abbildung 5.2Das Standardmodul mit der Konstanten für den Anwen-dungsnamen

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

135

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

Die „DisplayMessage“-Prozedur erstellenIn 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 Mo-dul 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.

Abbildung 5.3Das Dialogfeld Pro-zedur einfügen

Abbildung 5.4Die Sub-Prozedur DisplayMessage wurde eingefügt.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

136

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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 an-gezeigt. Das Meldungsfenster soll das Ausrufezeichensymbol (vbExcla-mation) und im Titel den Namen der Anwendung (conAppName) enthal-ten.

@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 testenSie 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 unver-ankert ü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.

Abbildung 5.5Geben Sie den Na-men der Meldung im Direktfenster ein.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

137

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

Nachdem die Prozedur ausgeführt ist, wird erneut das Visual Basic-Fens-ter angezeigt.

Argumente in eine Prozedur einfügenSo 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 Ar-gument 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 so-eben 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 die-selbe Zeichenfolge.

Die Prozedur mit einem Argument startenWenn 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].

Abbildung 5.6Die von Ihnen defi-nierte Meldung wird angezeigt – mit Aus-rufezeichensymbol und dem Namen der Anwendung in der Titelleiste.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

138

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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 erstellenMit der gerade erstellten Prozedur wird eine Aktion ausgeführt. Es wer-den aber keinerlei Daten an das Programm zurückgegeben. Eine noch allgemeinere Form der allgemeinen Prozedur ist eine Function-Proze-dur. Mit einer Function-Prozedur wird ein Wert an die Prozedur zurück-gegeben, mit der die Funktion ausgeführt wird. Sie haben bereits mit ei-nigen in Microsoft Access integrierten Funktionen gearbeitet, z.B. mit der Funktion IsNull. Im Folgenden werden Sie eigene Funktionen erstellen, die Sie in Microsoft Access oder in Visual Basic-Code verwenden können.

Eine Prozedur erstellen, die eine Bestätigung abfragtIn Kapitel 4 haben Sie bereits mit der Funktion MsgBox abgefragt, ob der Datensatz auch ohne Postleitzahl gespeichert werden soll. In der folgen-den Übung erstellen Sie eine allgemeine Funktion Confirm, mit der die-selbe 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 an-schließ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

Abbildung 5.7Mit dem Argument strMessage können Sie eine beliebige Meldung anzeigen lassen.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

139

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

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 Funk-tion Confirm nur innerhalb des Moduls Meldungen ausgeführt wer-den.

� 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 Ergeb-nisse 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

Abbildung 5.8Die neue Funktion Confirm

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

140

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

Else Confirm = False

End If

Die Codezeilen im Einzelnen:

� Zunächst wird mit der Anweisung Dim die Variable bytChoice defi-niert, in der die Zahl abgelegt werden soll, die die Funktion MsgBox zurückgibt.

� Danach wird die Funktion MsgBox aufgerufen, das Argument strMes-sage 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 ausge-fü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 testenTesten 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 Zeichenfolge-wert an das Argument strMessage und zeigt das Meldungsfeld mit den angegebenen Optionen an.

@3 Klicken Sie auf OK.

Abbildung 5.9Die Funktion Con-firm gibt diese Mel-dung aus.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

141

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

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 – Dis-playMessage und Confirm –, die Sie in der gesamten Datenbank verwen-den können. Darüber hinaus könnten Sie das Modul Meldungen auch in andere Datenbanken kopieren, d.h., diese Aufgaben müssten Sie zukünf-tig nicht mehr neu schreiben. Dies ist der große Vorteil von Standardmo-dulen. Bei Bedarf greifen Sie auf ein bereits erstelltes Standardmodul zu-rück und können es in jeder neuen Datenbank einsetzen.

Allgemeine Prozeduren in FormularenNun 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 ver-einfachen Sie Code im Formularmodul Kontaktpersonen, indem Sie auf die allgemeinen Prozeduren zurückgreifen.

Das Formularmodul „Kontaktpersonen“ öffnenSie können das Formularmodul Kontaktpersonen öffnen, indem Sie Er-eigniseigenschaften 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.

Abbildung 5.10Da der Benutzer auf OK geklickt hat, wird im Direktfenster als Ergebnis der Funk-tion Wahr ange-zeigt.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

142

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

@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“ einbindenMit der Prozedur Form_BeforeUpdate wird eine einfache Aktion ausge-führt. Dennoch werden einige Variablen und Programmzeilen verwen-det, die nicht direkt mit der Aufgabe zu tun haben, sondern sich auf die allgemeine Aufgabe beziehen, eine Meldung anzuzeigen, in der eine Be-nutzerantwort abgefragt wird. Da Sie bereits eine allgemeine Funktion erstellt haben, die diese Aufgabe erledigt, können Sie die Ereignisproze-dur folgendermaßen vereinfachen.

@1 Ersetzen Sie die drei Dim-Anweisungszeilen durch eine einzige Dim-An-weisung.

Dim blnOK As Boolean

Abbildung 5.11Das Formularmodul Kontaktpersonen, nachdem zur Ereig-nisprozedur Form_BeforeUpdate ge-blättert wurde.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

143

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

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 ange-zeigt 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 Mel-dung, 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 abge-legt.

@3 Ersetzen Sie die zweite If...Then-Anweisung, in der abgefragt wird, wel-che 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 Abbre-chen 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.

Abbildung 5.12Die mit der Funktion Confirm überarbei-tete Ereignisproze-dur

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

144

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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 spei-chern.

Das Ereignis BeforeUpdate findet statt und ruft die überarbeitete Ereig-nisprozedur auf. Diese arbeitet wie zuvor: Die Meldung wird angezeigt, in der der Benutzer wählen kann, ob er den Datensatz auch ohne Post-leitzahl speichern möchte. Dieses Mal wurde die Meldung aber mithilfe der Funktion Confirm generiert.

@5 Klicken Sie auf OK.

Allgemeine Funktionen in einem FormularmodulBisher 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 Text-werte im Formular bearbeitet werden.

Es macht in diesem Fall keinen Sinn, eine solche Funktionsprozedur in einem Standardmodul zu erstellen, da kein anderes Formular darauf zu-greifen würde. In einem Standardmodul müssten Sie außerdem stets auf den entsprechenden Formularnamen verweisen, damit klar ist, auf wel-che Steuerelemente Sie sich beziehen. Es ist also besser, die Funktions-prozedur im Formularmodul direkt zu erstellen.

In der folgenden Übung erstellen Sie allgemeine Funktionen, die speziell für das Formular Kontaktpersonen gelten.

Abbildung 5.13Die durch die Funk-tion Confirm gene-rierte Meldung

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

145

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

Die Funktion „FullName“ erstellenIn 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 an-genommen, Sie benötigen häufig eine Möglichkeit, sich auf den gesamten Namen der aktuellen Kontaktperson zu beziehen, sei es in einem Aus-druck oder in Programmcode. Für diese Fälle schreiben Sie eine einfache allgemeine Funktion für das Formular, das den gesamten Namen als Er-gebnis 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 – 05Kontakt-verwaltung.)

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 anzuzei-gen.) 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 be-zieht, 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 verwendenDas Formular Kontaktpersonen enthält ein berechnetes Feld, in dem der vollständige Name der Kontaktperson angezeigt wird. Dieses Feld befin-det sich oben auf Seite 2 des Formulars. Deren Eigenschaft Steuerele-mentinhalt ist auf einen Ausdruck gesetzt, in dem die beiden Namensfel-

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

146

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

der verkettet sind. Da Sie nun aber eine Funktion für diese Aufgabe erstellt haben, können Sie als Inhalt des Steuerelements die Funktion de-finieren. 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 Aus-druck, den Sie mithilfe der neuen Funktion vereinfachen können.

Abbildung 5.14Im Feld Kontaktper-son wird der voll-ständige Name des aktuellen Datensat-zes angezeigt.

Abbildung 5.15Im Einstellungsfeld Steuerelementinhalt werden in einem Ausdruck der Vorna-me, ein Leerzeichen und der Nachname miteinander ver-kettet.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

147

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

@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 Steuer-element übernommen.

@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 Aus-drücken oder Visual Basic-Code verwenden.

Die Funktion „FullAddress“ erstellenAngenommen, Sie möchten den vollständigen Namen und die vollstän-dige 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 ein-gefü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

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

148

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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 Fel-der 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 inter-pretiert 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 Aus-druck 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 defi-niert wird. Im Adressstring wird also in der ersten Zeile der vollstän-dige 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 testenNun können Sie im gesamten Formular in Ausdrücken oder Visual Basic-Code auf diese Funktion Bezug nehmen. Sie können jetzt beispiels-weise 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.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

149

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

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 Kontakt-personen Bezug nimmt, muss immer dann, wenn Sie die Funktion ver-wenden, das Formular in der Formularansicht geöffnet sein. Ist das For-mular in der Entwurfsansicht geöffnet, verursacht die Funktion einen Fehler. Sollte dies bei Ihnen der Fall sein, wechseln Sie im Kontaktperso-nenformular in die Formularansicht, und testen Sie dann die Funktion erneut im Testfenster.

Die Funktion „FullName“ im Testfenster testenEs 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 anwendungs- oder objektdefinierten Fehlers aus. Dies bedeutet, dass das Formular zu einer Aktion aufgefordert wurde, die es nicht ausführen darf. Das Formu-lar 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ßer-halb 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 Funk-tion FullAddress der Fall. Dort wird die Private-Funktion FullName ver-

Abbildung 5.16Vorname, Nachna-me, Adresse, Post-leitzahl und Ort wer-den zu einem Feld zusammengefasst.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

150

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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 deklarierenWie bei Prozeduren, können auch Variablen als Public oder Private ver-wendet und an verschiedenen Positionen in der Datenbank abgelegt wer-den. 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 de-finiert und auch nur dort in der Prozedur verwendet wurden. Ist die Aus-fü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, ver-wenden Sie im Deklarationsbereich des Moduls die Anweisung Dim, d.h. außerhalb jeglicher Prozedur. Die Variable behält dann ihren Wert, wäh-rend 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 Anwen-dung eingesetzt werden soll, verwenden Sie im Deklarationsbereich des Moduls anstelle der Anweisung Dim die Anweisung Public. Diese Variab-len behalten ihren Wert während der gesamten Ausführung der Anwen-dung. Public-Variablen können auch in einem Formular- oder Berichts-modul 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 Da-ten, 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ächs-ten erhalten bleiben, deklarieren Sie sie als Static. Dies ist beispielsweise für Variablen zu empfehlen, deren Werte bei jedem Prozeduraufruf ku-muliert (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 versu-chen, Variablen mit der Anweisung Private auf Prozedurebene zu dekla-rieren. Dieser Variablentyp benötigt Arbeitsspeicher nur während der Prozedurausführung. Außerdem kann es mit diesen Variablen nicht zu

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

151

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

zzzzzzzzzzzz

Konflikten mit gleichnamigen Variablen in anderen Prozeduren kom-men.

Viele Optionen – wenig RegelnSie haben als Programmierer nahezu uneingeschränkte Freiheit bei der Entscheidung, wo Sie Visual Basic-Code einfügen wollen – in Standard-modulen, 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 auf-geführt.

Prozeduren in mehrere Aufgaben unterteilen Versuchen Sie, eine Prozedur pro Aufgabe zu erstellen. Dadurch können Anwendungen ein-facher und effizienter „gewartet“ werden. Wenn Sie beim Schreiben ei-ner Ereignisprozedur feststellen, dass die Prozedur sehr komplex wird, überlegen Sie, ob es nicht besser wäre, für jede Teilaufgabe eine allge-meine Funktion zu erstellen.

Prozeduren so allgemein wie möglich halten Erstellen Sie, wenn mög-lich, 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 verwen-det 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 vermei-den 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 wer-den 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 ande-ren 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.

Kapitel 5

zzzzzzzzzzzz

Funktionen erstellen

152

zzzzzzzzzzzz

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

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.