6 im Bauwesen Markus Uhlmann Basierend auf Folien von Ingo Mayer 1
Zusammenfassung der 5. Vorlesung Schleifen, (Entscheidungen) Fehlerbehandlung und Planung von en Softwarefehler Fehlertypen Debugging Auffangen von Benutzerfehlern Softwareengineering Entwicklung von Softwareprojekten ablaufpläne, Struktogramme 2
Inhalt / Planung der Vorlesung 1. Informationsdarstellung & -verarbeitung Grundlagen 2. Betriebssysteme, iersprachen * 3. Einführung in Excel/VBA VBA 4. Struktur von (VBA) en * 5. Logische Elemente I * 6. Logische Elemente II * 7. Beispielprogramm (Dynamik starrer Körper) * 8. Datentypen, Eingabe/Ausgabe * 9. Datenfelder * 10. Benutzerdefinierte Datentypen * 11. Objektorientierte iertechniken I * 12. Objektorientierte iertechniken II * 13. Matlab I Matlab 14. Matlab II * 3
Inhalt der heutigen Vorlesung Entscheidungen mehr zu Schleifen 4
VBA Sprachelemente Bisher behandelte VBA Elemente: Variablen Module, Prozeduren/Funktionen For-Next Schleifen Noch fehlende wichtige Elemente von VBA: weitere Details zu Schleifen Arbeiten mit Datenfeldern (arrays) Datentypen (Umwandlung, benutzerdefiniert) Ein- und Ausgabe Objekttechniken in VBA Heutige Vorlesung 5
(Verzweigungs- / Auswahlstrukturen): If-Then und Case Abfragen. Anweisungen werden nur dann ausgeführt, wenn eine bestimmte Bedingung oder ein bestimmter Fall erfüllt ist. Ansonsten werden andere oder keine Anweisungen ausgeführt. Wenn Dann Sonst Struktur. (Wiederholungsstrukturen): For...Next und Do...Loop Schleifen. Zähler- resp. bedingungsgesteuerte Schleifen. Derselbe Code durchläuft eine bestimmte Anzahl von Schritten. Anzahl der Durchläufe ist eine konstante Zahl oder an Bedingung geknüpft. X-Mal oder Solange Bis. 6
If-Then Abfragen Case Abfrage 7
Einseitige Auswahl If-Then Abfrage ohne alternative Anweisungsfolge: Nach Bedingungsabfrage werden Anweisungen ausgeführt oder nicht. Einzeilig (bei einer Anweisung) oder mehrzeilig (bei Anweisungsfolge). Syntax 1: If Bedingung Then Anweisung Syntax 2: If Bedingung Then Anweisung A : Anweisung i End If 8
Einseitige Auswahl Beispiel einseitige Auswahl: Sub einseitige_auswahl(i As Integer) If < 0 Then Debug.Print Die Zahl ist negativ!" End Sub 9
Zweiseitige Auswahl If-Then Abfrage mit zwei alternativen Anweisungsfolgen: In Abhängigkeit von einer Bedingung wird eine von zwei Anweisungsfolgen abgearbeitet. Übergang zur Alternativanweisung erfolgt mit Else Befehl. Syntax 3: If Bedingung Then Anweisungen_A Else Anweisungen_B End If 10
Zweiseitige Auswahl Beispiel zweiseitige Auswahl: Sub zweiseitige_auswahl() If Cells(1, 1) < 0 Then Debug.Print Die Zahl ist negativ!" Else Debug.Print Die Zahl ist 0 oder positiv!" End If End Sub 11
Mehrstufige Auswahl If-Then Abfrage mit mehreren alternativen Anweisungsfolgen: In Abhängigkeit verschiedener Bedingungen wird eine (oder keine) von mehreren Anweisungsfolgen abgearbeitet. Auswahl erfolgt mit ElseIf und Else Befehl. Syntax: If Bedingung a Then Anweisungen A ElseIf Bedingung b Then Anweisungen B ElseIf Bedingung c Then Anweisungen C : Else Anweisungen D End If 12
Mehrstufige Auswahl Beispiel mehrstufige Auswahl: Sub mehrstufige_auswahl() Dim i As Integer i = InputBox( Geben Sie eine Ganzzahl ein ) If i < 0 Then Debug.Print Die Zahl ist negativ! ElseIf i > 10 Then Debug.Print Die Zahl ist größer als 10! Else Debug.Print Die Zahl liegt im geschlossenen _ & Intervall [0, 10]! End If End Sub 13
Bedingungen für Entscheidungen Bedingungen sind Ausdrücke, die entweder True oder False ergeben Vergleiche Operatoren: >, <, <>, =, <=, >= logische Verkettungen: (Bsp: i>10) And, Or, Not, Xor, Eqv, Imp implizite Bedingungen: (Bsp: If ival Then ) der Ausdruck wird implizit evaluiert jeder nicht-null Wert ergibt True Bsp: Dim ival as Integer ival=5 If ival Then.. -> wird ausgeführt! 14
Bedingungen für Entscheidungen Vorsicht: direkter Vergleich mit True endet anders: Prozeduren/ Funktionen Dim ival as Integer ival=5 If ival=true Then... -> wird nicht ausgeführt! die eingebaute Konstante True hat den Wert -1 False hat den Wert 0 15
Zusammengesetzte Bedingungen komplexe Bedingungen können durch logische Verkettung einzelner Bedingungen erzeugt werden Beispiel: If x=2 And y<7 Then... Prozeduren/ Funktionen VBA evaluiert immer alle Teile einer zusammengesetzten Bedingung, egal ob das Ergebnis schon vorher eindeutig ist Beispiel: x=2... If x=2 Or y<7 Then... Ausdruck y<7 wird trotzdem evaluiert 16
Reihenfolge von Operatoren Operatoren haben unterschiedliche Prioritäten 1. arithmetische Operatoren a. Exponentiation ^ b. Division/Multiplikation /, * c. ganzzahlige Division \ d. Modulus (Restwert) Mod e. Addition/Subtraktion +, - 2. Zusammenfügung ( & Operator für Zeichenketten) 3. Vergleichsoperatoren Auswertung von rechts nach links 4. logische Operatoren Not -> And -> Or -> Xor -> Eqv -> Imp Änderung der Reihenfolge durch explizite Klammern: Bsp: If ((a Or b) And d) Then.. 17
Mehrseitige Auswahl Case Abfrage (Fallauswahl): Die mehrseitige Auswahl ist vom Wert einer Variablen abhängig. Bei Mehrfachabfragen ist Case Abfrage übersichtlicher als viele If-Then Abfragen. Syntax: Select Case Ausdruck Case Werteliste A Anweisungen Case Werteliste B Anweisungen : Case Else Anweisungen End Select Case Else Auswahl ist optional 18
Mehrseitige Auswahl Die Werteliste kann verschieden Formen haben: Ausdruck (Bsp: ivar ) Ausdruck To Ausdruck (Bsp: 5 To 10 ) Is Vergleichsoperator Ausdruck (Bsp: Is > 5) durch Komma getrennte Liste obiger Ausdrücke (Bsp: 8 To 11, 13 To 15 ) Verschiedene Ausdrücke in der Liste sind implizit durch Or verbunden! 19
Mehrseitige Auswahl Beispiel: Case Abfrage (Fallauswahl) Auf die Frage, wie sehr Ihnen VBA gefällt, soll über ein Eingabefenster eine Wertung von 1 bis 4 eingegeben werden. Über das Direktfenster im VBE werden die den Wertungen zugeordneten Aussagen wiedergegeben. Tabellarischer Verlauf: Subprozedur VBA_Wertung() Variable deklarieren Wertezuweisung der Variablen via InputBox Select Case Variable 1 2 3 4 Else Ausgabe Super!......... Ende der Auswahlstruktur Ende der Prozedur 20
Mehrseitige Auswahl Beispiel: Case Abfrage (Fallauswahl) Sub VBA_Wertung() Dim i as Integer i = InputBox("Wie gefällt Ihnen VBA? (Wertung 1-4)") Select Case i Case 1 Debug.Print "VBA scheint Sie zu begeistern!" Case 2 Debug.Print "VBA machen Sie ganz gerne." Case 3 To 4 Debug.Print "Denken Sie nochmals darüber nach, " _ & "wie interessant VBA doch sein kann!" Case Else Debug.Print "Bitte nur Zahlen von 1-4 eingeben!" End Select End Sub 21
Bedingungsgesteuerte Schleifen Do...Loop Schleife (kopfgesteuert): Test, ob Bedingung = True erfolgt vor dem 1. Durchlaufen der Schleife, d.h. unter Umständen wird die Schleife nie durchlaufen. Syntax: Do While Bedingung Anweisung Loop Oder Do Until Bedingung Anweisung Loop 22
Bedingungsgesteuerte Schleifen Do...Loop Schleife (fußgesteuert): Test, ob Bedingung = True erfolgt nach dem 1. Durchlaufen der Schleife, d.h. die Schleife wird immer mindestens 1 Mal durchlaufen. Syntax: Do Anweisungen Loop While Bedingung Oder Do Anweisungen Loop Until Bedingung 23
Bedingungsgesteuerte Schleifen Beispiel Kopf- resp. Fußsteuerung: Sub kopfgesteuert() Sub fussgesteuert() Dim i as Integer i = 5 Dim i as Integer i = 5 Do Until i >= 5 Debug.Print i i = i + 1 Oder Do Debug.Print i i = i + 1 Loop Loop Until i >= 5 End Sub End Sub wird nie ausgeführt wird einmal ausgeführt 24
Bedingungsgesteuerte Schleifen Do...Loop Schleife (ohne Steuerung): Unendliche Schleife, mit internem Abbruch durch Sprung mit Anweisung Exit Do Syntax: Do Anweisungen If Bedingung Then Exit Do End If Anweisungen Loop `hier fährt der Code nach Exit Do fort 25
Zählergesteuerte Schleife For...Next Schleife: Geeignet, wenn eine Variable einen vorgegebenen Zahlenbereich mit festem Inkrement / Dekrement durchlaufen soll. Schleife wird beendet, wenn Endwert über- bzw. unterschritten wird, nicht bei Gleichheit! Standardvorgabe für Schrittweite ist +1. Negative Schrittweiten sind möglich (Startwert > Endwert!). Angabe des Zählers bei Next ist optional. Syntax: For Zähler = Start To Ende [Step Schrittweite] Anweisungen Next [Zähler] 26
Zählergesteuerte Schleife Beispiel verschachtelte For...Next Schleife: Sub Zählerschleife_2() Dim i, j For i = 1 To 5 For j = 4 To 12 Step 2 Debug.Print i, j Next j Next i End Sub => Ausgabe 1 4 1 6 1 8 1 10 1 12 2 4... 27
Sprung- / Exit Anweisung GoTo und Exit Anweisung: GoTo Befehl ermöglicht das Springen an eine beliebige Stelle innerhalb einer Prozedur. Exit For / Exit Do Anweisungen ermöglichen das vorzeitige Beenden von For...Next und Do...Loop Schleifen bevor die eigentliche Abbruchbedingung erreicht ist. Folge: Ausführung wird mit der ersten Anweisung im Anschluss an die Next resp. Loop Anweisung fortgesetzt. Syntax: Anweisung GoTo Ziel Anweisung... Ziel: Anweisung Syntax: Do While Bedingung A Anweisung If Bedingung B Then Exit Do End If Loop 28
Beispiel Bewegung eines Kreisobjektes: 29
Weiterführende Literatur Paul Lomax, VB & VBA in a nutshell the language, O Reilly, 1998 Steven Roman, Writing Excel macros with VBA, 2nd edition, O Reilly, 2002 Jeff Webb and Steve Saunders, ing Excel with VBA &.NET, O Reilly, 2006 30