Visual Basic: Bedingungen und Schleifen

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

Visual Basic: Bedingungen und Schleifen

Wer bisher mit VBA oder C# gearbeitet hat und zu VB wechseln möchte, sieht sich bei der Entwicklung von WPF-Anwendungen einigen Änderungen gegenüber. Dieser Artikel liefert die Grundlagen zur Programmierung von Bedingungen wie If...Then oder Select Case und von Schleifen wie For...Next, For...Each oder Do While. Zum Experimentieren mit den Beispielen nutzen wir das Tool LINQPad 5.

Wer von VBA kommt, wird wenig Probleme haben, sich in Visual Basic für .NET einzuarbeiten. Wer nur C# kennt oder sich daran gewöhnt hat, muss sich erst ein wenig einarbeiten. Hier kommen nämlich die wichtigsten Konstrukte bei der Programmierung von Methoden und Funktionen: Bedingungen und Schleifen. Die Beispiele dieses Artikels haben wir der Einfachheit halber wieder im Tool LINQPad5 ausprobiert, das wir im Artikel LINQPad: LINQ, C# und VB einfach ausprobieren bereits vorgestellt haben.

Einfaches If...Then

Eine einfache If...Then-Bedingung prüft, ob der angegebene Ausdruck wahr ist und führt dann die zwischen der If- und der End If-Zeile enthaltenen Anweisungen aus:

Dim intZahl As Integer
intZahl = 10
If intZahl > 5 Then
     Debug.WriteLine("intZahl ist größer als 5")
End If

Von C# kommend ist das eine Umstellung, denn auch hier fallen die geschweiften Klammern weg und die Semikola am Ende der Befehlszeilen. Auch ist es hier nicht mehr möglich, eine einfache Zeile einfach ohne geschweifte Klammern hinter der If-Zeile einzufügen. Es gibt aber auch unter VB eine vereinfachte Schreibweise für einfache Anweisungen. Hier lassen Sie dann einfach die Zeile End If weg und fügen die auszuführende Zeile einfach an die Bedingung an:

If intZahl > 5 Then Debug.WriteLine("intZahl ist größer als 5")

If...Then...Else-Bedingung

Nehmen wir noch einen Else-Zweig hinzu, um Anweisungen anzugeben, die bei Nichterfüllung der Bedingung ausgeführt werden sollen. Dann sieht die Bedingung wie folgt aus:

If intZahl > 5 Then 
     Debug.WriteLine("intZahl ist größer als 5")
Else 
     Debug.WriteLine("intZahl ist nicht größer als 5")
End If

Wenn der erste Teil der Bedingung hier nicht eintritt, wird auf jeden Fall der zweite Teil hinter dem Schlüsselwort Else ausgeführt. Sie können statt Else auch das Schlüsselwort ElseIf verwenden und eine zweite Bedingung angeben. Im folgenden Beispiel müssen wir allerdings beachten, dass im Falle von intZahl = 5 keiner der beiden Zweige ausgeführt wird:

If intZahl > 5 Then
     Debug.WriteLine("intZahl ist größer als 5")
ElseIf intZahl < 5 Then
     Debug.WriteLine("intZahl ist nicht größer als 5")
End If

Für diesen Fall können wir aber auch noch einen finalen Else-Zweig anhängen, der auf jeden Fall ausgeführt wird. Der Else-Zweig kann allerdings nur als letzte Bedingung verwendet werden:

If intZahl > 5 Then
     Debug.WriteLine("intZahl ist größer als 5")
ElseIf intZahl < 5 Then
     Debug.WriteLine("intZahl ist nicht größer als 5")
Else
     Debug.WriteLine("Keine der angegebenen Bedinungen traf zu.")
End If

Sie können mehrere ElseIf-Zweige einsetzen. Das ist ein großer Unterschied zu C#, denn dort gibt es gar kein ElseIf (nur eine vereinfachte Schreibweise für verschachtelte If-Bedingungen mit Else If). Hier müssen Sie für solche Fälle mit verschachtelten Bedingungen arbeiten, wenn Sie If...Then nutzen wollen.

Verschachtelte If...Then-Bedingung

If...Then-Bedingungen lassen sich ineinander verschachteln:

If intZahl > 5 Then
     Debug.WriteLine("intZahl ist größer als 5")
ElseIf 
     If intZahl > 3 Then
         Debug.WriteLine("intZahl ist größer als 3 und kleiner als 5")
     Else
         Debug.WriteLine("intZahl ist kleiner gleich 3")
     End If
End If

Verwendung von If...Then in einer Zeile mit IIf

Die von VBA bekannte Funktion IIf können Sie unter C# nicht verwenden, es gibt dort eine alternative Schreibweise mit gleicher Funktion. Unter VB jedoch steht IIf wie unter VBA zur Verfügung. Dabei erwartet die Funktion drei Parameter:

  • Bedingung
  • Wert, wenn die Bedingung wahr ist
  • Wert, wenn die Bedingung falsch ist

Die obige If...Then...Else-Bedingung würde in einer Zeile wie folgt aussehen:

IIf(intZahl>5, "Zahl ist größer als 5", "Zahl ist kleiner gleich 5")

Hinweis: Wenn Sie IIf und anderen Visual Basic-Funktionen in LINQPad testen wollen, erhalten Sie normalerweise den Fehler aus Bild 1.

Fehler beim Ausführen der Funktion IIf

Bild 1: Fehler beim Ausführen der Funktion IIf

Um dies zu verhindern, müssen Sie den Namespace Microsoft.VisualBasic hinzufügen.

Das erledigen Sie über einen Dialog, den Sie mit dem Menübefehl Query|Namespace Imports öffnen. Der Dialog heißt Query Properties. Im Bereich Additional Reference klicken Sie auf die Schaltfläche Add, was den Dialog Add Custom Assembly Reference öffnet. Hier geben Sie im Suchfeld VisualBasic ein und fügen den Eintrag wie in Bild 2 mit einem Klick auf die OK-Schaltfläche hinzu.

Hinzufügen der Referenz auf die Visual Basic-Bibliothek

Bild 2: Hinzufügen der Referenz auf die Visual Basic-Bibliothek

Nun fehlt nur noch ein Schritt: Zurück im Dialog Query Properties wechseln Sie zum Bereich Additional Namespace Imports und geben dort wie in Bild 3 gezeigt Microsoft.VisualBasic ein. Da wir zuvor einen Verweis auf die entsprechende Bibliothek hinzugefügt haben, können Sie in der Liste oben rechts den Eintrag Microsoft.VisualBasic.dll auswählen.

Hinzufügen des Namespaces Microsoft.VisualBasic

Bild 3: Hinzufügen des Namespaces Microsoft.VisualBasic

Darunter erscheinen dann alle verfügbaren Namespaces, von denen Sie Microsoft.VisualBasic auswählen und per Klick auf die Schaltfläche < Add Selected Namespaces zur Liste im rechten Bereich hinzufügen.

Danach können Sie IIf nicht nur ohne Fehlermeldung nutzen, sondern IIf und die übrigen Elemente des Namespaces werden per IntelliSense angezeigt.

Mehrere Bedingungen komfortabel mit Select Case prüfen

Wenn Sie unter VBA mehrere Bedingungen prüfen wollen, können Sie das durchaus mit If...ElseIf...Else...End If erledigen. Allerdings gibt es auch noch die Select Case-Bedingung, mit der Sie Bedingungen mit mehreren Zweigen einfacher abbilden können. Select Case ist genauso wie unter VBA aufgebaut. Unter C# setzt man zu diesem Zweck die switch-Bedingung ein. Select Case funktioniert so:

Dim intZahl As Integer
intZahl = 5
Select Case intZahl
     Case >5
         Debug.WriteLine ("Zahl ist größer als 5.")
     Case <5
         Debug.WriteLine ("Zahl ist kleiner als 5.")
     Case Else
         Debug.WriteLine ("Zahl ist gleich 5.")
End Select

Wir geben also den ersten Teil des Vergleichsausdrucks hinter der Select Case-Zeile an. Der Rest der jeweiligen Vergleichsausdrücke landet jeweils hinter den Case-Zweiten. Es gibt einfache Case-Zeilen und maximal einen Case Else-Zweig, der alle Fälle auffängt, die in den vorherigen Fällen nicht berücksichtigt wurden.

Sie müssen auch nicht wie bei der switch-Bedingung unter C# für jede Bedingung eine Anweisung einfügen, welche die Bedingung verlässt, wenn einer der Zweige angesteuert wird. Wenn der erste Case-Zweig angesteuert wurde, werden die übrigen automatisch nicht mehr ausgeführt.

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]