Regionales Rechenzentrum für Niedersachsen
VBA (Visual Basic for Application)
Bedingte Anweisungen und Schleifen
OpenOffice | 12.08.08 | Folie 2Access 2007 – VBA | 25.06.08 | Seite 2
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 3Access 2007 – VBA | 25.06.08 | Seite 3
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 4Access 2007 – VBA | 25.06.08 | Seite 4
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 5Access 2007 – VBA | 25.06.08 | Seite 5
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 6Access 2007 – VBA | 25.06.08 | Seite 6
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 7Access 2007 – VBA | 25.06.08 | Seite 7
Regionales Rechenzentrum für Niedersachsen
Beispiel: Suche nach einem Wort
Flussdiagramm
OpenOffice | 12.08.08 | Folie 8Access 2007 – VBA | 25.06.08 | Seite 8
Regionales Rechenzentrum für Niedersachsen
Beispiel: Suche nach einem Wort
Struktodiagramm
OpenOffice | 12.08.08 | Folie 9Access 2007 – VBA | 25.06.08 | Seite 9
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 10Access 2007 – VBA | 25.06.08 | Seite 10
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 11Access 2007 – VBA | 25.06.08 | Seite 11
Regionales Rechenzentrum für Niedersachsen
Bedingte Anweisungen
... 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 if-
Anweisung. Andernfalls werden die Anweisungen nach dem if-Block ausgeführt.
If (bedingung) ThenAnweisung
End If
Anweisung
OpenOffice | 12.08.08 | Folie 12Access 2007 – VBA | 25.06.08 | Seite 12
Regionales Rechenzentrum für Niedersachsen
Flußdiagramm und Struktogramm
Flussdiagramm
Struktogramm
Bedingung
Anweisung 1
ja
nein
Anweisung 1
Bedingungja nein
OpenOffice | 12.08.08 | Folie 13Access 2007 – VBA | 25.06.08 | Seite 13
Regionales Rechenzentrum für Niedersachsen
Beispiel
bestellPreis = (bestellmenge * preis)rabatt = 0.0
If (bestellmenge > 100) Thenrabatt = 0.03rabattPreis = bestellPreis * rabattbestellPreis = bestellPreis - rabattPreis
End If
Debug.Print "Endsumme: " & bestellPreis
OpenOffice | 12.08.08 | Folie 14Access 2007 – VBA | 25.06.08 | Seite 14
Regionales Rechenzentrum für Niedersachsen
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 15Access 2007 – VBA | 25.06.08 | Seite 15
Regionales Rechenzentrum für Niedersachsen
Vergleichsoperatoren
Operator Beispiel = ist gleich< ist kleiner als<= ist kleiner gleich als> ist größer als>= ist größer gleich als<> ist ungleich
Rechenart(7 = 3 ) => False(7 < 3 ) => False(7 <= 3 ) => False(7 > 3 ) => True(7 >= 3 ) => True(7<> 3 ) =>True
OpenOffice | 12.08.08 | Folie 16Access 2007 – VBA | 25.06.08 | Seite 16
Regionales Rechenzentrum für Niedersachsen
Strings vergleichen
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.
Dim zeichen As StringDim result As Boolean
gleich = zeichen Like "World"result = (zeichen = "World")
K03_conditionLoop.accdb:Modul conditionLoopProzedur: strVergleich
OpenOffice | 12.08.08 | Folie 17Access 2007 – VBA | 25.06.08 | Seite 17
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 18Access 2007 – VBA | 25.06.08 | Seite 18
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 19Access 2007 – VBA | 25.06.08 | Seite 19
Regionales Rechenzentrum für Niedersachsen
Beispiele
Vergleich ErläuterungDas Wort muss exakt dem Suchwort entsprechen.Like "World"
Like "M*" Das Wort muss mit M beginnen. Alle nachfolgenden Zeichen sind nicht definiert.
Like "M*er" Das Wort muss mit M beginnen und mit "er" enden. Zwischen diesen beiden Angaben kann eine beliebige Anzahl von Zeichen stehen.
Like "M??er" Das Wort muss mit M beginnen und mit "er" enden. Zwischen diesen beiden Angaben stehen exakt zwei Zeichen.
Like "31###" Der Text beginnt mit 31 und hat eine Länge von 5 Zeichen.
Like "B[a, u]ch An der zweiten Position des Textes darf ein a oder u stehen.
Like "3115[1-5] An der fünften Position der Postleitzahl kann eine 1, 2, 3, 4 oder 5 stehen.
OpenOffice | 12.08.08 | Folie 20Access 2007 – VBA | 25.06.08 | Seite 20
Regionales Rechenzentrum für Niedersachsen
Beispiele
Vergleich ErläuterungLike "[!0-9]-###-####" 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 21Access 2007 – VBA | 25.06.08 | Seite 21
Regionales Rechenzentrum für Niedersachsen
Andere Möglichkeit: StrComp()
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.
Dim text As StringDim suchwort As StringDim result As Integer
result = StrComp(text, suchwort, vbTextCompare)
OpenOffice | 12.08.08 | Folie 22Access 2007 – VBA | 25.06.08 | Seite 22
Regionales Rechenzentrum für Niedersachsen
Rückgabewerte
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 = ""
Dim text As StringDim suchwort As StringDim result As Integer
result = StrComp(text, suchwort, vbTextCompare)
OpenOffice | 12.08.08 | Folie 23Access 2007 – VBA | 25.06.08 | Seite 23
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 24Access 2007 – VBA | 25.06.08 | Seite 24
Regionales Rechenzentrum für Niedersachsen
Wahrheitstabelle
Bedingunga b Not a a AND b a OR b a XOR b a EQV b a IMP b
false false true false false false true truefalse true true false true true false truetrue false false false true true false falsetrue true false true true false true true
OpenOffice | 12.08.08 | Folie 25Access 2007 – VBA | 25.06.08 | Seite 25
Regionales Rechenzentrum für Niedersachsen
Beispiel: NOT-Verknüpfung
Dim zahlA As IntegerDim zahlB As IntegerDim result As Integer
If NOT(zahlB >= 0) ThenDebug.Print "Division durch Null nicht erlaubt"
Elseresult = zahlA / zahlB
End If
If (zahlB <> 0) Then result = zahlA / zahlBElse
Debug.Print "Division durch Null nicht erlaubt"End If
OpenOffice | 12.08.08 | Folie 26Access 2007 – VBA | 25.06.08 | Seite 26
Regionales Rechenzentrum für Niedersachsen
Beispiel: AND-Verknüpfung
bestellPreis = (bestellmenge * preis)rabatt = 0.0
If ((bestellmenge > 100) AND (bestellmenge < 500)) Thenrabatt = 0.03rabattPreis = bestellPreis * rabattbestellPreis = bestellPreis - rabattPreis
End If
Debug.Print "Endsumme: " & bestellPreis
OpenOffice | 12.08.08 | Folie 27Access 2007 – VBA | 25.06.08 | Seite 27
Regionales Rechenzentrum für Niedersachsen
Beispiel: OR-Verknüpfung
Dim zahl As IntegerDim faktor As Integer
If ( (zahl < 10) OR (zahl > 20) ) Then MsgBox "Die Zahl ist nicht korrekt."
End If
OpenOffice | 12.08.08 | Folie 28Access 2007 – VBA | 25.06.08 | Seite 28
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 29Access 2007 – VBA | 25.06.08 | Seite 29
Regionales Rechenzentrum für Niedersachsen
Beispiel
Not (( 5 > 4) AND (3 <> 2))
wahr wahr
wahr
false
OpenOffice | 12.08.08 | Folie 30Access 2007 – VBA | 25.06.08 | Seite 30
Regionales Rechenzentrum für Niedersachsen
Bindungen der Operatoren
Hoch NiedrigHoch ^ & <> = < <= => > NOT
+ - (Vorzeichen) AND* / OR\ XOR
EQVNiedrig + - IMP
Like
Mod
OpenOffice | 12.08.08 | Folie 31Access 2007 – VBA | 25.06.08 | Seite 31
Regionales Rechenzentrum für Niedersachsen
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 frmObstFormular frmObstAnzahl
OpenOffice | 12.08.08 | Folie 32Access 2007 – VBA | 25.06.08 | Seite 32
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 33Access 2007 – VBA | 25.06.08 | Seite 33
Regionales Rechenzentrum für Niedersachsen
if – then - else
If (bedingung) ThenAnweisung
ElseAnweisung
End If
Anweisung
Wenn die Bedingung erfüllt ist, ...
andernfalls werden die folgenden Anweisungen ausgeführt.
OpenOffice | 12.08.08 | Folie 34Access 2007 – VBA | 25.06.08 | Seite 34
Regionales Rechenzentrum für Niedersachsen
else
... 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.
If (bedingung) ThenAnweisung
ElseAnweisung
End If
Anweisung
OpenOffice | 12.08.08 | Folie 35Access 2007 – VBA | 25.06.08 | Seite 35
Regionales Rechenzentrum für Niedersachsen
Flussdiagramm und Struktogramm
Struktogramm
Bedingung
Anweisung
ja
nein
An-weisung
Bedingungja nein
An-weisung
Anweisung
Flussdiagramm
OpenOffice | 12.08.08 | Folie 36Access 2007 – VBA | 25.06.08 | Seite 36
Regionales Rechenzentrum für Niedersachsen
Beispiel
bestellPreis = (bestellmenge * preis)
If (bestellmenge > 100) Thenrabatt = 0.03rabattPreis = bestellPreis * rabattbestellPreis = bestellPreis – rabattPreis
Elserabatt = 0.0
End If
Debug.Print "Endsumme: " & bestellPreis
OpenOffice | 12.08.08 | Folie 37Access 2007 – VBA | 25.06.08 | Seite 37
Regionales Rechenzentrum für Niedersachsen
ElseIf - Anweisung
If (bedingung) ThenAnweisung
ElseIf (Bedingung) ThenAnweisung
ElseIf (Bedingung) ThenAnweisung
ElseAnweisung
End If
Anweisung
Wenn die erste Bedingung erfüllt ist, ...
Wenn die zweite Bedingung erfüllt ist, ...
Ansonsten werden folgende Anweisungen ausgeführt.
Wenn die dritte Bedingung erfüllt ist, ...
OpenOffice | 12.08.08 | Folie 38Access 2007 – VBA | 25.06.08 | Seite 38
Regionales Rechenzentrum für Niedersachsen
Flußdiagramm
Fall zulässig
Fallabfrage
Fall 1 Fall 2 Fall n nein
OpenOffice | 12.08.08 | Folie 39Access 2007 – VBA | 25.06.08 | Seite 39
Regionales Rechenzentrum für Niedersachsen
Struktogramm
Fall1Fall 2
Fall n
...
neinFall zulässig?
OpenOffice | 12.08.08 | Folie 40Access 2007 – VBA | 25.06.08 | Seite 40
Regionales Rechenzentrum für Niedersachsen
Beispiel
bestellPreis = (bestellmenge * preis)
If (bestellmenge > 100) AND (bestellmenge < 500) Thenrabatt = 0.03rabattPreis = bestellPreis * rabattbestellPreis = bestellPreis – rabattPreis
ElseIf (bestellmenge >= 500) AND (bestellmenge < 1000) Thenrabatt = 0.05rabattPreis = bestellPreis * rabattbestellPreis = bestellPreis – rabattPreis
Elserabatt = 0.0
End If
OpenOffice | 12.08.08 | Folie 41Access 2007 – VBA | 25.06.08 | Seite 41
Regionales Rechenzentrum für Niedersachsen
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) ThenAnweisung
If (bedingung) Then
AnweisungElse
AnweisungEnd If
ElseAnweisung
End If
Anweisung
OpenOffice | 12.08.08 | Folie 42Access 2007 – VBA | 25.06.08 | Seite 42
Regionales Rechenzentrum für Niedersachsen
Flussdiagramm
Bedingung
Anweisung
ja
nein
Anweisung
Bedingung
Anweisung
nein
ja
OpenOffice | 12.08.08 | Folie 43Access 2007 – VBA | 25.06.08 | Seite 43
Regionales Rechenzentrum für Niedersachsen
Struktogramm
An-weisung
Bedingungja nein
An-weisung
neinBedingung
ja
Anweisung
OpenOffice | 12.08.08 | Folie 44Access 2007 – VBA | 25.06.08 | Seite 44
Regionales Rechenzentrum für Niedersachsen
Beispiel
Dim zahlA As IntegerDim zahlB As IntegerDim result As Integer
result = zahlA MOD zahlB
If (result = 0) Then
If (zahlA = zahlB) ThenDebug.Print "Die Zahlen sind gleich."
ElseDebug.Print "Division ohne Rest"
End If
ElseDebug.Print "Rest der Division: " & result
End If
OpenOffice | 12.08.08 | Folie 45Access 2007 – VBA | 25.06.08 | Seite 45
Regionales Rechenzentrum für Niedersachsen
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-Case-
Anweisungen nutzen können.
OpenOffice | 12.08.08 | Folie 46Access 2007 – VBA | 25.06.08 | Seite 46
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 47Access 2007 – VBA | 25.06.08 | Seite 47
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 ' Form neu zeichnen
End Sub
OpenOffice | 12.08.08 | Folie 48Access 2007 – VBA | 25.06.08 | Seite 48
Regionales Rechenzentrum für Niedersachsen
Select-Case-Anweisung
... sind eine andere Form von ElseIf-Anweisungen. Der Wert einer Variablen wird mit einem numerischen Wert oder einem
String verglichen.
Select Case variableCase konstante
Anweisung Case konstante
AnweisungCase Else
AnweisungEnd Select
Anweisung
OpenOffice | 12.08.08 | Folie 49Access 2007 – VBA | 25.06.08 | Seite 49
Regionales Rechenzentrum für Niedersachsen
Arbeitsweise
Select Case variableCase konstante
Anweisung Case konstante
AnweisungCase Else
AnweisungEnd Select
Anweisung
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.
OpenOffice | 12.08.08 | Folie 50Access 2007 – VBA | 25.06.08 | Seite 50
Regionales Rechenzentrum für Niedersachsen
Flußdiagramm
var == Wert?
Selektor var
var == Wert? Anweisungen
var == Wert?
Default-Anweisung
Anweisungen
ja
nein
nein
nein
nein
Anweisungen
ja
ja
OpenOffice | 12.08.08 | Folie 51Access 2007 – VBA | 25.06.08 | Seite 51
Regionales Rechenzentrum für Niedersachsen
Struktogramm
Anweisungen zu Fall 1
Default-Anweisungen
. . .
Selektor var
Anweisungen zu Fall 2
Anweisungen zu Fall n
OpenOffice | 12.08.08 | Folie 52Access 2007 – VBA | 25.06.08 | Seite 52
Regionales Rechenzentrum für Niedersachsen
Numerischer Vergleich
Dim wert As Integer
Select Case wertCase 1
Debug.Print "Speichern"
Case 2Debug.Print "Ausdruck"
Case ElseDebug.Print "Falsche Eingabe"
End Select
Der Wert der Variablen wird mit den Zahlen eins und zwei
verglichen. Case Fall ist immer ein
Vergleich auf Gleichheit. Die Variable und die Konstante, mit der verglichen wird, müssen den
gleichen Datentyp besitzen.
OpenOffice | 12.08.08 | Folie 53Access 2007 – VBA | 25.06.08 | Seite 53
Regionales Rechenzentrum für Niedersachsen
Vergleich mit einer Zeichenfolge
Dim produkt As StringDim kategorie As String
Select Case produktCase "Apfel"
kategorie = "Obst"
Case "Weißkohl"kategorie = "Gemüse"
Case Elsekategorie = ""
End Select
Debug.Print kategorie
Der Wert der Variablen wird mit einer Zeichenfolge
verglichen. Falls keiner der Fälle zutrifft,
wird die Variable auf eine leere Zeichenfolge gesetzt.
OpenOffice | 12.08.08 | Folie 54Access 2007 – VBA | 25.06.08 | Seite 54
Regionales Rechenzentrum für Niedersachsen
Listen nutzen
Dim produkt As StringDim kategorie As String
Select Case produktCase "Apfel", "Bananen", "Birnen"
kategorie = "Obst"
Case "Weißkohl", "Bohnen", "Erbsen"kategorie = "Gemüse"
Case Elsekategorie = ""
End Select 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.
OpenOffice | 12.08.08 | Folie 55Access 2007 – VBA | 25.06.08 | Seite 55
Regionales Rechenzentrum für Niedersachsen
Bereiche von Werten nutzen
Dim bestellmenge As IntegerDim rabatt As Single
Select Case bestellmengeCase 1 To 50
rabatt = 0.0
Case 51 To 100rabatt = 0.03
Case ElseDebug.Print "Falsche Bestellmenge"bestellmenge = 0rabatt = 0.0
End Select
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.
OpenOffice | 12.08.08 | Folie 56Access 2007 – VBA | 25.06.08 | Seite 56
Regionales Rechenzentrum für Niedersachsen
Vergleichsoperatoren nutzen
Dim bestellmenge As Integer
Select Case bestellmengeCase Is < 10
Debug.Print "Mindestbestellmenge unterschritten"
Case Is > 100Debug.Print "Lieferung nur gegen Vorkasse"
Case ElseDebug.Print "Bestellung ausführen"
End Select
Für die Variable muss als Platzhalter Is angegeben
werden. Dem Platzhalter folgt ein Vergleichsoperator und der Wert mit dem verglichen wird.
OpenOffice | 12.08.08 | Folie 57Access 2007 – VBA | 25.06.08 | Seite 57
Regionales Rechenzentrum für Niedersachsen
Bedingungen verknüpfen
Dim bestellmenge As IntegerDim rabatt As Dobule
Select Case bestellmengeCase Is >= 50 And (bestellmenge < 100)
rabatt = 0.03
Case Is > 100 And (bestellmenge < 200)rabatt = 0.05
Case Elserabatt = 0.0
End SelectIn dem zu verknüpfenden Ausdruck
muss der Variablennamen wiederholt werden.
OpenOffice | 12.08.08 | Folie 58Access 2007 – VBA | 25.06.08 | Seite 58
Regionales Rechenzentrum für Niedersachsen
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-Loop- oder While-Wend-Schleifen genutzt werden. Für den Schleifenabbruch wird eine Bedingung angegeben.
OpenOffice | 12.08.08 | Folie 59Access 2007 – VBA | 25.06.08 | Seite 59
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 60Access 2007 – VBA | 25.06.08 | Seite 60
Regionales Rechenzentrum für Niedersachsen
Zählschleife For-Next
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. Standardmäßig wird der Wert um eins erhöht.
For zaehler = startwert To endwert
Anweisung
Next zaehler
K03_conditionLoop.accdb:Modul conditionLoopProzedur: zaehlen
OpenOffice | 12.08.08 | Folie 61Access 2007 – VBA | 25.06.08 | Seite 61
Regionales Rechenzentrum für Niedersachsen
Schrittweite angeben
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.
For zaehler = startwert To endwert Step schrittweite
Anweisung
Next zaehler
OpenOffice | 12.08.08 | Folie 62Access 2007 – VBA | 25.06.08 | Seite 62
Regionales Rechenzentrum für Niedersachsen
Flussdiagramm und Struktogramm
> maxWert
Initialisiere Zähler
neinja
Flussdiagramm
Struktogramm
Anweisung
Wiederhole solange
Nächster Schritt
Initialisiere Zähler
Anweisung
Zähler + Schrittweite
OpenOffice | 12.08.08 | Folie 63Access 2007 – VBA | 25.06.08 | Seite 63
Regionales Rechenzentrum für Niedersachsen
Beispiele für Ganzzahlen
Dim count As Integer
For count = 0 To 9 Debug.Print countNext count
For count = 9 To 0 Debug.Print countNext count
For count = 9 To 0 Step - 1 Debug.Print countNext 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.
In dieser Zählschleife wird 9, 8, 7 und so weiter gezählt.
OpenOffice | 12.08.08 | Folie 64Access 2007 – VBA | 25.06.08 | Seite 64
Regionales Rechenzentrum für Niedersachsen
Beispiele für Dezimalzahlen
Dim zaehler As Double
For zaehler = 0 To 5.5 Debug.Print countNext count
For zaehler = 0 To 5.5 Step 0.5 Debug.Print countNext count
For zaehler = 9 To 0 Step - 0.5 Debug.Print countNext count
For zaehler = 0.5 To 5.5 Step 2 Debug.Print countNext count
In dieser Zählschleife wird 0, 1, 2 und so weiter gezählt. Die
Schrittweite beträgt eins.
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.
OpenOffice | 12.08.08 | Folie 65Access 2007 – VBA | 25.06.08 | Seite 65
Regionales Rechenzentrum für Niedersachsen
Verschachtelte Schleifen
Dim wert As Integer Dim faktor As Double;Dim ergebnis As Double
For wert = 1 To 5
ergebnis = 0
Debug.Print ergebnis Next wert
For faktor = 0.5 To 2 Step 0.5ergebnis = faktor * wert If (faktor > 1.5) AND (wert = 2) Then
Exit ForEnd If
Next faktor
Äußere Schleife
Innere Schleife
OpenOffice | 12.08.08 | Folie 66Access 2007 – VBA | 25.06.08 | Seite 66
Regionales Rechenzentrum für Niedersachsen
Abbruch einer Schleife
Dim wert As IntegerDim faktor As Double;Dim ergebnis As Double
For wert = 1 To 5 ergebnis = 0
For faktor = 0.5 To 2 Step 0.5ergebnis = faktor * wert If (faktor > 1.5) AND (wert = 2) Then
Exit ForEnd If
Next faktor
Debug.Print ergebnis Next wert
Mit Hilfe von Exit kann eine Schleife abgebrochen werden. Hier wird nur die innere Schleife abgebrochen. Die exit-
Anweisung gehört zu der inneren Schleife und nicht zur äußeren
Schleife.
OpenOffice | 12.08.08 | Folie 67Access 2007 – VBA | 25.06.08 | Seite 67
Regionales Rechenzentrum für Niedersachsen
Do-Loop-Schleifen
Die Schleife beginnt mit Do und endet mit Loop. Momentan würde diese Schleife endlos laufen. Es fehlt eine
Abbruchbedingung.
DoAnweisung
Loop
OpenOffice | 12.08.08 | Folie 68Access 2007 – VBA | 25.06.08 | Seite 68
Regionales Rechenzentrum für Niedersachsen
Fußgesteuerte Do-Loop-Schleifen
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.
DoAnweisung
Loop Until Bedingung
DoAnweisung
Loop While Bedingung
K03_conditionLoop.accdb:Modul conditionLoopProzedur: fussSchleifen
OpenOffice | 12.08.08 | Folie 69Access 2007 – VBA | 25.06.08 | Seite 69
Regionales Rechenzentrum für Niedersachsen
until
Dim count As Integer
count = 0
Do count = count + 1Debug.Print count
Loop Until count > 5
count +1
wiederhole bis count > 5
Debug.Print
count = 0 + 1count = 1 + 1count = 2 + 1count = 3 + 1count = 4 + 1count = 5 + 1
⇒ Abbruch
OpenOffice | 12.08.08 | Folie 70Access 2007 – VBA | 25.06.08 | Seite 70
Regionales Rechenzentrum für Niedersachsen
while
Dim count As Integer
count = 0
Do count = count + 1Debug.Print count
Loop While count > 5
count +1
wiederhole so lange count > 5
Debug.Print
count = 0 + 1⇒ Abbruch
OpenOffice | 12.08.08 | Folie 71Access 2007 – VBA | 25.06.08 | Seite 71
Regionales Rechenzentrum für Niedersachsen
Kopfgesteuerte Do-Loop-Schleifen
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.
Do Until BedingungAnweisung
Loop
Do While BedingungAnweisung
Loop
K03_conditionLoop.accdb:Modul conditionLoopProzedur: kopfSchleifen
OpenOffice | 12.08.08 | Folie 72Access 2007 – VBA | 25.06.08 | Seite 72
Regionales Rechenzentrum für Niedersachsen
until
Dim count As Integer
count = 0
Do Until count > 5count = count + 1Debug.Print count
Loop
count = 0 + 1count = 1 + 1count = 2 + 1count = 3 + 1count = 4 + 1count = 5 + 1
⇒ Abbruch
count +1
wiederhole bis count > 5
Debug.Print
OpenOffice | 12.08.08 | Folie 73Access 2007 – VBA | 25.06.08 | Seite 73
Regionales Rechenzentrum für Niedersachsen
while
Dim count As Integer
count = 0
Do count = count + 1Debug.Print count
Loop While count > 5
⇒ Abbruch
count +1
wiederhole so lange count > 5
Debug.Print
OpenOffice | 12.08.08 | Folie 74Access 2007 – VBA | 25.06.08 | Seite 74
Regionales Rechenzentrum für Niedersachsen
Schleife abbrechen
Dim wert As IntegerDim faktor As Double;Dim ergebnis As Double
wert = 0Do 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 DoEnd If
Next faktor
Debug.Print ergebnis wert = wert + 1
Loop Until wert > 5
Mit Hilfe von Exit Do wird die innere Schleife abgebrochen.
Die äußere beendet den Schleifendurchlauf und startet
einen neuen.
OpenOffice | 12.08.08 | Folie 75Access 2007 – VBA | 25.06.08 | Seite 75
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 76Access 2007 – VBA | 25.06.08 | Seite 76
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 77Access 2007 – VBA | 25.06.08 | Seite 77
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 78Access 2007 – VBA | 25.06.08 | Seite 78
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 = 4Const zahlB = 0Dim ergebnis As Integer
ergebnis = zahlA / zahlB
OpenOffice | 12.08.08 | Folie 79Access 2007 – VBA | 25.06.08 | Seite 79
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 80Access 2007 – VBA | 25.06.08 | Seite 80
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 81Access 2007 – VBA | 25.06.08 | Seite 81
Regionales Rechenzentrum für Niedersachsen
Beispiel: On Error Resume Next
On Error Resume Nextergebnis = divident / divisorIf Err.Number = 11 Then
count = 1End If
OpenOffice | 12.08.08 | Folie 82Access 2007 – VBA | 25.06.08 | Seite 82
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 83Access 2007 – VBA | 25.06.08 | Seite 83
Regionales Rechenzentrum für Niedersachsen
Beispiel: On Error Goto <marke>
Const zahlA = 4Const zahlB = 0Dim ergebnis As Integer
Err.Clear
On Error Goto FEHLER
ergebnis = divident / divisor
Exit Sub 'Prozedur beenden
'Definition der SprungmarkeFEHLER:
MsgBox(Err.Description)divisor = 1Resume
OpenOffice | 12.08.08 | Folie 84Access 2007 – VBA | 25.06.08 | Seite 84
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 85Access 2007 – VBA | 25.06.08 | Seite 85
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 86Access 2007 – VBA | 25.06.08 | Seite 86
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 87Access 2007 – VBA | 25.06.08 | Seite 87
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 88Access 2007 – VBA | 25.06.08 | Seite 88
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 89Access 2007 – VBA | 25.06.08 | Seite 89
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 90Access 2007 – VBA | 25.06.08 | Seite 90
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 91Access 2007 – VBA | 25.06.08 | Seite 91
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 92Access 2007 – VBA | 25.06.08 | Seite 92
Regionales Rechenzentrum für Niedersachsen
Informationen im Dialogfenster
In welcher Prozedur oder Modul kommt die Variable vor? Wo befindet sich die Variable?
Die Variable wird dem Überwachungsfenster hinzugefügt.
Welchen Wert hat die Variable aktuell gespeichert?
Welche Variable wird überprüft?
OpenOffice | 12.08.08 | Folie 93Access 2007 – VBA | 25.06.08 | Seite 93
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 94Access 2007 – VBA | 25.06.08 | Seite 94
Regionales Rechenzentrum für Niedersachsen
Aufbau
Bezeichnung der Variablen, Funktion oder Ausdruck.
Aktueller Wert des Ausdrucks.Rückgabewert der Funktion.
Datentyp des Ausdrucks.
Modul.Prozedur. Wo befindet sich der zu überwachende Ausdruck?
OpenOffice | 12.08.08 | Folie 95Access 2007 – VBA | 25.06.08 | Seite 95
Regionales Rechenzentrum für Niedersachsen
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 96Access 2007 – VBA | 25.06.08 | Seite 96
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 97Access 2007 – VBA | 25.06.08 | Seite 97
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 98Access 2007 – VBA | 25.06.08 | Seite 98
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.