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