Anweisung

Werbung
VBA (Visual Basic for Application)
Bedingte Anweisungen und Schleifen
Regionales Rechenzentrum für Niedersachsen
Algorithmus
 Genau definierte Verarbeitungsvorschrift zur Lösung einer Aufgabe.
 Beschreibung eines Schemas, welches unter Verwendung von endlich
vielen Arbeitsschritten ein bestimmtes Problem löst.
 Endliche Folge von Anweisungen, die nacheinander ausgeführt werden.
 Anweisungen bestehen aus Schlüsselwörtern aus VBA sowie aus
Operatoren und Operanden.
 Manche Anweisungen werden nur unter bestimmten Bedingungen
durchlaufen.
 Die Anweisungen können unter bestimmten Bedingungen wiederholt werden.
Beispiele aus dem täglichen Leben:
 Kochrezepte
 Steuerprogramme für technische Geräte (Waschmaschinen etc.)
OpenOffice | 12.08.08 | Folie 2
Access 2007 – VBA | 25.06.08 | Seite 2
Regionales Rechenzentrum für Niedersachsen
Beispiel für einen Algorithmus:
Bedienung einer Waschmaschine











Tür der Waschmaschine öffnen.
Max. 5 kg Wäsche (einer Farbe ) einfüllen.
Tür der Waschmaschine schließen.
Waschmittel passend zur Farbe der Wäsche in die kleine Schublade für
den Hauptwaschgang füllen.
Wasserzulauf öffnen.
Waschprogramm wählen.
Starttaste drücken.
Waschvorgang abwarten.
Nach Programm-Ende Maschine abstellen.
Wasserzulauf schließen.
Tür öffnen und Wäsche entnehmen.
OpenOffice | 12.08.08 | Folie 3
Access 2007 – VBA | 25.06.08 | Seite 3
Regionales Rechenzentrum für Niedersachsen
Eigenschaften eines Algorithmus
Ein Algorithmus benötigt endlich viele Arbeitsschritte.
Ein Algorithmus ist beschreibbar.
Jeder Arbeitsschritt ist ausführbar.
Ein Algorithmus liefert unter identischen Startbedingungen immer das
gleiche Endergebnis.
 Der Ablauf des Verfahrens ist eindeutig definiert.




OpenOffice | 12.08.08 | Folie 4
Access 2007 – VBA | 25.06.08 | Seite 4
Regionales Rechenzentrum für Niedersachsen
Beispiel für ein Algorithmus
 Aufgabe:
 Suche ein bestimmtes Wort in einen Text.
 Eingangsdaten:
 Variable text: Zeichenfolge (String), in der ein bestimmtes Wort gesucht
werden soll.
 Variable wort: Zeichenfolge, die gesucht wird.
 Ausgangsdaten:
 Ist das Wort in der Zeichenfolge satz vorhanden?
OpenOffice | 12.08.08 | Folie 5
Access 2007 – VBA | 25.06.08 | Seite 5
Regionales Rechenzentrum für Niedersachsen
Grafische Darstellung von Algorithmen
 ... in einem Flussdiagram:
 Ein Flussdiagramm ist ein Ablaufdiagramm für Computerprogramme.
 Die benutzten Symbole sind in der DIN 66001 genormt.
 ... in einem Struktogramm:
 Struktogramme werden auch als Nassi-Shneidermann-Diagramme
bezeichnet.
 Die benutzten Symbole sind in der DIN 66261 genormt.
 Struktogramm-Editoren sind unter
http://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm zu finden.
OpenOffice | 12.08.08 | Folie 6
Access 2007 – VBA | 25.06.08 | Seite 6
Regionales Rechenzentrum für Niedersachsen
Beispiel: Suche nach einem Wort
Flussdiagramm
OpenOffice | 12.08.08 | Folie 7
Access 2007 – VBA | 25.06.08 | Seite 7
Regionales Rechenzentrum für Niedersachsen
Beispiel: Suche nach einem Wort
Struktodiagramm
OpenOffice | 12.08.08 | Folie 8
Access 2007 – VBA | 25.06.08 | Seite 8
Regionales Rechenzentrum für Niedersachsen
Vorteile von Struktogrammen
 Struktogramme erzwingen einen sequentiellen Programmablauf ohne
Sprünge.
 Im Allgemeinen führt die Verwendung von Struktogrammen dazu, dass
Programme besser strukturiert sind, als bei der Verwendung von
Programmablaufplänen.
 Verwenden Sie vorzugsweise (zumindest während Sie ihre erste
Programmiersprache lernen) Struktogramme.
 Bevor Sie mit der Codierung beginnen, machen Sie einen
Programmentwurf.
OpenOffice | 12.08.08 | Folie 9
Access 2007 – VBA | 25.06.08 | Seite 9
Regionales Rechenzentrum für Niedersachsen
Kontrollstrukturen
 Mit Hilfe von Kontrollstrukturen kann der Programmablauf beeinflusst
werden.
 In Abhängigkeit vom Wert einer oder mehrerer Variablen wird der
Programmablauf gesteuert.
 Es gibt folgende Möglichkeiten:
 Auswahlanweisungen:
– Bedingte Anweisungen; if – then - Anweisungen
– Fallunterscheidungen; select - case - Anweisungen
 Schleifen (Iterationsanweisungen):
– Kopfgesteuerte Schleifen: while – wend – Schleifen oder do – loop -Schleifen
– Fußgesteuerte Schleifen: do – loop - Schleifen
– Zählschleifen: for – next - Schleifen
 Schleifen können vom Programmierer unter bestimmten Bedingungen
unterbrochen werden.
OpenOffice | 12.08.08 | Folie 10
Access 2007 – VBA | 25.06.08 | Seite 10
Regionales Rechenzentrum für Niedersachsen
Bedingte Anweisungen
If (bedingung) Then
Anweisung
End If
Anweisung
 ... oder Selektionsanweisungen.
 Dem Schlüsselwort If (wenn) folgt eine Bedingung.
 Wenn diese Bedingung erfüllt ist, dann werden alle Anweisungen bis zum
End If ausgeführt.
 End... markiert das Ende eines Blocks. Hier: Das Ende einer ifAnweisung.
 Andernfalls werden die Anweisungen nach dem if-Block ausgeführt.
OpenOffice | 12.08.08 | Folie 11
Access 2007 – VBA | 25.06.08 | Seite 11
Regionales Rechenzentrum für Niedersachsen
Flußdiagramm und Struktogramm
Bedingung
nein
ja
Anweisung 1
Bedingung
ja
nein
Flussdiagramm
Anweisung 1
Struktogramm
OpenOffice | 12.08.08 | Folie 12
Access 2007 – VBA | 25.06.08 | Seite 12
Regionales Rechenzentrum für Niedersachsen
Beispiel
bestellPreis = (bestellmenge * preis)
rabatt = 0.0
If (bestellmenge > 100) Then
rabatt = 0.03
rabattPreis = bestellPreis * rabatt
bestellPreis = bestellPreis - rabattPreis
End If
Debug.Print "Endsumme: "
OpenOffice | 12.08.08 | Folie 13
Access 2007 – VBA | 25.06.08 | Seite 13
Regionales Rechenzentrum für Niedersachsen
& bestellPreis
Bedingungen
 ... sind Ausdrücke, die einen boolschen Wert zurückliefern.
 ... vergleichen mit Hilfe von bestimmten Operatoren zwei Werte.
 ... sind zum Beispiel:
 Wenn die Bestellmenge eine gewisse Höchstmenge überschreitet...
 Wenn der Kontostand dem Dispo entspricht...
 Wenn die Strecke A doppelt so lang ist wie Strecke B...
 Wenn die Warenmenge eine Mindestmenge unterschreitet...
OpenOffice | 12.08.08 | Folie 14
Access 2007 – VBA | 25.06.08 | Seite 14
Regionales Rechenzentrum für Niedersachsen
Vergleichsoperatoren
Operator
=
<
<=
>
>=
<>
Rechenart
ist gleich
ist kleiner als
ist kleiner gleich als
ist größer als
ist größer gleich als
ist ungleich
OpenOffice | 12.08.08 | Folie 15
Access 2007 – VBA | 25.06.08 | Seite 15
Regionales Rechenzentrum für Niedersachsen
Beispiel
(7 = 3 ) => False
(7 < 3 ) => False
(7 <= 3 ) => False
(7 > 3 ) => True
(7 >= 3 ) => True
(7<> 3 ) =>True
Strings vergleichen
Dim zeichen As String
Dim result As Boolean
gleich = zeichen Like "World"
result = (zeichen = "World")
 Strings können mit Hilfe des Gleichheitszeichen verglichen werden.
 Nachteil: Platzhalter für einzelne Zeichen können nicht genutzt werden.
 DIe Klammerung des Vergleichsausdrucks erhöht die Lesbarkeit.
 Strings können mit Hilfe von Like verglichen werden.
 Ein Wort wird mit einem Suchmuster verglichen.
 "Ist ähnlich" dem Wort...
 Die Option Compare – Anweisung am Anfang des Moduls legt die Art des
Vergleichs fest.
K03_conditionLoop.accdb:
Modul conditionLoop
Prozedur: strVergleich
OpenOffice | 12.08.08 | Folie 16
Access 2007 – VBA | 25.06.08 | Seite 16
Regionales Rechenzentrum für Niedersachsen
Vergleichsarten
 Option Compare Binary am Anfang des Moduls oder
vbBinaryCompare als Parameter:
 ... ist die Standardeinstellungen.
 Die Zeichen werden nach der Codierung in der ANSI-Tabelle verglichen.
 A < B < C... < Z < a < b < c .... < z.
 Option Compare Text am Anfang des Moduls oder vbTextCompare
als Parameter:
 Der Text wird miteinander verglichen.
 Ein Zeichen, egal ob groß oder klein geschrieben, hat die gleiche Gewichtung.
 A = a < B = b ...
 Option Compare Database am Anfang des Moduls oder
vbDatabaseCompare als Parameter:
 Die Zeichen werden in Abhängigkeit der Einstellungen der Datenbank verglichen.
 Klicken Sie in Access auf die Schaltfläche Office und anschließend auf Access-
Optionen. Wählen Sie die Kategorie Häufig verwendet aus. In dem Bereich
Datenbank erstellen auf der rechten Seite wird die Sortierreihenfolge angegeben.
OpenOffice | 12.08.08 | Folie 17
Access 2007 – VBA | 25.06.08 | Seite 17
Regionales Rechenzentrum für Niedersachsen
Platzhalter in Texten nutzen
Mit Hilfe des Fragezeichens wird genau ein Zeichen ersetzt.
Mit Hilfe des Sternchens wird kein oder mehrere beliebige Zeichen ersetzt.
Mit Hilfe des Hash # wird genau ein numerisches Zeichen (0..9) ersetzt.
Ein Bereich von Zeichen [Beginn-Ende] wird durch eckige Klammern
begrenzt.
 Eine Liste von Zeichen [char01, char02, ...] wird mit Hilfe der eckigen
Klammern zusammengefasst.
 Ein Ausrufezeichen invertiert die angegebenen Werte. Die Platzhalter
dürfen nicht enthalten sein.




OpenOffice | 12.08.08 | Folie 18
Access 2007 – VBA | 25.06.08 | Seite 18
Regionales Rechenzentrum für Niedersachsen
Beispiele
Vergleich
Erläuterung
Like "World"
Like "M*"
Like
Like
Like
Like
Like
Das Wort muss exakt dem Suchwort entsprechen.
Das Wort muss mit M beginnen. Alle nachfolgenden
Zeichen sind nicht definiert.
"M*er"
Das Wort muss mit M beginnen und mit "er" enden.
Zwischen diesen beiden Angaben kann eine
beliebige Anzahl von Zeichen stehen.
"M??er"
Das Wort muss mit M beginnen und mit "er" enden.
Zwischen diesen beiden Angaben stehen exakt
zwei Zeichen.
"31###"
Der Text beginnt mit 31 und hat eine Länge von 5
Zeichen.
"B[a, u]ch An der zweiten Position des Textes darf ein a oder
u stehen.
"3115[1-5] An der fünften Position der Postleitzahl kann eine 1,
2, 3, 4 oder 5 stehen.
OpenOffice | 12.08.08 | Folie 19
Access 2007 – VBA | 25.06.08 | Seite 19
Regionales Rechenzentrum für Niedersachsen
Beispiele
Vergleich
Like "[!0-9]-###-####"
Erläuterung
An der ersten Position dürfen keine Zahlen
stehen. "A-234-3456" würde dem Suchmuster
entsprechen.
Like "[!A-C]-###-[A-C]" An der ersten Position dürfen die Zeichen A,
B und C nicht stehen. An der letzten Position
muss ein A, B oder C stehen. "D-345-A'
entspricht dem Suchmuster.
Like "A*e?"
Das Wort beginnt mit A, dem beliebig viele
Zeichen folgen. Am Ende des Wortes steht
ein e, gefolgt von einem Zeichen.
OpenOffice | 12.08.08 | Folie 20
Access 2007 – VBA | 25.06.08 | Seite 20
Regionales Rechenzentrum für Niedersachsen
Andere Möglichkeit: StrComp()
Dim text As String
Dim suchwort As String
Dim result As Integer
result = StrComp(text, suchwort, vbTextCompare)
 StrComp() vergleicht ein Text mit einem Muster.
 Folgende Parameter werden der Funktion übergeben:
 Der zu vergleichende Text.
 Das Muster, mit dem verglichen wird.
 Die Art des Vergleichs.
OpenOffice | 12.08.08 | Folie 21
Access 2007 – VBA | 25.06.08 | Seite 21
Regionales Rechenzentrum für Niedersachsen
Rückgabewerte
Dim text As String
Dim suchwort As String
Dim result As Integer
result = StrComp(text, suchwort, vbTextCompare)




Die Zeichenfolge und das Suchmuster sind gleich: result = 0
Die Zeichenfolge liegt im Alphabet vor dem Suchmuster: result = -1
Die Zeichenfolge liegt im Alphabet hinter dem Suchmuster: result = 1
Suchmuster oder Zeichenfolge sind leer: result = ""
OpenOffice | 12.08.08 | Folie 22
Access 2007 – VBA | 25.06.08 | Seite 22
Regionales Rechenzentrum für Niedersachsen
Logische Operatoren
 ... oder relationale Operatoren.
 ... verknüpfen zwei oder mehr Bedingungen miteinander.
 Folgende Möglichkeiten sind vorhanden:
 AND (Und, Konjunktion) ist nur wahr, wenn alle Bedingungen wahr sind.
 OR (Oder, Disjunktion) ist wahr, sobald eine der Bedingungen wahr ist.
 NOT (Negation) invertiert den boolschen Wert der Bedingung.
 XOR (Antivalenz) ist wahr, wenn zwei Bedingungen ein unterschiedliches
Ergebnis liefern.
 EQL (Äquivalenz) ist wahr, wenn zwei Bedingungen das gleiche Ergebnis
liefern
 IMP (Implikation) ist wahr, wenn der erste Parameter falsch ist oder der zweite
Parameter wahr ist.
OpenOffice | 12.08.08 | Folie 23
Access 2007 – VBA | 25.06.08 | Seite 23
Regionales Rechenzentrum für Niedersachsen
Wahrheitstabelle
Bedingung
a
b Not a a AND b a OR b a XOR b a EQV b a IMP b
false
false
true
true
false
true
false
true
true
true
false
false
false
false
false
true
OpenOffice | 12.08.08 | Folie 24
Access 2007 – VBA | 25.06.08 | Seite 24
Regionales Rechenzentrum für Niedersachsen
false
true
true
true
false
true
true
false
true
false
false
true
true
true
false
true
Beispiel: NOT-Verknüpfung
Dim zahlA As Integer
Dim zahlB As Integer
Dim result As Integer
If NOT(zahlB >= 0) Then
Debug.Print "Division durch Null nicht erlaubt"
Else
result = zahlA / zahlB
End If
If (zahlB <> 0) Then
result = zahlA / zahlB
Else
Debug.Print "Division durch Null nicht erlaubt"
End If
OpenOffice | 12.08.08 | Folie 25
Access 2007 – VBA | 25.06.08 | Seite 25
Regionales Rechenzentrum für Niedersachsen
Beispiel: AND-Verknüpfung
bestellPreis = (bestellmenge * preis)
rabatt = 0.0
If ((bestellmenge > 100) AND (bestellmenge < 500)) Then
rabatt = 0.03
rabattPreis = bestellPreis * rabatt
bestellPreis = bestellPreis - rabattPreis
End If
Debug.Print "Endsumme: "
OpenOffice | 12.08.08 | Folie 26
Access 2007 – VBA | 25.06.08 | Seite 26
Regionales Rechenzentrum für Niedersachsen
& bestellPreis
Beispiel: OR-Verknüpfung
Dim zahl As Integer
Dim faktor As Integer
If ( (zahl < 10) OR (zahl > 20) ) Then
MsgBox "Die Zahl ist nicht korrekt."
End If
OpenOffice | 12.08.08 | Folie 27
Access 2007 – VBA | 25.06.08 | Seite 27
Regionales Rechenzentrum für Niedersachsen
Bindung und Auswertung
 Beispiel: (var1 <> var2) AND (var2 > 10)
 Zuerst wird die linke Bedingung (var1 <> var2) ausgewertet.
 Anschließend wird die rechte Bedingung (var2 > 10) ausgewertet.
 Beide Ergebnisse müssen in diesen Fall wahr sein, um die if-Anweisung
auszuführen.
 Sie können die Operatoren beliebig oft in beliebiger Mischung in einer
Bedingung nutzen.
 Um die Lesbarkeit zu erhöhen, sollten die verschiedenen Elemente der
Bedingung mit runden Klammern zusammengefasst werden.
 Es sollten nicht mehr als drei logische Operatoren in einer Bedingung
genutzt werden.
 Falls verschiedene Operatoren gemischt werden, muss die Bindung der
Operatoren beachtet werden. NOT hat eine höhere Bindung als AND.
AND hat eine höhere Bindung als OR. Anschließend folgen XOR, EQV
und IMP.
OpenOffice | 12.08.08 | Folie 28
Access 2007 – VBA | 25.06.08 | Seite 28
Regionales Rechenzentrum für Niedersachsen
Beispiel
Not (( 5
>
4)
AND
wahr
false
Regionales Rechenzentrum für Niedersachsen
<> 2))
wahr
wahr
OpenOffice | 12.08.08 | Folie 29
Access 2007 – VBA | 25.06.08 | Seite 29
(3
Bindungen der Operatoren
Hoch
Niedrig
Hoch
^
+ - (Vorzeichen)
*
/
\
Mod
+
-
OpenOffice | 12.08.08 | Folie 30
Access 2007 – VBA | 25.06.08 | Seite 30
Regionales Rechenzentrum für Niedersachsen
&
<>
=
<
<= => >
Niedrig
Like NOT
AND
OR
XOR
EQV
IMP
Nutzung bei Kontrollkästchen
Die Kontrollkästchen
werden ihr als Gruppe
dargestellt, aber...
... jedes
Kontrollkästchen kann
die Eigenschaft .Value
true (aktiv) oder false
(deaktiv) besitzen.
Jedes aktive
Kontrollkästchen besitzt
ein Häkchen.
K03_conditionLoop.accdb:
Formular frmObst
Formular frmObstAnzahl
OpenOffice | 12.08.08 | Folie 31
Access 2007 – VBA | 25.06.08 | Seite 31
Regionales Rechenzentrum für Niedersachsen
Code
' Sobald auf die Schaltfläche geklickt wird ...
Private Sub cmdRechnen_Click()
Dim ergebnis As Currency
ergebnis = 0
If chkBananen.Value = True Then
ergebnis = ergebnis + 1.99
End If
If chkBirne.Value = True Then
ergebnis = ergebnis + 2.99
End If
If chkAepfel.Value = True Then
ergebnis = ergebnis + 2.33
End If
txtSumme.Value = ergebnis & " €"
End Sub
OpenOffice | 12.08.08 | Folie 32
Access 2007 – VBA | 25.06.08 | Seite 32
Regionales Rechenzentrum für Niedersachsen
if – then - else
If (bedingung) Then
Anweisung
Wenn die Bedingung
erfüllt ist, ...
Else
Anweisung
End If
andernfalls werden die folgenden
Anweisungen ausgeführt.
Anweisung
OpenOffice | 12.08.08 | Folie 33
Access 2007 – VBA | 25.06.08 | Seite 33
Regionales Rechenzentrum für Niedersachsen
else
If (bedingung) Then
Anweisung
Else
Anweisung
End If
Anweisung





... beschreibt den Standardfall.
... fängt alle nicht behandelten Fälle ab.
... kann nur in Verbindung mit einem if-Zweig existieren.
... hat die gleiche Einrücktiefe wie der dazugehörige if-Zweig.
... benötigt keine Bedingung.
OpenOffice | 12.08.08 | Folie 34
Access 2007 – VBA | 25.06.08 | Seite 34
Regionales Rechenzentrum für Niedersachsen
Flussdiagramm und Struktogramm
Bedingung
nein
Bedingung
ja
Anweisung
ja
nein
Anweisung
AnAnweisung weisung
Flussdiagramm
OpenOffice | 12.08.08 | Folie 35
Access 2007 – VBA | 25.06.08 | Seite 35
Regionales Rechenzentrum für Niedersachsen
Struktogramm
Beispiel
bestellPreis = (bestellmenge * preis)
If (bestellmenge > 100) Then
rabatt = 0.03
rabattPreis = bestellPreis * rabatt
bestellPreis = bestellPreis – rabattPreis
Else
rabatt = 0.0
End If
Debug.Print "Endsumme: "
OpenOffice | 12.08.08 | Folie 36
Access 2007 – VBA | 25.06.08 | Seite 36
Regionales Rechenzentrum für Niedersachsen
& bestellPreis
ElseIf - Anweisung
If (bedingung) Then
Anweisung
Wenn die erste Bedingung
erfüllt ist, ...
ElseIf (Bedingung)
Then
Anweisung
Wenn die zweite Bedingung
erfüllt ist, ...
ElseIf (Bedingung)
Then
Anweisung
Wenn die dritte Bedingung
erfüllt ist, ...
Else
Anweisung
End If
Ansonsten werden folgende
Anweisungen ausgeführt.
Anweisung
OpenOffice | 12.08.08 | Folie 37
Access 2007 – VBA | 25.06.08 | Seite 37
Regionales Rechenzentrum für Niedersachsen
Flußdiagramm
Fall zulässig
Fallabfrage
Fall 1
Fall 2
OpenOffice | 12.08.08 | Folie 38
Access 2007 – VBA | 25.06.08 | Seite 38
Regionales Rechenzentrum für Niedersachsen
Fall n
nein
Struktogramm
Fall1
Fall zulässig?
Fall 2
nein
Fall n
...
OpenOffice | 12.08.08 | Folie 39
Access 2007 – VBA | 25.06.08 | Seite 39
Regionales Rechenzentrum für Niedersachsen
Beispiel
bestellPreis = (bestellmenge * preis)
If (bestellmenge > 100) AND (bestellmenge < 500) Then
rabatt = 0.03
rabattPreis = bestellPreis * rabatt
bestellPreis = bestellPreis – rabattPreis
ElseIf (bestellmenge >= 500) AND (bestellmenge
rabatt = 0.05
rabattPreis = bestellPreis * rabatt
bestellPreis = bestellPreis – rabattPreis
Else
rabatt = 0.0
End If
OpenOffice | 12.08.08 | Folie 40
Access 2007 – VBA | 25.06.08 | Seite 40
Regionales Rechenzentrum für Niedersachsen
< 1000) Then
Verschachtelte Anweisungen
 Innerhalb einer if-Anweisung wird
eine weitere if-Anweisung
aufgerufen.
 Die else-Anweisungen werden
entsprechend ihrer Einrückungen
den if-Anweisungen zugeordnet.
If (bedingung) Then
Anweisung
If (bedingung) Then
Anweisung
Else
Anweisung
End If
Else
Anweisung
End If
Anweisung
OpenOffice | 12.08.08 | Folie 41
Access 2007 – VBA | 25.06.08 | Seite 41
Regionales Rechenzentrum für Niedersachsen
Flussdiagramm
Bedingung
nein
ja
Anweisung
OpenOffice | 12.08.08 | Folie 42
Access 2007 – VBA | 25.06.08 | Seite 42
Regionales Rechenzentrum für Niedersachsen
Bedingung
nein
ja
Anweisung
Anweisung
Struktogramm
Bedingung
ja
nein
Bedingung
ja
nein
Anweisung
AnAnweisung weisung
OpenOffice | 12.08.08 | Folie 43
Access 2007 – VBA | 25.06.08 | Seite 43
Regionales Rechenzentrum für Niedersachsen
Beispiel
Dim zahlA As Integer
Dim zahlB As Integer
Dim result As Integer
result = zahlA MOD zahlB
If (result = 0) Then
If (zahlA = zahlB) Then
Debug.Print "Die Zahlen sind gleich."
Else
Debug.Print "Division ohne Rest"
End If
Else
Debug.Print
End If
OpenOffice | 12.08.08 | Folie 44
Access 2007 – VBA | 25.06.08 | Seite 44
Regionales Rechenzentrum für Niedersachsen
"Rest der Division: " & result
Programmierstil
 Jede Ebene einer verschachtelten if-Anweisung wird mit Hilfe des
Tabulators eingerückt.
 Um die Übersicht zu behalten, sollten Sie nie mehr als 5 Ebenen tief
verschachteln.
 Vermeiden Sie unterschiedliche Datentypen auf beiden Seiten eines
Vergleichsoperators.
 Bei Dezimalzahlen sollte ein Test auf Gleichheit vermieden werden.
 Verzichten Sie auf ElseIf-Anweisungen, wenn Sie Select-CaseAnweisungen nutzen können.
OpenOffice | 12.08.08 | Folie 45
Access 2007 – VBA | 25.06.08 | Seite 45
Regionales Rechenzentrum für Niedersachsen
Nutzung bei Optionsgruppen
Die Optionsgruppe (der
Rahmen) enthält den Wert
der aktiven Option und
damit der gesamten
Gruppe.
Falls die Option
aktiviert wird, wird
der Optionswert an
die Gruppe
übergeben.
K03_conditionLoop.accdb:
Formular frmAmpel
OpenOffice | 12.08.08 | Folie 46
Access 2007 – VBA | 25.06.08 | Seite 46
Regionales Rechenzentrum für Niedersachsen
Code
' Sobald eine neue Option aktiviert wird,...
Private Sub fraAmpel_AfterUpdate()
If fraAmpel.Value = 1 Then
rectFarbe.BackColor = RGB(255, 0, 0)
ElseIf fraAmpel.Value = 2 Then
rectFarbe.BackColor = RGB(0, 255, 0)
ElseIf fraAmpel.Value = 3 Then
rectFarbe.BackColor = RGB(255, 200, 0)
Else
rectFarbe.BackColor = RGB(0, 0, 0)
End If
Me.Refresh
End Sub
OpenOffice | 12.08.08 | Folie 47
Access 2007 – VBA | 25.06.08 | Seite 47
Regionales Rechenzentrum für Niedersachsen
' Form neu zeichnen
Select-Case-Anweisung
Select Case variable
Case konstante
Anweisung
Case konstante
Anweisung
Case Else
Anweisung
End Select
Anweisung
 ... sind eine andere Form von ElseIf-Anweisungen.
 Der Wert einer Variablen wird mit einem numerischen Wert oder einem
String verglichen.
OpenOffice | 12.08.08 | Folie 48
Access 2007 – VBA | 25.06.08 | Seite 48
Regionales Rechenzentrum für Niedersachsen
Arbeitsweise
Select Case variable
Case konstante
Anweisung
Case konstante
Anweisung
Case Else
Anweisung
End Select
Anweisung
OpenOffice | 12.08.08 | Folie 49
Access 2007 – VBA | 25.06.08 | Seite 49
Regionales Rechenzentrum für Niedersachsen
Selektiere die Variable
und vergleiche den Wert
der Variablen mit...
Falls einer der Fälle (Case) mit den
Wert der zu überprüfenden
Variablen übereinstimmt, führe
nachfolgende Anweisungen aus.
Falls keiner der Fälle
zutrifft, führe den
Standardfall aus. Die
Beschreibung des
Standardfalls ist optional.
Flußdiagramm
Selektor var
nein
var == Wert?
ja
Anweisungen
nein
var == Wert?
ja
Anweisungen
nein
var == Wert?
nein
OpenOffice | 12.08.08 | Folie 50
Access 2007 – VBA | 25.06.08 | Seite 50
Regionales Rechenzentrum für Niedersachsen
ja
Anweisungen
DefaultAnweisung
Struktogramm
Selektor var
Anweisungen
zu Fall 1
Anweisungen
zu Fall 2
...
Anweisungen
zu Fall n
DefaultAnweisungen
OpenOffice | 12.08.08 | Folie 51
Access 2007 – VBA | 25.06.08 | Seite 51
Regionales Rechenzentrum für Niedersachsen
Numerischer Vergleich
Der Wert der Variablen wird mit
den Zahlen eins und zwei
verglichen.
Case Fall ist immer ein
Select Case wert
Vergleich auf Gleichheit. Die
Case 1
Variable und die Konstante, mit
Debug.Print "Speichern"
der verglichen wird, müssen den
gleichen Datentyp besitzen.
Case 2
Debug.Print "Ausdruck"
Dim wert As Integer
Case Else
Debug.Print "Falsche Eingabe"
End Select
OpenOffice | 12.08.08 | Folie 52
Access 2007 – VBA | 25.06.08 | Seite 52
Regionales Rechenzentrum für Niedersachsen
Vergleich mit einer Zeichenfolge
Dim produkt As String
Dim kategorie As String
Select Case produkt
Case "Apfel"
kategorie = "Obst"
Case "Weißkohl"
kategorie = "Gemüse"
Case Else
kategorie = ""
End Select
Debug.Print kategorie
OpenOffice | 12.08.08 | Folie 53
Access 2007 – VBA | 25.06.08 | Seite 53
Regionales Rechenzentrum für Niedersachsen
Der Wert der Variablen wird
mit einer Zeichenfolge
verglichen.
Falls keiner der Fälle zutrifft,
wird die Variable auf eine
leere Zeichenfolge gesetzt.
Listen nutzen
Dim produkt As String
Dim kategorie As String
Select Case produkt
Case "Apfel", "Bananen", "Birnen"
kategorie = "Obst"
Case "Weißkohl", "Bohnen", "Erbsen"
kategorie = "Gemüse"
Case Else
kategorie = ""
End Select
OpenOffice | 12.08.08 | Folie 54
Access 2007 – VBA | 25.06.08 | Seite 54
Regionales Rechenzentrum für Niedersachsen
Die Variable wird mit einer Liste von
Zeichenfolgen verglichen. Wenn einer der
Werte aus der Liste zutrifft, werden alle zu
dem Fall gehörenden Anweisungen
ausgeführt. Mit Hilfe der Liste wird eine
ODER-Verknüpfung realisiert.
Bereiche von Werten nutzen
Dim bestellmenge As Integer
Dim rabatt As Single
Select Case bestellmenge
Case 1 To 50
rabatt = 0.0
Hier wird ein Zahlenraum
min TO max genutzt.
Wenn der Variablenwert in
diesem Bereich liegt, werden alle
zu dem Fall gehörenden
Anweisungen ausgeführt.
Case 51 To 100
rabatt = 0.03
Case Else
Debug.Print "Falsche Bestellmenge"
bestellmenge = 0
rabatt = 0.0
End Select
OpenOffice | 12.08.08 | Folie 55
Access 2007 – VBA | 25.06.08 | Seite 55
Regionales Rechenzentrum für Niedersachsen
Vergleichsoperatoren nutzen
Dim bestellmenge As Integer
Für die Variable muss als
Platzhalter Is angegeben
werden. Dem Platzhalter folgt
ein Vergleichsoperator und der
Wert mit dem verglichen wird.
Select Case bestellmenge
Case Is < 10
Debug.Print "Mindestbestellmenge unterschritten"
Case Is > 100
Debug.Print "Lieferung nur gegen Vorkasse"
Case Else
Debug.Print "Bestellung ausführen"
End Select
OpenOffice | 12.08.08 | Folie 56
Access 2007 – VBA | 25.06.08 | Seite 56
Regionales Rechenzentrum für Niedersachsen
Bedingungen verknüpfen
Dim bestellmenge As Integer
Dim rabatt As Dobule
Select Case bestellmenge
Case Is >= 50 And (bestellmenge < 100)
rabatt = 0.03
Case Is > 100 And (bestellmenge < 200)
rabatt = 0.05
Case Else
rabatt = 0.0
End Select
OpenOffice | 12.08.08 | Folie 57
Access 2007 – VBA | 25.06.08 | Seite 57
Regionales Rechenzentrum für Niedersachsen
In dem zu verknüpfenden Ausdruck
muss der Variablennamen
wiederholt werden.
Schleifen (Iterationsanweisungen)
 ... sind Wiederholungen bestimmter Anweisungen.
 Die Anzahl der Durchläufe wird durch eine Bedingung bestimmt. Falls
diese Bedingung nie wahr wird, wird die Schleife als Endlosschleife
bezeichnet.
 ... können vorzeitig abgebrochen werden.
 Folgende Schleifen sind in VBA implementiert:
 Für eine bestimmte Anzahl von Schleifendurchläufen wird die For-Next-
Schleife genutzt. Diese Art von Schleife wird auch als Zählschleife bezeichnet.
 Falls die Anzahl der Schleifendurchläufe nicht bekannt ist, können Do-Loopoder While-Wend-Schleifen genutzt werden. Für den Schleifenabbruch wird
eine Bedingung angegeben.
OpenOffice | 12.08.08 | Folie 58
Access 2007 – VBA | 25.06.08 | Seite 58
Regionales Rechenzentrum für Niedersachsen
Schleifenkopf, -fuß und -rumpf
 Im Schleifenkopf oder -fuß stehen die Bedingungen unter den die
Schleifen ausgeführt werden.
 In einer For-Next-Schleife steht die Bedingung immer im Kopf. Der
Schleifenfuß setzt die Zählvariable entsprechend der angegebenen
Schrittweite.
 Bei einer Do-Loop-Schleife kann die Bedingung im Schleifenkopf sowohl als
auch im Schleifenfuß stehen.
 Im Schleifenrumpf stehen die zu einer Schleife gehörenden Anweisungen.
OpenOffice | 12.08.08 | Folie 59
Access 2007 – VBA | 25.06.08 | Seite 59
Regionales Rechenzentrum für Niedersachsen
Zählschleife For-Next
For zaehler = startwert To endwert
Anweisung
Next zaehler
 Die Zählschleife beginnt mit dem Schlüsselwort For.
 Durch die Anweisung zaehler = startwert wird die Variable
initialisiert.
 Die Variable hat einen definierten Anfangswert.
 Die Zählvariable kann Ganz- oder Dezimalzahlen nutzen.
 Die Schleife durchläuft den Zahlenbereich startwert To endwert.
Sobald der maximale Wert erreicht ist, bricht die Schleife ab. Minimaler
und maximaler Wert entsprechen dem Datentyp der Zählvariablen.
 Das Schlüsselwort next setzt zaehler auf den nächsten Wert.
K03_conditionLoop.accdb:
Standardmäßig wird der Wert um eins erhöht.
Modul conditionLoop
Prozedur: zaehlen
OpenOffice | 12.08.08 | Folie 60
Access 2007 – VBA | 25.06.08 | Seite 60
Regionales Rechenzentrum für Niedersachsen
Schrittweite angeben
For zaehler = startwert To endwert Step schrittweite
Anweisung
Next zaehler
 Die Schrittweite des Zählers kann mit Hilfe von Ganz- oder Dezimalzahlen
angegeben werden.
 Standardmäßig wird der Zähler um eins erhöht.
 Dem Schlüsselwort Step folgt ein Wert.
 Wenn der Wert negativ ist, wird der Zähler vermindert. Es wird runtergezählt.
 Wenn der Wert positiv ist, wird der Zähler erhöht. Es wird hochgezählt.
 Falls für den Zähler Dezimalwerte genutzt werden, sollte die Schrittweite in
Dezimalwerten angegeben werden. Falls für den Zähler Ganzzahlen
genutzt werden, muss auch eine Ganzzahl für die Schrittweite genutzt
werden.
OpenOffice | 12.08.08 | Folie 61
Access 2007 – VBA | 25.06.08 | Seite 61
Regionales Rechenzentrum für Niedersachsen
Flussdiagramm und Struktogramm
Initialisiere Zähler
Initialisiere Zähler
Wiederhole solange
ja
> maxWert
nein
Anweisung
Nächster Schritt
Anweisung
Struktogramm
Zähler + Schrittweite
Flussdiagramm
OpenOffice | 12.08.08 | Folie 62
Access 2007 – VBA | 25.06.08 | Seite 62
Regionales Rechenzentrum für Niedersachsen
Beispiele für Ganzzahlen
Dim count As Integer
For count = 0 To 9
Debug.Print count
Next count
For count = 9 To 0
Debug.Print count
Next count
In dieser Zählschleife wird 0, 1, 2
und so weiter gezählt. Die
Schleife bricht bei einem Wert
von 10 ab.
Diese Schleife wird nicht
durchlaufen, weil der Startwert
größer als der Endwert ist.
For count = 9 To 0 Step - 1
Debug.Print count
Next count
In dieser Zählschleife wird 9, 8, 7
und so weiter gezählt.
OpenOffice | 12.08.08 | Folie 63
Access 2007 – VBA | 25.06.08 | Seite 63
Regionales Rechenzentrum für Niedersachsen
Beispiele für Dezimalzahlen
Dim zaehler As Double
In dieser Zählschleife wird 0, 1,
2 und so weiter gezählt. Die
Schrittweite beträgt eins.
For zaehler = 0 To 5.5
Debug.Print count
Next count
For zaehler = 0 To 5.5 Step 0.5
Debug.Print count
Next count
For zaehler = 9 To 0 Step - 0.5
Debug.Print count
Next count
For zaehler = 0.5 To 5.5 Step 2
Debug.Print count
Next count
OpenOffice | 12.08.08 | Folie 64
Access 2007 – VBA | 25.06.08 | Seite 64
Regionales Rechenzentrum für Niedersachsen
Der Zähler läuft von 0 bis
5.5 in 0.5-Schritten.
Der Zähler läuft von 9 bis 0. Der
Zähler wird immer um 0.5
minimiert.
In dieser Zählschleife wird
0, 2, 4 gezählt.
Verschachtelte Schleifen
Dim wert As Integer
Dim faktor As Double;
Dim ergebnis As Double
Äußere Schleife
For wert = 1 To 5
ergebnis = 0
Innere Schleife
For faktor = 0.5 To 2 Step 0.5
ergebnis = faktor * wert
If (faktor > 1.5) AND (wert = 2) Then
Exit For
End If
Next faktor
Debug.Print ergebnis
Next wert
OpenOffice | 12.08.08 | Folie 65
Access 2007 – VBA | 25.06.08 | Seite 65
Regionales Rechenzentrum für Niedersachsen
Abbruch einer Schleife
Dim wert As Integer
Dim faktor As Double;
Dim ergebnis As Double
For wert = 1 To 5
ergebnis = 0
For faktor = 0.5 To 2 Step 0.5
ergebnis = faktor * wert
If (faktor > 1.5) AND (wert = 2) Then
Exit For
End If
Mit Hilfe von Exit kann eine Schleife
Next faktor
abgebrochen werden. Hier wird nur die
innere Schleife abgebrochen. Die exitDebug.Print ergebnis
Anweisung gehört zu der inneren
Next wert
Schleife und nicht zur äußeren
Schleife.
OpenOffice | 12.08.08 | Folie 66
Access 2007 – VBA | 25.06.08 | Seite 66
Regionales Rechenzentrum für Niedersachsen
Do-Loop-Schleifen
Do
Anweisung
Loop
 Die Schleife beginnt mit Do und endet mit Loop.
 Momentan würde diese Schleife endlos laufen. Es fehlt eine
Abbruchbedingung.
OpenOffice | 12.08.08 | Folie 67
Access 2007 – VBA | 25.06.08 | Seite 67
Regionales Rechenzentrum für Niedersachsen
Fußgesteuerte Do-Loop-Schleifen
Do
Anweisung
Loop Until Bedingung
Do
Anweisung
Loop While Bedingung
 Die Abbruchbedingung steht im Fuß der Schleife.
 Die Schleife wird einmal durchlaufen und dann erst die Bedingung geprüft.
 Until (bis ):
 Die Schleife läuft solange bis die Bedingung erfüllt ist.
 Sobald die Bedingung erfüllt ist, wird die Schleife abgebrochen.
 While (während, so lange):
 Die Schleife läuft solange wie die Bedingung erfüllt ist.
 Sobald die Bedingung nicht erfüllt ist, wird die Schleife abgebrochen.
K03_conditionLoop.accdb:
Modul conditionLoop
Prozedur: fussSchleifen
OpenOffice | 12.08.08 | Folie 68
Access 2007 – VBA | 25.06.08 | Seite 68
Regionales Rechenzentrum für Niedersachsen
until
Dim count As Integer
count = 0
Do
count = count + 1
Debug.Print count
Loop Until count > 5
count = 0 + 1
count = 1 + 1
count = 2 + 1
count = 3 + 1
count = 4 + 1
count = 5 + 1
⇒ Abbruch
count +1
Debug.Print
wiederhole bis
count > 5
OpenOffice | 12.08.08 | Folie 69
Access 2007 – VBA | 25.06.08 | Seite 69
Regionales Rechenzentrum für Niedersachsen
while
Dim count As Integer
count = 0
Do
count = count + 1
Debug.Print count
Loop While count > 5
count = 0 + 1
⇒ Abbruch
count +1
Debug.Print
wiederhole so lange
count > 5
OpenOffice | 12.08.08 | Folie 70
Access 2007 – VBA | 25.06.08 | Seite 70
Regionales Rechenzentrum für Niedersachsen
Kopfgesteuerte Do-Loop-Schleifen
Do Until Bedingung
Anweisung
Loop
Do While Bedingung
Anweisung
Loop
 Die Abbruchbedingung steht im Kopf der Schleife.
 Die Bedingung wird überprüft. Falls die Bedingung zutrifft, werden die
Anweisungen im Schleifenrumpf durchlaufen.
 Until (bis ):
 Die Schleife läuft solange bis die Bedingung erfüllt ist.
 Sobald die Bedingung erfüllt ist, wird die Schleife abgebrochen.
 While (während, so lange):
 Die Schleife läuft solange wie die Bedingung erfüllt ist.
 Sobald die Bedingung nicht erfüllt ist, wird die Schleife abgebrochen.
K03_conditionLoop.accdb:
Modul conditionLoop
Prozedur: kopfSchleifen
OpenOffice | 12.08.08 | Folie 71
Access 2007 – VBA | 25.06.08 | Seite 71
Regionales Rechenzentrum für Niedersachsen
until
Dim count As Integer
count = 0
Do Until count > 5
count = count + 1
Debug.Print count
Loop
count = 0 + 1
count = 1 + 1
count = 2 + 1
count = 3 + 1
count = 4 + 1
count = 5 + 1
⇒ Abbruch
wiederhole bis
count > 5
count +1
Debug.Print
OpenOffice | 12.08.08 | Folie 72
Access 2007 – VBA | 25.06.08 | Seite 72
Regionales Rechenzentrum für Niedersachsen
while
Dim count As Integer
count = 0
Do
count = count + 1
Debug.Print count
Loop While count > 5
⇒ Abbruch
wiederhole so lange
count > 5
count +1
Debug.Print
OpenOffice | 12.08.08 | Folie 73
Access 2007 – VBA | 25.06.08 | Seite 73
Regionales Rechenzentrum für Niedersachsen
Schleife abbrechen
Dim wert As Integer
Dim faktor As Double;
Dim ergebnis As Double
wert = 0
Do
ergebnis = 0
faktor = 0
Do While faktor < 2.0
ergebnis = ergebnis + (faktor * wert)
faktor = faktor + 0.5
If (faktor > 1.5) AND (wert = 2) Then
Exit Do
End If
Mit Hilfe von Exit Do wird die
Next faktor
innere Schleife abgebrochen.
Die äußere beendet den
Debug.Print ergebnis
Schleifendurchlauf und startet
wert = wert + 1
Loop Until wert > 5
einen neuen.
OpenOffice | 12.08.08 | Folie 74
Access 2007 – VBA | 25.06.08 | Seite 74
Regionales Rechenzentrum für Niedersachsen
Fehler (Bug) im Programm
 Syntaxfehler entstehen beim Schreiben des Programmcodes.
 Logische Fehler treten auf, wenn der Entwickler ein Denkfehler bei der
Umsetzung der Aufgabe in ein Programm macht. Das Programm wird
fehlerfrei ausgeführt, aber das Ergebnis ist nicht korrekt.
 Laufzeitfehler treten während der Ausführung des Programms auf. Zum
Beispiel eine CD, von der Daten gelesen werden sollen, wurde nicht in das
Laufwerk gelegt.
OpenOffice | 12.08.08 | Folie 75
Access 2007 – VBA | 25.06.08 | Seite 75
Regionales Rechenzentrum für Niedersachsen
Syntaxfehler
 Die Syntax einer Programmiersprache ist die Gesamtheit der Regeln für
die Bildung von Anweisungen aus Operatoren und Operanden sowie die
Nutzung von Funktionen.
 ... verhindern die Kompilierung eines Programms.
 ... sind zum Beispiel:
 Tippfehler bei der Eingabe von Variablennamen oder Schlüsselwörtern.
 Mischung von numerischen und nicht-numerischen Operatoren.
 Falsche Parameterübergabe an Funktionen.
 Syntaxfehler in Schleifen oder bedingten Anweisungen.
Zum Beispiel Do... Loop Bedingung oder If Bedingung Anweisung.
 ... anzeigen:
 Öffnen Sie Extras – Optionen und aktivieren die Registerkarte Allgemein. Falls
das Kontrollkästchen Automatische Syntaxüberprüfung aktiv ist, werden Fehler
im Code farbig markiert.
 Die Anweisung Option Explicit verhindert eine doppelte Vergabe von
Bezeichnern oder eine fehlerhafte Eingabe von Variablennamen.
OpenOffice | 12.08.08 | Folie 76
Access 2007 – VBA | 25.06.08 | Seite 76
Regionales Rechenzentrum für Niedersachsen
Laufzeitfehler
 ... sind Bugs, die nach dem Start eines Programms auftreten können.
 ... betreffen immer die Programmlogik.
 ... können Programme zu einem unerwünschten Verhalten oder einen
Programmabsturz zwingen.
 ... entstehen, wenn Ausdrücke oder Anweisungen vom Programm nicht
korrekt ausgewertet werden.
OpenOffice | 12.08.08 | Folie 77
Access 2007 – VBA | 25.06.08 | Seite 77
Regionales Rechenzentrum für Niedersachsen
Beispiele für Laufzeitfehler
 Division durch Null.
 Überlauf (zu großer oder zu kleiner Wert für den angegebenen
Datentyp).
 Falsche Abbruchbedingung für eine Schleife.
 Verwendung von ungültigen Operatoren.
 Ein- und Ausgabefehler.
 Tippfehler wie "1o" statt 10.
Const zahlA = 4
Const zahlB = 0
Dim ergebnis As Integer
ergebnis = zahlA / zahlB
OpenOffice | 12.08.08 | Folie 78
Access 2007 – VBA | 25.06.08 | Seite 78
Regionales Rechenzentrum für Niedersachsen
Informationen zu abfangbaren Laufzeitfehlern
 Das Objekt Err bekommt alle Fehler eines VBA-Programms übergeben
und kann ausgelesen werden.
 Err.Number gibt eine Fehlernummer aus.
 Err.Description gibt einen Fehlertext aus.
 Err.Helpfile gibt einen Hilfetext zu einem Fehler aus.
 Err.Clear setzt alle Eigenschaften auf die Standardwerte zurück. Es werden
alle vorhandenen Fehlermeldungen gelöscht.
OpenOffice | 12.08.08 | Folie 79
Access 2007 – VBA | 25.06.08 | Seite 79
Regionales Rechenzentrum für Niedersachsen
Laufzeitfehler abfangen
 Die Anweisung On Error regelt das Verhalten des Programms bei einem
Laufzeitfehler.
 On Error Resume 0 oder On Error Resume wiederholt die
fehlerbehaftete Zeile.
 On Error Resume Next überspringt die fehlerbehaftete Zeile und
arbeitet mit der nächsten Programmzeile weiter. Nachteil: Fehlerbehaftete
Variablen werden weiter durch das Programm geschleppt.
 On Error Goto <marke> springt, sobald ein Fehler auftritt, zu einer
bestimmten Position im Programm. An dieser Position wird der Fehler
behandelt.
 On Error Goto 0 deaktiviert alle selbst definierten
Fehlerbehandlungsroutinen. Es werden die Standard-Fehlerdialoge der
Access-Datenbank genutzt.
OpenOffice | 12.08.08 | Folie 80
Access 2007 – VBA | 25.06.08 | Seite 80
Regionales Rechenzentrum für Niedersachsen
Beispiel: On Error Resume Next
On Error Resume Next
ergebnis = divident / divisor
If Err.Number = 11 Then
count = 1
End If
OpenOffice | 12.08.08 | Folie 81
Access 2007 – VBA | 25.06.08 | Seite 81
Regionales Rechenzentrum für Niedersachsen
Resume-Anweisungen
 Die Anweisung Resume führt nochmals die Zeile aus, die den Code
verursacht hat. Der Fehler muss vor Ausführung dieser Zeile gelöst sein.
Andernfalls durchläuft das Programm eine Endlosschleife.
 Resume Next führt das Programm in der nachfolgenden Zeile aus. Die
Zeile, die den Fehler verursacht hat, wird übersprungen. Wenn der Fehler
nicht behoben wurde, werden eventuell fehlerbehaftete Variablenwerte
weiter genutzt.
 Mit Hilfe von Resume <marke> kann zu einem bestimmten Codeblock in
dem Programm gesprungen werden.
OpenOffice | 12.08.08 | Folie 82
Access 2007 – VBA | 25.06.08 | Seite 82
Regionales Rechenzentrum für Niedersachsen
Beispiel: On Error Goto <marke>
Const zahlA = 4
Const zahlB = 0
Dim ergebnis As Integer
Err.Clear
On Error Goto FEHLER
ergebnis = divident / divisor
Exit Sub
'Prozedur beenden
'Definition der Sprungmarke
FEHLER:
MsgBox(Err.Description)
divisor = 1
Resume
OpenOffice | 12.08.08 | Folie 83
Access 2007 – VBA | 25.06.08 | Seite 83
Regionales Rechenzentrum für Niedersachsen
Sprungmarken




... werden folgendermaßen definiert: name:
Jede Sprungmarke hat einen eindeutigen Namen.
... sind nur Lesezeichen im Code.
... sind keine Stoppzeichen beim Durchlaufen eines Programms.
 Falls kein Fehler vorhanden ist, werden die Anweisungen, die zur
Sprungmarke hören, durchlaufen.
 Mit Hilfe von Exit Sub wird die Prozedur vor der Sprungmarke abgebrochen.
OpenOffice | 12.08.08 | Folie 84
Access 2007 – VBA | 25.06.08 | Seite 84
Regionales Rechenzentrum für Niedersachsen
Logische Fehler
 ... entstehen
 ... beim Design eines Programms oder
 ... bei der Definition von Anforderungen an das Programm.
 ... können
 ... durch fehlendes Fachwissen oder
 ... Missverständnissen zwischen Nutzern und Entwicklern entstehen.
 ... können durch ein zeilenweises Durchlaufen des Programms
abgefangen werden. Sehr zeitaufwendig. VBA bietet die Möglichkeit
 ... das Programm im Einzelschrittmodus zu durchlaufen.
 ... Zwischenergebnisse in das Direktfenster zu drucken.
 ... Variablen zu überwachen.
OpenOffice | 12.08.08 | Folie 85
Access 2007 – VBA | 25.06.08 | Seite 85
Regionales Rechenzentrum für Niedersachsen
... werden hervorgerufen durch
... eine falsche Anzahl von Schleifendurchläufen.
... durch das Erzeugen von Endlosschleifen.
... falsch formulierte Bedingungen in Anweisungen und Schleifen.
... eine falsche oder nicht vorhandene Klammerung von komplexen
Ausdrücken.
 ... falsch initialisierte Variablen.




OpenOffice | 12.08.08 | Folie 86
Access 2007 – VBA | 25.06.08 | Seite 86
Regionales Rechenzentrum für Niedersachsen
Einzelschrittmodus
 Das Programm wird Zeile für Zeile
durchlaufen.
 Die momentan auszuführende Zeile
wird farbig unterlegt und mit einem
Pfeil am Rand gekennzeichnet.
 Legen Sie den Mauszeiger auf einen
Bezeichner oder Ausdruck. Der
aktuelle Wert wird in einem gelben
Erklärfenster angezeigt.
OpenOffice | 12.08.08 | Folie 87
Access 2007 – VBA | 25.06.08 | Seite 87
Regionales Rechenzentrum für Niedersachsen
Einzelschrittmodus starten
 Debuggen – Einzelschritt oder <F8> im VBA-Editor.
 Jede Zeile muss mit der Taste <F8> quittiert werden.
 Der Pfeil, der die momentan auszuführende Zeile am Rand anzeigt, kann
mit Hilfe der Maus auf andere Codezeilen verschoben werden. Der Code
wird dort fortgesetzt.
OpenOffice | 12.08.08 | Folie 88
Access 2007 – VBA | 25.06.08 | Seite 88
Regionales Rechenzentrum für Niedersachsen
Haltepunkte
 Eine Programmzeile mit einem Haltepunkt
wird braun hinterlegt und mit einem braunen
Punkt am linken Rand gekennzeichnet.
 ... setzen:
 Der Mauszeiger wird in die Zeile gesetzt, in
der das Programm gestoppt werden soll. Auf
Deklarationsanweisungen, leeren Zeilen,
Sprunganweisungen oder Kommentaren kann
kein Haltepunkt gesetzt werden!
 Debuggen – Haltepunkt ein / aus oder <F9>
im VBA-Editor.
 ... entfernen:
 Der Mauszeiger wird in eine Zeile mit
Haltepunkt gesetzt. Debuggen – Haltepunkt
ein / aus oder <F9> im VBA-Editor auswählen.
 Debuggen – Alle Haltepunkt löschen oder
<Strg+Umschalt F9> im VBA-Editor.
OpenOffice | 12.08.08 | Folie 89
Access 2007 – VBA | 25.06.08 | Seite 89
Regionales Rechenzentrum für Niedersachsen
Arbeiten mit Haltepunkten
 Das Programm wird mit Ausführen – Sub / Userform ausführen (<F5>)
gestartet.
 Das Programm unterbricht automatisch an der ersten Zeile mit einem
Haltepunkt.
 Anschließend kann das Programm wieder
 ... mit Ausführen – Sub / Userform ausführen (<F5>) bis zum Ende
abgearbeitet werden.
 ... mit Debuggen – Einzelschritt (<F8>) durchlaufen werden.
OpenOffice | 12.08.08 | Folie 90
Access 2007 – VBA | 25.06.08 | Seite 90
Regionales Rechenzentrum für Niedersachsen
Aktuelle Variablenwerte anzeigen
 Voraussetzung: Das Programm wird im Einzelschrittmodus
durchlaufen.
 Markieren Sie die gewünschte Variable mit Hilfe der Maus.
 Klicken Sie auf Debuggen – Aktueller Wert anzeigen oder
<UMSCHALT>+<F9>.
 Es öffnet sich folgendes Dialogfenster:
OpenOffice | 12.08.08 | Folie 91
Access 2007 – VBA | 25.06.08 | Seite 91
Regionales Rechenzentrum für Niedersachsen
Informationen im Dialogfenster
In welcher Prozedur
oder Modul kommt
die Variable vor?
Wo befindet sich die
Variable?
Welche Variable
wird überprüft?
Die Variable wird dem
Überwachungsfenster
hinzugefügt.
Welchen Wert hat die Variable
aktuell gespeichert?
OpenOffice | 12.08.08 | Folie 92
Access 2007 – VBA | 25.06.08 | Seite 92
Regionales Rechenzentrum für Niedersachsen
Überwachungsfenster
 ... wird mit Hilfe von Ansicht – Überwachungsfenster oder automatisch
beim Hinzufügen einer Variablen geöffnet.
 Pro Zeile wird ein Ausdruck, eine Variable oder eine Funktion angezeigt.
OpenOffice | 12.08.08 | Folie 93
Access 2007 – VBA | 25.06.08 | Seite 93
Regionales Rechenzentrum für Niedersachsen
Aufbau
Bezeichnung
der Variablen,
Funktion oder
Ausdruck.
Aktueller Wert
des Ausdrucks.
Rückgabewert
der Funktion.
OpenOffice | 12.08.08 | Folie 94
Access 2007 – VBA | 25.06.08 | Seite 94
Regionales Rechenzentrum für Niedersachsen
Modul.Prozedur.
Wo befindet sich der zu
überwachende Ausdruck?
Datentyp des
Ausdrucks.
Ausdruck
 Markieren Sie den zu überwachenden Ausdruck im Codefenster.
 ... dem Überwachungsfenster hinzufügen.
 Voraussetzung: Das Überwachungsfenster ist geöffnet. Der markierte
Ausdruck wird mit Hilfe der linken Maustaste in das Überwachungsfenster
gezogen.
 Öffnen Sie mit der rechten Maustaste das Kontextmenü der Variablen und
wählen den Eintrag Überwachung hinzufügen aus. Es öffnet sich das
dazugehörige Dialogfenster.
OpenOffice | 12.08.08 | Folie 95
Access 2007 – VBA | 25.06.08 | Seite 95
Regionales Rechenzentrum für Niedersachsen
Überwachung hinzufügen
 Folgende Optionen sind möglich:
 Überwachungsausdruck: Der Wert der
Variablen wird im Überwachungsfenster
während des Durchlaufs angezeigt.
 Unterbrechen, wenn der Wert True ist:
Der Durchlauf wird unterbrochen,
sobald die Variable den Wert True
besitzt oder einen Wert ungleich null.
Diese Option kann nicht für Strings
genutzt werden.
 Unterbrechen, wenn der Wert sich
geändert hat: Der Durchlauf wird
unterbrochen, sobald sich der Wert der
Variablen verändert.
OpenOffice | 12.08.08 | Folie 96
Access 2007 – VBA | 25.06.08 | Seite 96
Regionales Rechenzentrum für Niedersachsen
Kennzeichnung im Überwachungsfenster
Das Programm wird
unterbrochen, wenn
der Wert sich ändert.
Es wird der Wert der
Variablen im
Überwachungsfenster
angezeigt.
Das Programm wird
unterbrochen, wenn
der Wert der
Variablen true ist.
OpenOffice | 12.08.08 | Folie 97
Access 2007 – VBA | 25.06.08 | Seite 97
Regionales Rechenzentrum für Niedersachsen
Mit dem Überwachungsfenster arbeiten
 Klicken Sie auf das Icon am linken Rand, um die Zeile vollständig zu
markieren.
 Mit Hilfe von <ENTF> wird der Ausdruck aus dem Überwachungsfenster
entfernt.
 Mit Hilfe der rechten Maustaste wird das dazugehörige Kontextmenü geöffnet.
Mit Hilfe von Überwachung bearbeiten kann die Art der Überwachung
verändert werden.
 Klicken Sie in die Spalte Wert einer Zeile. Markieren Sie den Wert. Geben
Sie einen neuen mit Hilfe der Tastatur ein. Bestätigen Sie die Angaben mit
<RETURN>.
 Klicken Sie in die Spalte Ausdruck einer Zeile. Markieren Sie die
Bezeichnung und geben Sie eine neue mit Hilfe der Tastatur ein.
Bestätigen Sie die Angaben mit <RETURN>. Falls der eingegebene
Ausdruck nicht in dem angegebenen Kontext existiert, wird eine
Fehlermeldung angezeigt.
OpenOffice | 12.08.08 | Folie 98
Access 2007 – VBA | 25.06.08 | Seite 98
Regionales Rechenzentrum für Niedersachsen
Herunterladen