VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen...

97
Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

Transcript of VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen...

Page 1: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

Regionales Rechenzentrum für Niedersachsen

VBA (Visual Basic for Application)

Prozeduren und Funktionen

Page 2: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 2Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 2

Regionales Rechenzentrum für Niedersachsen

Prozeduren

... sind Unterprogramme (Subroutinen), mit denen Sie Teilprobleme einer größeren Aufgabe lösen können.

... fassen Anweisungen zu einem Block zusammen, der eine bestimmte Aufgabe löst. Die Anweisungen innerhalb der Prozedur werden zeilenweise abgearbeitet.

... sind eine Abfolge von VBA-Befehlen und -Anweisungen, die ein bestimmtes eng begrenztes Problem lösen.

... geben keinen Wert an den Aufrufer zurück.

Page 3: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 3Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 3

Regionales Rechenzentrum für Niedersachsen

Merkmale

Jedes Unterprogramm hat einen eindeutigen Namen. Mit Hilfe dieses Namens wird die Prozedur aufgerufen.

Jede Prozedur ist unabhängig. Sie kann nur Werte von anderen Prozedur übergeben bekommen und diese unabhängig weiterverarbeiten.

Prozeduren dürfen nicht verschachtelt werden. Innerhalb einer Prozedur darf eine weitere Prozedur nicht definiert

werden. Innerhalb einer Prozedur kann aber eine weitere Prozedur

aufgerufen werden.

Page 4: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 4Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 4

Regionales Rechenzentrum für Niedersachsen

Beispiel

Szenario: Bestellformular mit einem Optionsfeld für die Auswahl von Rabatten. Sobald eine gewisse Bestellsumme überschritten ist, wird eine bestimmter

Anteil als Rabatt gewährleistet. Wenn der Besteller auf die Schaltfläche [Bestellsumme berechnen] klickt,

wird die Bestellsumme sowie der Rabatt angezeigt. An dem Szenario sind folgende Prozeduren beteiligt.

Der Event-Handler OnKlick für die Schaltfläche. Der Eventhandler verzweigt in eine weitere Prozedur zur Berechnung der Bestellsumme.

In einer Prozedur wird die Bestellsumme berechnet. Wenn die Bestellsumme berechnet ist, wird die Gesamtsumme an eine Funktion übergeben, die den Rabatt berechnet.

In der Funktion [Rabatt berechnen] werden die Optionsfelder entsprechend der Gesamtsumme mit Hilfe einer If-Else-Anweisung gesetzt. Der Anteil des Rabatts wird an die aufrufende Funktion zurückgeliefert.

Page 5: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 5Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 5

Regionales Rechenzentrum für Niedersachsen

Vorteile bei der Verwendung von Prozeduren

Die Aufgabenstellung wird in kleinere unabhängige Module eingeteilt und somit auch strukturiert

Der Quellcode lässt sich besser lesen. Der Code einer Funktion kann in anderen Programmen wiederverwendet

werden. Wiederholende Aufgaben werden in einer eigenständigen Prozedur

eingeschlossen. Diese Prozedur kann von verschiedenen Stellen im Programm aufgerufen werden.

Fehler lassen sich schneller finden, weil der Code nur an einer Stelle bearbeitet werden muss.

Veränderungen lassen sich einfacher vornehmen und testen, weil nur Codefragmente betroffen sind.

Page 6: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 6Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 6

Regionales Rechenzentrum für Niedersachsen

Arbeitsweise einer Prozedur

In einer Prozedur wird eine bestimmte Aufgabe gelöst. Der Nutzer der Prozedur muss nicht wissen, wie die Aufgabe gelöst wird. Dem Nutzer genügt es zu wissen, wie die Prozedur aufgerufen wird. Die Prozedur ist eine Blackbox.

Der Prozedur können Parameter übergeben werden. Dem Nutzer der Prozedur muss die Art, der Typ der Parameter bekannt sein. Einige Prozeduren besitzen keine Eingabeparameter.

Prozedur

Eingabe-parameter

123

Page 7: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 7Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 7

Regionales Rechenzentrum für Niedersachsen

Code-Beispiel

Sub datenPlz() Dim varPLZ As String Dim fehler As Integer varPLZ = plz.Text fehler = pruefe(varPLZ) If fehler <> 0 Then Select Case fehler Case fehlercode.laenge MsgBox ("Fehlerhafte Länge") plz.ForeColor = RGB(255, 0, 0) Case fehlercode.notNumeric MsgBox ("Falsche Zeichen") plz.ForeColor = RGB(255, 0, 0) End Select Else plz.ForeColor = RGB(0, 0, 0) End IfEnd Sub

Page 8: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 8Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 8

Regionales Rechenzentrum für Niedersachsen

Struktogramm

Hole Daten aus dem Steuerelement plz

Starte Überprüfung auf Fehler

Fehler vorhanden?

FehlercodeLänge?

Nicht Numerisch?

Fehlermeldung ausgeben

Schriftfarbe = Rot

Fehlermeldung ausgeben

Schriftfarbe = Rot

Schriftfarbe = Schwarz

Page 9: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 9Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 9

Regionales Rechenzentrum für Niedersachsen

Beispiel "Event-Handler"

Private Sub plz_BeforeUpdate(Cancel As Integer)

datenPlz

End Sub

.name = txtplz

Der Nutzer verlässt das Feld. Die Daten wurden aber noch nicht gespeichert.

Aufruf der Prozedur datenPlz

Page 10: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 10Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 10

Regionales Rechenzentrum für Niedersachsen

Aufbau von Prozeduren

Sub addition(zahlRechts As Integer, zahlLinks As Integer)

Dim summe As IntegerDim ausgabe As String

summe = zahlLinks + zahlRechtsausgabe = "Addition: " & zahlLinks & " + " & zahlRechts

ausgabe = ausgabe & " = " & summe

End Sub

Der Prozedurkopf definiert die Schnittstelle nach außen. Der Prozedurkopf legt fest, wie eine Prozedur von anderen aufgerufen wird.

Der Prozedurrumpf enthält die Anweisungen, die zeilenweise nach dem Aufruf abgearbeitet werden.Ende der Prozedur.

Page 11: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 11Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 11

Regionales Rechenzentrum für Niedersachsen

Prozedurkopf

Sub addition (zahlRechts As Integer, zahlLinks As Integer)

Dim summe As IntegerDim ausgabe As String

summe = zahlLinks + zahlRechtsausgabe = "Addition: " & zahlLinks & " + " & zahlRechts

ausgabe = ausgabe & " = " & summe

End Sub

Jede Prozedur beginnt mit diesem Schlüsselwort und endet dementsprechend mit End Sub. Der Bezeichner einer

Prozedur ist eindeutig.

Eine Liste mit Parametern wird angegeben. Die runden Klammern können leer sein. Die Elemente werden durch Kommata getrennt.

Page 12: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 12Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 12

Regionales Rechenzentrum für Niedersachsen

Prozedurnamen

... beginnen immer mit einem Buchstaben. ... sind kürzer als 256 Zeichen. ... dürfen im Namen kein Leerzeichen, Punkt, Ausrufezeichen, Bindestrich,

oder @, &, $ oder # haben. ... sollten keine Umlaute, Satzzeichen oder Sonderzeichen enthalten. Es gibt keine Unterscheidung zwischen Groß- und Kleinschreibung. Schlüsselworter oder vordefinierte Prozedurnamen dürfen nicht genutzt

werden. ... dürfen nur einmal vorkommen. ... sollten die Aufgabe der Prozedur widerspiegeln.

Page 13: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 13Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 13

Regionales Rechenzentrum für Niedersachsen

Beispiele für Prozedurnamen

Wenn die Aufgabe der Prozedur beschrieben werden soll, werden häufig Substantive genutzt. Welches Problem beschreibt die Prozedur? Mittelwert(), Integral(), TuermeVonHanoi(), FehlerAusgeben().

Wenn Berechnungen oder die Frage "Wie wird die Aufgabe erledigt?" beschrieben werden, werden häufig Verben genutzt. intAddieren beschreibt eine Funktion die Ganzzahlen addiert. Das Verb set... wird genutzt, wenn Eigenschaftswerte eines Objekts gesetzt

werden. Das Verb get... wird genutzt, wenn der Attributwert eines Objekts ausgelesen

wird. Falls logische Operationen beschrieben werden, nutzen Prozedurnamen

als erstes Wort Adjektive. kleinsterWert(), groessterMesswert().

Page 14: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 14Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 14

Regionales Rechenzentrum für Niedersachsen

Parameterliste

Die Liste wird mit Hilfe der runden Klammern begrenzt. Die einzelnen Listenelemente werden durch Kommata getrennt. Für jedes Listenelement

... muss ein eindeutiger Name vergeben werden. ... muss der Datentyp mit Hilfe von As angegeben werden.

Die Liste kann beliebig viele Parameter aufnehmen.

Sub bezeichnung (var1 As Datentyp, var2 As Datentyp)

Page 15: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 15Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 15

Regionales Rechenzentrum für Niedersachsen

Prozedur aufrufen

prozedurname argument1, argument2, ... Die Prozedur wird direkt mit dem Namen aufgerufen. Die Liste der Argumente wird nicht geklammert. Die einzelnen Elemente der

Liste werden durch Kommata getrennt. Call prozedurname (argument1, argument2, ...)

Hier wird der Aufruf der Prozedur durch ein Schlüsselwort gekennzeichnet. Die Liste der Argumente muss geklammert werden. Die einzelnen Elemente

der Liste werden durch Kommata getrennt.

Page 16: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 16Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 16

Regionales Rechenzentrum für Niedersachsen

Übergabe der Parameter

Die Parameterliste im Funktionskopf hat die gleiche Anzahl von Elementen wie die Argumentliste des Aufrufers.

Der Wert des ersten Elements in der Argumentliste wird dem ersten Element in der Parameterliste zugewiesen und so weiter.

Der Wert des ersten Element in der Argumentliste hat den gleichen Datentyp wie das erste Element in der Parameterliste und so weiter.

Sub addition(zahlRechts As Integer, zahlLinks As Integer)...

End Sub

Sub start()...addition(3, 4)

End Sub

Page 17: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 17Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 17

Regionales Rechenzentrum für Niedersachsen

Kennzeichen von Variablen

Variablennamen sind eindeutig. Jeder Variablenname ist ein Synonym für eine Speicheradresse im

Rechner. Die Speicheradresse bezeichnet den Beginn eines Speicherbereichs.

Die Größe des Speicherbereichs wird durch den Datentyp angegeben. In diesem Speicherbereich wird ein Wert von einem bestimmten Datentyp

gespeichert.

Page 18: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 18Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 18

Regionales Rechenzentrum für Niedersachsen

Beispiele für Variablen

Name der Variablen: blauWert der Variablen: 45000Adresse im Speicher: 0x00401000Datentyp: LongBenötige Größe: 32 Bit (4 Bytes)

Name der Variablen: gelbWert der Variablen: 4.5Adresse im Speicher: 0x00401004Datentyp: SingleBenötige Größe: 32 Bit (4 Bytes)

Name der Variablen: gruenWert der Variablen: "ABC"Adresse im Speicher: 0x0040100DDatentyp: StringBenötige Größe: 104 Bit (13 Bytes)

Name der Variablen: rotWert der Variablen: #02|24|2008#Adresse im Speicher: 0x00401008Datentyp: DateBenötige Größe: 64 Bit (8 Bytes)

Page 19: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 19Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 19

Regionales Rechenzentrum für Niedersachsen

Speicherorganisation

00401000

Speicheradresse(hexadezimal)

00401004

00401008

0040100D

00401010

blau

1 Byte

gelb

gruen

rot

...

Long

Single

Date

String

Page 20: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 20Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 20

Regionales Rechenzentrum für Niedersachsen

Parameterübergabe "Call by Reference"

Standardmäßig wird ein Verweis (Referenz) auf eine Variable an die Funktion übergeben.

Die Speicheradresse einer Variablen wird übergeben. Das heißt das Argument sowohl auch der Parameter greifen auf ein und

dieselbe Speicheradresse zu. Die Funktion kann das Argument verändern.

Sub addition(ByRef zahlRechts As Integer, ByRef zahlLinks As Integer)

...End Sub

Sub start()Dim wert As IntegerDim zahl As Integer...addition(wert, zahl)

End Sub

Page 21: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 21Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 21

Regionales Rechenzentrum für Niedersachsen

Arbeitsweise

zahlRechts

wert0x00401000

Sub start() Dim wert As Integer ... wert = 5 ...

5

addition(wert, zahl)End Sub

Sub addition(ByRef zahlRechts As Integer, ByRef zahlLinks As Integer)

...End Sub

Page 22: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 22Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 22

Regionales Rechenzentrum für Niedersachsen

Parameterübergabe "Call by Value"

Der Wert des Arguments wird dem Parameter übergeben. Es wird eine Kopie des Arguments erzeugt. Parameter und Argument werden an zwei verschiedenen Speicherstellen

abgelegt. Die Funktion hat keinen Zugriff auf das Original. Das Original ist

schreibgeschützt.

Sub addition(ByVal zahlRechts As Integer, ByVal zahlLinks As Integer)

...End Sub

Sub start()Dim wert As IntegerDim zahl As Integer...addition(wert, zahl)

End Sub

Page 23: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 23Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 23

Regionales Rechenzentrum für Niedersachsen

Arbeitsweise

zahlRechts

wert0x00401000

Sub start() Dim wert As Integer ... wert = 5 ...

5

addition(wert, zahl)End Sub

Sub addition(ByVal zahlRechts As Integer, ByVal zahlLinks As Integer)

...End Sub

5

0x00401004

Page 24: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 24Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 24

Regionales Rechenzentrum für Niedersachsen

Variablen

... können ... innerhalb einer Prozedur definiert werden. Diese Variablen werden als

lokal bezeichnet. Sie sind nur innerhalb dieser Prozedur gültig und bekannt. ... am Anfang eines Moduls definiert werden. Diese Variablen werden als

global bezeichnet. Diese Variablen sind im gesamten Modul bekannt. ... als statische Variablen definiert werden. Diese Variablen behalten auch

nach dem Verlassen der Prozedur ihren Wert. ... sollten so lokal wie möglich und so global wie nötig angelegt werden.

Page 25: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 25Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 25

Regionales Rechenzentrum für Niedersachsen

Lokale Variablen

Sub GetFaktorMal (ByVal zahl As Integer)Const faktor = 0.3Dim result As Double

result = zahl * faktor

End Sub

Sub main()Const wert = 4Dim result As Integer

Call GetFaktorMal(wert)result = wert + wert

End Sub

Page 26: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 26Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 26

Regionales Rechenzentrum für Niedersachsen

Definition

Alle lokalen Variablen in dem vorhergehenden Beispiel sind mit Fettschrift geschrieben.

Lokale Variablen werden innerhalb einer Prozedur definiert. Lokale Variablen sind nur der Prozedur bekannt, in der sie deklariert

werden. Sobald die Prozedur aufgerufen wird, wird Speicherplatz für die lokalen

Variablen bereitgestellt. In diesem Speicherbereich werden die Werte der lokalen Variablen geschrieben. Bei Beendigung der Prozedur wird der Speicherbereich automatisch freigeben und damit auch der darin gespeicherte Wert.

Page 27: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 27Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 27

Regionales Rechenzentrum für Niedersachsen

Identische Namen

In jeder Prozedur kommt ein Variablenname exakt einmal vor. Jeder Variablenname ist ein Stellvertreter für eine Speicherzelle im

Arbeitsspeicher. Dieser Speicher wird bei der Deklaration einer Variablen angefordert. Sobald die Prozedur verlassen wird, wird der Speicherbereich automatisch frei gegeben.

Aus diesen Grund können in verschiedenen Prozeduren identische Namen genutzt werden. Zur besseren Lesbarkeit und Verständlichkeit sollten in verschiedenen Prozeduren unterschiedliche Namen verwendet werden. Beispiel: mainFaktor in dem Hauptprogramm und potenzierenFaktor in der

Funktion potenzieren. preisBrutto und preisNetto für die Kennzeichnung von Beträgen mit

und ohne Steuern.

Page 28: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 28Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 28

Regionales Rechenzentrum für Niedersachsen

Globale Variablen

Const faktor = 0.3

Sub GetFaktorMal (ByVal zahl As Integer)Dim result As Double

result = zahl * faktor

End Sub

Sub main()Const wert = 4Dim result As Integer

Call GetFaktorMal(wert)result = wert + wert

End Sub

Page 29: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 29Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 29

Regionales Rechenzentrum für Niedersachsen

Definition

Globale Variablen werden außerhalb einer Prozedur definiert. Meist werden sie am Anfang eines Moduls definiert.

Globale Variablen gelten für das gesamte Modul. Globale Variablen können von allen Prozeduren in einem Modul genutzt

werden. Eine lokale Variable, die den selben Namen wie eine globale Variable hat,

hat Vorrang vor der globalen Variablen. Überlegen Sie sich genau, welche Variablen global gehalten werden

sollten. Variablen, die selten oder nur in bestimmten Funktionen benötigt werden, sollten lokal gehalten werden.

Page 30: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 30Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 30

Regionales Rechenzentrum für Niedersachsen

Existenz und Sichtbarkeit

Bei einem Aufruf einer Prozedur werden für alle lokalen Variablen neue Speicherbereiche reserviert. Nach dem Ende der Prozedur wird der Speicher wieder freigegeben. Die lokale Variable ist innerhalb der Prozedur existent und sichtbar.

Globale Variablen werden am Anfang eines Moduls deklariert. Für globale Variablen wird nach Aufruf des Moduls Speicher bereitgestellt und am Ende des Moduls freigegeben. Sie sind während der Laufzeit des Moduls für alle Prozeduren existent.

Wenn eine lokale Variable in einer Prozedur und eine globale Variable identische Namen besitzen, überdeckt die lokale Variable die globale Variable in dieser Prozedur. Die globale Variable ist in dieser Prozedur nicht sichtbar.

Page 31: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 31Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 31

Regionales Rechenzentrum für Niedersachsen

Statische Variablen

Sub PlusEins()Static count As Integer

count = count + 1

End Sub

Sub main()Call PlusEins()Call PlusEins()Call PlusEins()

End Sub

Page 32: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 32Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 32

Regionales Rechenzentrum für Niedersachsen

Definition

Statische Variablen beginnen mit dem Schlüsselwort Static statt Dim. Statische Variablen bezeichnen immer den gleichen Speicherbereich, egal

wie oft eine Prozedur aufgerufen wird. Statische Variablen sind nur innerhalb der Prozedur sichtbar, in der sie

deklariert werden. Statische Variablen behalten auch nach dem Verlassen der Prozedur den

zugewiesenen Wert. Statische Variablen können nur in Prozeduren definiert werden.

Page 33: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 33Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 33

Regionales Rechenzentrum für Niedersachsen

Gültigkeitsbereich

Modul

Dim var As ...

Prozedur

Dim var As ...

Prozedur

Static var As ...

Prozedur

Dim var As ...Dim var As

Prozedur

Dim var As...Static var As ...

Page 34: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 34Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 34

Regionales Rechenzentrum für Niedersachsen

Optionale Argumente

Sub addition(ByVal zahl01 As Integer, ByVal zahl02 As Integer, Optional ByVal zahl03 As Integer, Optional ByVal zahl04 As Integer,)

...End Sub

Sub start()Dim wert As IntegerDim zahl As Integer...addition(wert, zahl)addition(wert, zahl, 4)addition(wert, zahl, , 5)addition(wert, zahl, 4, 5)

End Sub

Page 35: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 35Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 35

Regionales Rechenzentrum für Niedersachsen

Definition

Mit Hilfe des Schlüsselwortes Optional können Parameter definiert werden, die kein Argument übergeben bekommen müssen.

In der Argumentliste können optionale Parameter gesetzt werden oder nicht.

In der Parameterliste stehen optionale Element immer am Ende. Optionalen Parametern folgen keine nicht-optionalen Parameter.

Ausgelassene optionale Parameter werden durch Leerzeichen ersetzt.

Page 36: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 36Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 36

Regionales Rechenzentrum für Niedersachsen

Benannte Argumente

Sub addition(ByVal zahl01 As Integer, ByVal zahl02 As Integer, Optional ByVal zahl03 As Integer, Optional ByVal zahl04 As Integer,)

...End Sub

Sub start()Dim wert As IntegerDim zahl As Integer...addition(zahl02:=wert, zahl01:=zahl, zahl04:=5)

End SubBenannten Argumenten wird mit Hilfe

von := ein Wert zugewiesen. Falls viele optionale Parameter genutzt werden, ist die Zuordnung der Argumente so

leichter lesbar.

Page 37: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 37Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 37

Regionales Rechenzentrum für Niedersachsen

Standardwerte nutzen

Sub addition(ByVal zahl01 As Integer, ByVal zahl02 As Integer, Optional ByVal zahl03 As Integer = 1, Optional ByVal zahl04 As Integer,)

...End Sub

Sub start()Dim wert As IntegerDim zahl As Integer...addition(wert, zahl)addition(wert, zahl, 4)addition(wert, zahl, 4, 5)

End Sub

Page 38: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 38Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 38

Regionales Rechenzentrum für Niedersachsen

Standardwerte setzen

Nur möglich bei optionalen Werten. Falls der Nutzer für den Parameter kein Argument übergibt, wird der

Standardwert genutzt. Der Standardwert kann durch die Übergabe eines Arguments

überschrieben werden.

Page 39: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 39Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 39

Regionales Rechenzentrum für Niedersachsen

Funktionen

... sind Unterprogramme (Subroutinen), mit denen Sie Teilprobleme einer größeren Aufgabe lösen können.

... fassen Anweisungen zu einem Block zusammen, der eine bestimmte Aufgabe löst. Die Anweisungen innerhalb der Prozedur werden zeilenweise abgearbeitet.

... sind eine Abfolge von VBA-Befehlen und -Anweisungen, die ein bestimmtes eng begrenztes Problem lösen.

... geben einen Wert an den Aufrufer zurück.

Page 40: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 40Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 40

Regionales Rechenzentrum für Niedersachsen

Arbeitsweise einer Funktion

In einer Funktion wird eine bestimmte Aufgabe gelöst. Der Nutzer der Funktion muss nicht wissen, wie die Aufgabe gelöst wird. Dem Nutzer genügt es zu wissen, wie die Funktion aufgerufen wird. Die Funktion ist eine Blackbox.

Der Funktion können Parameter übergeben werden. Dem Nutzer der Funktion muss die Art oder der Typ der Parameter bekannt sein. Einige Funktionen besitzen keine Eingabeparameter.

Die Lösung der Aufgabe kann an den Aufrufer zurückgegeben werden.

Funktion

Eingabe-parameter

123

Rückgabe-parameter

146

Page 41: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 41Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 41

Regionales Rechenzentrum für Niedersachsen

Merkmale

Jedes Unterprogramm hat einen eindeutigen Namen. Mit Hilfe dieses Namens wird die Funktion aufgerufen.

Jede Funktion ist unabhängig. Sie kann Werte von anderen Funktion übergeben bekommen und diese unabhängig weiterverarbeiten.

Die Funktion gibt einen Wert von einem bestimmten Datentyp an den Aufrufer zurück.

Funktionen dürfen nicht verschachtelt werden. Innerhalb einer Funktion wird eine weitere Funktion oder Prozedur

nicht definiert. Innerhalb einer Funktion kann aber eine weitere Prozedur oder

Funktion aufgerufen werden.

Page 42: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 42Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 42

Regionales Rechenzentrum für Niedersachsen

Code-Beispiel

Function pruefe(daten As String) As Integer

If Len(daten) <> 5 Then pruefe = fehlercode.laenge Exit Function End If If Not IsNumeric(daten) Then pruefe = fehlercode.notNumeric Exit Function End If pruefe = 0

End Function

Page 43: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 43Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 43

Regionales Rechenzentrum für Niedersachsen

Struktogramm

Fehlercode zurückgeben

Länge der Daten <>5

Numerische Werte?

Fehlercode zurückgeben

Rückgabe "Kein Fehler"

Page 44: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 44Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 44

Regionales Rechenzentrum für Niedersachsen

Aufbau von Funktionen

Function addition(zahlR As Integer, zahlL As Integer) As Integer

Dim summe As IntegerDim ausgabe As String

summe = zahlLinks + zahlRechtsaddition = summe

End Function

Der Funktionskopf definiert die Schnittstelle nach außen. Der Funktionskopf legt fest, wie eine Funktion von anderen aufgerufen wird und welche Art von Wert zurückgegeben wird.

Der Funktionsrumpf enthält die Anweisungen, die zeilenweise nach dem Aufruf abgearbeitet werden. Dem Namen der Funktion wird ein Wert als Rückgabe zugewiesen.

Ende der Funktion.

Page 45: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 45Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 45

Regionales Rechenzentrum für Niedersachsen

Funktionskopf

Function addition (zahlR As Integer, zahlL As Integer) As Integer

Dim summe As IntegerDim ausgabe As String

summe = zahlLinks + zahlRechtsaddition = summe

End Function

Jede Funktion beginnt mit diesem Schlüsselwort und endet dementsprechend mit End Function. Der Bezeichner einer

Funktion ist eindeutig.

Eine Liste mit Parametern wird genauso wie bei Prozeduren angegeben.

Der Datentyp der Funktion wird festgelegt. Diese Funktion gibt eine Ganzzahl zurück.Der Funktionsname ist ein Synonym für den Rückgabewert.

Page 46: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 46Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 46

Regionales Rechenzentrum für Niedersachsen

Datentyp der Funktion

Dem Funktionsnamen wird mit Hilfe von As ein Datentyp zugewiesen. Der Datentyp der Funktion legt automatisch den Datentyp des

Rückgabewertes fest. Es kann jeder in VBA bekannter Datentyp für die Rückgabe genutzt

werden. Falls kein Datentyp angegeben wird, wird automatisch der Datentyp der

Variablen, die der Funktion zugewiesen wird, genutzt. Eine Funktion kann immer nur einen Wert zurückgeben.

Function addition(zahlR As Integer, zahlL As Integer) As Integer

Page 47: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 47Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 47

Regionales Rechenzentrum für Niedersachsen

Funktionen aufrufen

result = funktionsname(argument1, argument2, ...) Die Funktion wird direkt mit dem Namen aufgerufen. Die Liste der Argumente muss geklammert werden. Die einzelnen Elemente der

Liste werden durch Kommata getrennt. Die Liste kann leer sein. Mit Hilfe eines Gleichheitszeichen wird der Rückgabewert einer Variablen

zugewiesen. Die Variable hat den gleichen Datentyp wie die Funktion. Andernfalls muss dieser umgewandelt werden.

funktionsname argument1, argument2, ...Call funktionsname(argument1, argument2, ...) Der Rückgabewert der Funktion wird nicht in einer Variablen zur

Weiterverarbeitung gespeichert. Der Rückgabewert ist nicht von Belang.

funktionsname(funktionsname(arg1, ...), argument2, ...) Funktionen können auch innerhalb anderer Funktionen aufgerufen werden. Der Rückgabewert einer Funktion wird mit Hilfe einer anderen weiterverarbeitet.

Page 48: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 48Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 48

Regionales Rechenzentrum für Niedersachsen

Rückgabewert

Dem Funktionsnamen wird mit Hilfe des Gleichheitszeichen ein Wert zugewiesen.

Der Wert kann .. in einer Variablen gespeichert sein oder ... als Literal zugewiesen werden. ... durch einen Ausdruck berechnet werden.

Der zugewiesene Wert und die Funktion sollten den gleichen Datentyp besitzen.

Die Funktion wird aber nicht automatisch mit der Zuweisung eines Wertes beendet. Exit Function beendet die Funktion vorzeitig.

Function addition(zahlR As Integer, zahlL As Integer) As Integer

Dim summe As Integer ...addition = summe

...End Function

Page 49: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 49Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 49

Regionales Rechenzentrum für Niedersachsen

Ende einer Funktion

Function pruefe(daten As String) As Integer

If Len(daten) <> 5 Then pruefe = fehlercode.laenge Exit Function End If If Not IsNumeric(daten) Then pruefe = fehlercode.notNumeric Exit Function End If pruefe = 0

End Function

Die Funktion wird durch das Schlüsselwort Exit vorzeitig beendet.

Hier ist die Funktion zu Ende.

Page 50: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 50Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 50

Regionales Rechenzentrum für Niedersachsen

Vordefinierte Funktionen

... oder integrierte Funktionen. ... sind für

... mathematische Berechnungen wie zum Beispiel Winkelberechnungen oder Berechnungen im Bereich Finanzmathematik vorhanden.

... sind für das Arbeiten mit Datums- und Zeitwerten vorhanden. ... sind für das Arbeiten mit Strings vorhanden. ... sind für das Arbeiten mit Dateien vorhanden.

... nutzen englische Bezeichnungen und werden in den Hilfeseiten von VBA erläutert.

... werden genauso wie selbst definierte Funktionen aufgerufen.

Page 51: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 51Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 51

Regionales Rechenzentrum für Niedersachsen

Heutiges Datum

Now() liefert das aktuelle Systemdatum und -zeit. Date() gibt das aktuelle Systemdatum zurück. Time() liefert die aktuelle Systemzeit-

tage = DateDiff("d", Now(), #12/31/2008#)tage = DateDiff("d", Now(), "31.12.")

Page 52: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 52Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 52

Regionales Rechenzentrum für Niedersachsen

Differenz zwischen zwei Datumswerten

DateDiff() subtrahiert zwei Datumswerte. Folgende Parameter werden benötigt:

"d" gibt eine Einheit für den Rückgabewert an. Hier wird der Zeitraum zwischen den zwei Datumswerten in Tagen gemessen. Weitere Möglichkeiten finden Sie in der Hilfe.

Die letzten zwei Parameter sind Datumswerte, die in der Form #12/31/2008# - Now()subtrahiert werden.

Als Wert wird ein Long-Datentyp zurückgegeben, der die Differenz zwischen zwei Datumswerten in einer bestimmten Zeiteinheit abbildet.

Datumswerte werden als String oder als Date-Datentyp angegeben.

tage = DateDiff("d", Now(), #12/31/2008#)tage = DateDiff("d", Now(), "31.12.")

Page 53: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 53Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 53

Regionales Rechenzentrum für Niedersachsen

Datumswerte addieren

DateAdd() addiert zwei Datumswerte. Folgende Parameter werden benötigt:

"m" gibt eine Einheit für die Addition an. Hier werden eine bestimmte Anzahl von Monaten auf ein bestimmtes Datum aufaddiert. Weitere Möglichkeiten finden Sie in der Hilfe.

Der zweite Parameter gibt die Anzahl der Einheiten an. Hier werden in der ersten Berechnungen zwei Monate zu einem Monat addiert. In der zweiten Berechnung werden zwei Monate subtrahiert.

Als dritter Parameter wird ein Datumswert angegeben, dem die Anzahl Einheiten hinzu addiert werden.

Als Ergebnis wird das errechnete Datum zurückgeliefert.

Dim datum As Date

datum = DateAdd("m", 2, "1.11")datum = DateAdd("m", -2, "1.11")

Page 54: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 54Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 54

Regionales Rechenzentrum für Niedersachsen

Datumswert als Einheit

DatePart()filtert eine bestimmte Einheit aus dem Datum heraus. Folgende Parameter werden benötigt.

Der erste Parameter legt die Einheit für den Rückgabewert fest. Hier werden Quartalsangaben "q" und das Jahr "yyyy" zurückgeliefert. Die möglichen Parameter finden Sie in der Hilfe.

Als zweiter Parameter wird ein Datumswert angegeben, aus dem die entsprechende Einheit herausgefiltert wird.

Datumswerte werden als String oder als Date-Datentyp angegeben.

Dim which As Integer

which = DatePart("q", "1.11")which = DatePart("yyyy", "1.11.2008")

Page 55: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 55Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 55

Regionales Rechenzentrum für Niedersachsen

Zeichenkettenfunktionen

Zum Beispiel sind folgende Funktionen vordefiniert: Asc() oder Chr$(), um den ANSI-Code oder das Zeichen für den ANSI-Code

zu lieferen. Format() für die Formatierung von String. InStr() sowie InStrRew() für das Durchsuchen eines Strings. Join() oder Split(), um Array-Elemente in einem String zu speichern oder

ein Array aus einem String zu erzeugen, Mid(), Left() und Right() erzeugen Teilstring durch die Angabe einer

Position. Trim$, LTrim$(), RTrim$() entfernt Leerzeichen. Replace() ersetzt einen String durch einen anderen String.

... können den Rückgabewert Variant oder String nutzen. Zum Beispiel Format() gibt einen Variant zurück, der jeden beliebigen Datentyp enthalten

kann. Format$() gibt immer ein String zurück. Eine automatische Typ-Überprüfung ist

möglich.

Page 56: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 56Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 56

Regionales Rechenzentrum für Niedersachsen

Länge eines String

Die Anzahl Zeichen eines Strings werden zurückgeliefert. Es wird die Länge eines Strings ermittelt. Falls der String leer ist, wird eine Länge von Null zurückgeliefert. Falls der String undefiniert ist, wird ein Fehler zurückgeliefert. Mit Hilfe der

Funktion Nz(text) wird ein undefinierter String in einen leeren String umgewandelt.

Dim text As StringDim laenge As Integer

text = "Hello World"laenge = Len(text)

Page 57: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 57Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 57

Regionales Rechenzentrum für Niedersachsen

Teilstring eines Strings

Dim text As StringDim tmp As StringDim laenge As Integer

text = "Hello World"

tmp = Left(text, 3) 'Left(string, laenge)

tmp = Right(text, 3) 'Right(string, laenge)

tmp = Mid(text, 1, 5) 'Mid(string, start, laenge)tmp = Mid(text, 7, 3)

Page 58: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 58Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 58

Regionales Rechenzentrum für Niedersachsen

Grafische Darstellung von Left und Right

H e l l o W o r l d

Left(text, 3)

H e l l o W o r l d

Right(text, 3)

Page 59: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 59Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 59

Regionales Rechenzentrum für Niedersachsen

Grafische Darstellung von Mid

H e l l o W o r l d

Mid(text, 1, 5)

H e l l o W o r l d

Mid(text, 7, 3)

Page 60: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 60Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 60

Regionales Rechenzentrum für Niedersachsen

Suche nach einem String

Innerhalb einer Zeichenfolge wird nach einem bestimmten Muster gesucht. Folgende Parameter werden benötigt.

Der erste gibt den Beginn der Suche an. Die Suche beginnt an einem bestimmten Zeichen in der Zeichenfolge. Der Parameter ist optional.

Als zweiter Parameter wird die zu durchsuchende Zeichenfolge übergeben. Als dritter Parameter wird das Suchmuster angegeben.

Falls die Suche erfolgreich war, wird der Beginn des Suchmusters in der durchsuchten Zeichenfolge angegeben. Falls das Muster nicht gefunden wird, wird Null zurückgeliefert.

Dim text As StringDim pos As Integer

text = "Eisbären leben in der Arktis"pos = Instr(4, text, "leben")

Page 61: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 61Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 61

Regionales Rechenzentrum für Niedersachsen

Weiteres Beispiel für eine Suche

Const komma = ","Dim text As StringDim tmpText As StringDim pos As IntegerDim tmpPos As Integer

text = "Eisbär, Braunbär, Nasenbär, Grizzlybär"tmpPos = 1pos = Instr(text, komma)

If (pos > 0) ThenDo

tmpZeichen = Mid(text, tmpPos, (pos - tmpPos))tmpPos = pos + 1pos = Instr(tmpPos, text, komma)

Loop While (pos > 0)

tmpZeichen = Right(text, Len(text) - tmpPos)End If

Mit Hilfe der Schleife wird der Text in die verschiedenen Worte

gesplittet.

Page 62: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 62Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 62

Regionales Rechenzentrum für Niedersachsen

Text suchen und ersetzen

In einem String werden Zeichen durch andere ersetzt. Folgende Parameter werden übergeben:

Als erster Parameter wird ein String übergeben, in dem Zeichen ersetzt werden. Als zweiter Parameter wird die zu ersetzende Zeichenfolge übergeben. Als dritter Parameter wird der Ersetzungstext angegeben.

Dim text As StringDim tmpText As String

text = "Eisbär, Braunbär, Nasenbär, Grizzlybär"tmpText = Replace(text, "ä", "ae")

Page 63: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 63Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 63

Regionales Rechenzentrum für Niedersachsen

Weitere Möglichkeiten

tmpText = "Nasenbaer, GrizzlybÄr, Braunbaer, Koalabär Die folgenden Parameter sind optional. Weitere Möglichkeiten:

tmpText = Replace(text, "ä", "ae", 11, , vbBinaryCompare) tmpText = Replace(text, "ä", "ae", , , vbBinaryCompare) tmpText = Replace(text, "ä", "ae", 11, 2)

Die Suche in dem Text beginnt an einer bestimmten Position (vierter Parameter).

Als fünfter Parameter wird die Anzahl der Ersetzungen angegeben. Hier wird das Zeichen ä zweimal durch die Zeichenfolge ae ersetzt.

Als letzter Parameter wird eine Vergleichsart angegeben. Laut ANSI-Zeichensatz hat Ä eine andere Codierung als ä. Ä wird nicht ersetzt.

Dim text As StringDim tmpText As String

text = "Eisbär, Nasenbär, GrizzlybÄr, Braunbär, Koalabär"tmpText = Replace(text, "ä", "ae", 11, 2, vbBinaryCompare)

Page 64: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 64Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 64

Regionales Rechenzentrum für Niedersachsen

Groß- und Kleinschreibung

Mit Hilfe der Funktion UCase() werden alle Kleinbuchstaben in Großbuchstaben umgewandelt.

Mit Hilfe der Funktion LCase() werden alle Großbuchstaben in Kleinbuchstaben umgewandelt.

Dim text As StringDim tmpText As String

text = "Eisbär, Braunbär, Nasenbär, Grizzlybär"tmpText = LCase(text)tmpText = UCase(text)

Page 65: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 65Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 65

Regionales Rechenzentrum für Niedersachsen

Leerzeichen entfernen

LTrim() entfernt alle Leerzeichen am Beginn der Zeichenkette. RTrim() entfernt alle Leerzeichen am Ende der Zeichenkette. Trim() entfernt alle Leerzeichen am Beginn und Ende der Zeichenkette.

Dim text As StringDim tmpText As String

text = " Eisbär, Braunbär, Nasenbär, Grizzlybär "tmpText = LTrim(text)tmpText = Rtrim(text)tmpText = Trim(text)

Page 66: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 66Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 66

Regionales Rechenzentrum für Niedersachsen

Formatierungen

Dim text As StringDim tmpText As String

text = DatetmpText = Format(text, "Long Date")' Dienstag, 9. April 2007

text = TimetmpText = Format(text, "Short Time") ' 09:37

text = "12345,64454"tmpText = Format(text, "Currency") ' 12.345,64 €

text = 0tmpText = Format(text, "Yes/No") ' Nein

text = #12/07/2007#tmpText = Format(text, "dd.mmmm.yyy") ' 07. Dezember. 2007

text = 1230.3tmpText = Format(text, "##,##0.00") ' 1.230.30

Page 67: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 67Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 67

Regionales Rechenzentrum für Niedersachsen

Hinweise zur Funktion

Mit Hilfe der Funktion Format() können Daten für die Ausgabe formatiert werden.

Der Wert der Variablen wird nicht verändert. Die Art der Darstellung am Bildschirm, im Textfeld etc. wird dem Bedürfnissen des Nutzers angepasst.

Der Funktion werden folgende Parameter übergeben: Als erster Parameter werden die zu formatierenden Daten übergeben. Als zweiter Parameter wird ein Formatstring übergeben. Der Formatstring ist

vordefiniert oder vom Entwickler definiert. Viele Beispiele finden Sie in der Hilfe unter dem Namen der Funktion.

Page 68: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 68Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 68

Regionales Rechenzentrum für Niedersachsen

Ereignis (Event)

... tritt immer in Verbindung mit einem Objekt auf. ... wird vom Nutzer des Formulars oder Steuerelements ausgelöst. ... ist eine Reaktion auf eine Benutzeraktion. Beispiele für Ereignisse:

Die Größe eines Formulars wird verändert. Ein weiteres Fenster wird mit Hilfe einer Schaltfläche geöffnet. Ein Optionsfeld wird mit Hilfe der Maus aktiviert. Ein Textfeld wird nach der Eingabe von Zeichen verlassen. In ein Textfeld werden Zeichen mit Hilfe der Tastatur eingegeben. Aus einer Liste werden Elemente ausgewählt.

Page 69: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 69Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 69

Regionales Rechenzentrum für Niedersachsen

Ereignis-Gruppen in Access

Fenster- und Fokus-Ereignis: Die Größe eines Formulars wird verändert. Ein Formular wird geöffnet.

Tastatur- und Maus-Ereignis: Ein Optionsfeld wird mit Hilfe der Maus aktiviert. Es werden Zeichen in ein Textfeld eingegeben.

Daten- und Filter-Ereignisse: Die angezeigten Daten werden verändert. Ein Datensatz wird gelöscht.

Fehler-Ereignisse oder zeitabhängige Ereignisse: Nach einer bestimmten Zeitspanne wird ein Formular geschlossen.

Page 70: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 70Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 70

Regionales Rechenzentrum für Niedersachsen

Ereignisprozeduren (Event-Handler)

... fangen ein Ereignis ab. ... reagieren mit Hilfe von Anweisungen auf das ausgelöste Ereignis. ... enthalten häufig keine Anweisungen. Der Aufruf des Ereignisses bleibt

ohne Folgen. ... bestehen genauso wie selbstdefinierte Prozeduren aus einem

Prozedurenkopf und -rumpf. ... geben kein Wert zurück.

Private Sub plz_BeforeUpdate (Cancel As Integer)End Sub

Private Sub Form_Load()End Sub

Page 71: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 71Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 71

Regionales Rechenzentrum für Niedersachsen

Aufbau des Prozedurkopfs

Private Sub Form_Load ()

Private Sub plz_BeforeUpdate (Cancel As Integer)

Jede Prozedur beginnt mit diesem Schlüsselwort und endet dementsprechend mit End Sub.

Der Bezeichner eines Event-Handler setzt sich aus dem Namen des Objekts und des Ereignisses zusammen.

In Abhängigkeit des Ereignisses werden dem Event-Handler Informationen übergeben.

Auf ein Event-Handler kann nur innerhalb des Moduls zugegriffen werden.

Page 72: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 72Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 72

Regionales Rechenzentrum für Niedersachsen

Formular-Ereignisse

Load, wenn das Formular geöffnet wird und die Datensätze angezeigt werden.

Open, wenn das Formular geöffnet wird und bevor die Datensätze angezeigt werden.

Close, wenn das Formular geschlossen wird. Current, wenn von einem Datensatz zum anderen gesprungen wird. Der

Datensatzzeiger wird bewegt. Activate, wenn das Formular den Fokus bekommt. Deactivate, wenn das momentan aktuelle Formular den Fokus abgibt. Resize, wenn die Größe des Fensters geändert wird. Timer, sobald das ZeitgeberIntervall abgelaufen ist.

Page 73: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 73Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 73

Regionales Rechenzentrum für Niedersachsen

Beispiel

Das Ereignis Form_Load wird häufig genutzt, um das Formular anzupassen.

Elemente werden auf die Standardeinstellungen gesetzt.

Private Sub Form_Load() chkBananen.Value = False chkBirne.Value = False chkAepfel.Value = False txtSumme.Value = "0.00 €"End Sub

Page 74: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 74Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 74

Regionales Rechenzentrum für Niedersachsen

Reihenfolge von Events (Beispiel)

Open(Beim Öffnen)

Load(Beim Laden)

Resize(Bei Größenänderung)

Activate(Bei Aktivierung)

Current(Beim Anzeigen)

Form

ular

öffn

en

Unload(Beim Entladen)

Deactivate(Bei Deaktivierung)

Close(Beim Schließen)

Formular schließen

Page 75: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 75Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 75

Regionales Rechenzentrum für Niedersachsen

Ereignisse von Steuerelementen

BeforeUpdate wird ausgelöst, wenn ein Datensatz geändert wurde, aber noch nicht gespeichert ist.

AfterUpdate wird ausgelöst, wenn ein Datensatz geändert wurde und in der Datenbank gespeichert ist.

Change wird ausgelöst, wenn der Inhalt des Steuerelements geändert wird.

Enter wird ausgelöst, wenn in das Steuerelement hineingegangen wird. Exit wird ausgelöst, wenn das Steuerelement verlassen wird.

Page 76: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 76Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 76

Regionales Rechenzentrum für Niedersachsen

Beispiel

Private Sub fraAmpel_AfterUpdate() Select Case fraAmpel.Value Case 1 rectFarbe.BackColor = RGB(255, 0, 0) Case 2 rectFarbe.BackColor = RGB(0, 255, 0) Case 3 rectFarbe.BackColor = RGB(255, 200, 0) Case Else rectFarbe.BackColor = RGB(0, 0, 0) End Select Me.RefreshEnd Sub

Page 77: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 77Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 77

Regionales Rechenzentrum für Niedersachsen

Tastatur- und Maus-Ereignisse

KeyDown, wenn die Taste gedrückt wird. KeyPress, wenn die Taste gehalten wird. KeyUp, wenn die Taste losgelassen wird. Click, wenn auf eine Schaltfläche etc. mit der Maus geklickt wird. MouseDown, wenn die Maustaste gedrückt wird. MouseUp, wenn die Maustaste losgelassen wird. MouseMove, wenn der Maus bewegt wird.

Page 78: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 78Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 78

Regionales Rechenzentrum für Niedersachsen

Reihenfolge der Tastatur-Ereignisse

KeyDown(Bei Taste Ab)

KeyPress(Bei Taste)

KeyUp(Bei Taste Auf)

Page 79: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 79Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 79

Regionales Rechenzentrum für Niedersachsen

Beispiel: KeyPress

Private Sub plz_KeyPress(KeyAscii As Integer)

If (KeyAscii < 48) Or (KeyAscii > 57) ThenKeyAscii = 0

End If

End Sub

Jedes ANSI-Zeichen wird mit Hilfe einer Ganzzahl codiert. Diese Ganzzahl kann für die Überprüfung der eingegebenen Zeichen

genutzt werden. Falls das eingegebene Zeichen keine Ziffer ist, wird das Zeichen mit der

Anweisung KeyAscii = 0 unterdrückt.

Page 80: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 80Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 80

Regionales Rechenzentrum für Niedersachsen

ANSI-Zeichen; 0 bis 125

Page 81: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 81Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 81

Regionales Rechenzentrum für Niedersachsen

ANSI-Zeichen; 126 bis 255

Page 82: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | | Folie 82Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 82

Regionales Rechenzentrum für Niedersachsen

Beispiel: KeyUp

Private Sub plz_KeyUp(KeyCode As Integer, Shift As Integer)

If (KeyCode < 48) Or (KeyCode > 57) ThenKeyCode = 0

End If

End Sub

Jedes ANSI-Zeichen wird mit einen virtuellen Tastencode von Windows versehen. Das Alphabet sowie die Ziffern haben die gleiche Codierung wie in der ANSI-Tabelle. Zusätzlich können Funktions- und Navigationstasten abgefragt werden. Mit Hilfe des Parameters KeyCode kann diese Codierung abgefragt werden.

Shift gibt darüber Auskunft, ob die Tasten <UMSCHALT>, <STRG> oder <ALT> mit einer anderen Taste gedrückt wurden.

Page 83: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 83Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 83

Regionales Rechenzentrum für Niedersachsen

Ereignisse im Eigenschaftenfenster

Öffnen Sie ein Formular in der Entwurfsansicht.

Markieren Sie das gewünschte Objekt (Steuerelement, Formular oder Bericht).

Öffnen Sie das dazugehörige Eigenschaftenfenster.

Wechseln Sie auf die Registerkarte Ereignis.

Auf der Registerkarte werden alle Ereignisse mit ihrer deutschen Bezeichnung aufgeführt.

Wählen Sie ein Ereignis aus, in dem Sie den Eintrag [Ereignisprodzedur] aus dem Kombinationsfeld auswählen.

Es öffnet sich automatisch der VBA-Editor. Der Event-Handler wird angezeigt.

Page 84: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 84Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 84

Regionales Rechenzentrum für Niedersachsen

Codefenster nutzen

Voraussetzung: Für das Formular oder den Bericht wurde mindestens ein Event-Handler über das Eigenschaftenfenster angelegt.

Wählen Sie im Projekt-Explorer ein Formular- oder Berichtsmodul aus. Wählen Sie aus dem Kombinationsfeld am linken, oberen Rand des Code-

Fensters ein Objekt aus. Wählen Sie anschließend aus dem Kombinationsfeld am rechten, oberen

Rand des Code-Fensters das gewünschte Ereignis aus. Der Event-Handler wird automatisch in das Code-Fenster eingefügt.

Page 85: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 85Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 85

Regionales Rechenzentrum für Niedersachsen

Projekte in VBA

... sind der äußere Rahmen für ein VBA-Programm. ... werden automatisch von einer Office-Anwendung angelegt. ... können nicht vom Entwickler angelegt werden. ... werden gemeinsam mit der Datenbank in einer Datei gespeichert.

Page 86: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 86Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 86

Regionales Rechenzentrum für Niedersachsen

Beispiel

Projekt: Access-Datenbank

Formularmodul

txtField_BeforeUpdate

Form_Load

PruefeDaten

Standardmodul

berechne_Daten

GetError

FormatData

Page 87: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 87Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 87

Regionales Rechenzentrum für Niedersachsen

Module

... fassen Prozeduren, die ein Thema bearbeiten, zusammen. ... sind die Kapitel in einem Buch und die darin enthaltenen Prozeduren

die Unterkapitel. ... sind eine Sammlung von Deklarationen, Anweisungen und Prozeduren,

die im Rahmen eines bestimmten Projekts gespeichert werden. ... ermöglichen eine strukturierte Programmierung. ... bestehen mindestens aus einer Zeile Deklaration. ... werden in Klassen- und Standardmodule unterteilt.

Page 88: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 88Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 88

Regionales Rechenzentrum für Niedersachsen

Standard-Module

... enthalten Code, der nicht an ein Formular oder Bericht gebunden ist. ... enthalten häufig Code, der innerhalb des gesamten Projekts von vielen

Elementen genutzt wird. ... sind nicht an ein bestimmtes Objekt gebunden. ... werden in eine Datei mit der Endung ".bas" gespeichert, die in der

Datenbank gekapselt ist. ... im VBA-Editor erstellen:

Menü Einfügen – Modul im VBA-Editor. ...im Access-Fenster erstellen:

Ribbon Erstellen. Kategorie Andere, Symbol Neues Objekt: Modul in Access. Der VBA-Editor öffnet sich automatisch.

Page 89: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 89Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 89

Regionales Rechenzentrum für Niedersachsen

Klassenmodule

... fassen Objekte in Kategorien zusammen. ... fassen Objekte mit den gleichen Eigenschaften und Methoden

zusammen. ... stellen Baupläne für konkrete Objekte dar. ... bieten eine Schablone für bestimmte Kategorien von Objekten. ... können mit einen Formular, Bericht oder Steuerelement automatisch

erstellt werden. ... werden in Dateien mit der Endung ".cls" gespeichert, die in der

Datenbank gekapselt ist.

Page 90: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 90Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 90

Regionales Rechenzentrum für Niedersachsen

Klassenmodule erstellen

Benutzerdefinierte Klassenmodulen: Menü Einfügen – Klassenmodul im VBA-Editor. Ribbon Erstellen; Kategorie Andere, Symbol Neues Objekt: Klassenmodul in

Access. Der VBA-Editor öffnet sich automatisch. Klassenmodule in Abhängigkeit eines Formulars etc.:

Das Formular oder Bericht ist in der Entwurfsansicht geöffnet. Ein Formular, Bericht oder Steuerelement wird ausgewählt und das

Eigenschaftenfenster geöffnet. Die Registerkarte Ereignis wird aktiviert. Klicken Sie in das Feld eines bestimmten Ereignisses und wählen den Eintrag

Ereignisprozedur aus. Der VBA-Editor öffnet sich automatisch.

Page 91: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 91Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 91

Regionales Rechenzentrum für Niedersachsen

Zugriffsrechte

Private Der Zugriff auf die Prozedur / Funktion ist von außen her nicht möglich. Variablen, die mit Dim deklariert sind, können auch nicht aus anderen Modulen

genutzt werden. Variablen und Prozeduren können nur von dem Modul genutzt werden, in dem

sie deklariert sind. Variablen und Prozeduren sind in einem Modul gekapselt. ... kapselt Deklarationen und Anweisungen in einem Modul.

Public Der Zugriff auf die Prozedur ist von außen möglich. Die Prozeduren können von anderen Modulen aus aufgerufen werden. Deklaration von öffentlichen Prozeduren und Variablen. Prozeduren oder Funktionen in Standardmodulen sind standardmäßig

öffentlicht. Beide Schlüsselwörter sollten nicht innerhalb von Prozeduren genutzt werden.

Page 92: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 92Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 92

Regionales Rechenzentrum für Niedersachsen

Öffentliche Variablen auf Modulebene

Option Compare Database

Public Enum fehlercode laenge = 23 notNumeric = 2End Enum

Page 93: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 93Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 93

Regionales Rechenzentrum für Niedersachsen

Aufruf von öffentlichen Variablen

Private Sub cmdProof_Click() Dim varPLZ As String Dim fehler As Integer varPLZ = txtPlz.Value fehler = testStrings.pruefePlz(varPLZ) If fehler <> 0 Then Select Case fehler

Case fehlercode.laenge MsgBox ("Fehlerhafte Länge") txtPlz.ForeColor = RGB(255, 0, 0)

Page 94: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 94Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 94

Regionales Rechenzentrum für Niedersachsen

Private Variablen auf Prozedurebene

Sub zaehlen(anfang As Integer, ende As Integer) Dim count As Integer Dim zaehler As Double ende = 20 For zaehler = anfang To ende Step 2 Debug.Print zaehler Next zaehlerEnd Sub

Page 95: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 95Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 95

Regionales Rechenzentrum für Niedersachsen

Öffentliche Prozeduren auf Modulebene

Public Function pruefePlz(daten As String) As Integer If Len(daten) <> 5 Then pruefePlz = fehlercode.laenge Exit Function End If If Not IsNumeric(daten) Then pruefePlz = fehlercode.notNumeric Exit Function End If pruefe = 0

End Function

Page 96: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 96Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 96

Regionales Rechenzentrum für Niedersachsen

Aufruf von öffentlichen Prozeduren

Private Sub cmdProof_Click() Dim varPLZ As String Dim fehler As Integer varPLZ = txtPlz.Value fehler = testStrings.pruefePlz(varPLZ)

Aufruf: modul.prozedur(). Die Prozedur wird immer in Abhängigkeit des Moduls aufgerufen. Der Modulname und der Prozedurname werden durch ein Punkt getrennt. Dem Prozedurnamen folgt in runden Klammern die Parameterliste.

Page 97: VBA (Visual Basic for Application) · 2008-08-13 · Regionales Rechenzentrum für Niedersachsen VBA (Visual Basic for Application) Prozeduren und Funktionen

OpenOffice | 13.08.08 | Folie 97Access 2007 – Datenbankentwicklung | 06.03.08 | Seite 97

Regionales Rechenzentrum für Niedersachsen

Private Prozeduren auf Prozedurebene

Private Sub Form_Load() txtBenutzer.TextAlign = 1 txtBenutzer.Value = "Bestellung" txtPasswort.InputMask = "Password" txtPasswort.SetFocus End Sub