Suche…


Fall auswählen

Select Case kann verwendet werden, wenn viele verschiedene Bedingungen möglich sind. Die Bedingungen werden von oben nach unten geprüft und nur der erste übereinstimmende Fall wird ausgeführt.

Sub TestCase()
    Dim MyVar As String

    Select Case MyVar    'We Select the Variable MyVar to Work with
        Case "Hello"     'Now we simply check the cases we want to check
            MsgBox "This Case"
        Case "World"
            MsgBox "Important"
        Case "How"
            MsgBox "Stuff"
        Case "Are"
            MsgBox "I'm running out of ideas"
        Case "You?", "Today"  'You can separate several conditions with a comma
            MsgBox "Uuuhm..." 'if any is matched it will go into the case
        Case Else             'If none of the other cases is hit
            MsgBox "All of the other cases failed"
    End Select

    Dim i As Integer
    Select Case i
        Case Is > 2 '"Is" can be used instead of the variable in conditions.
            MsgBox "i is greater than 2"
        'Case 2 < Is '"Is" can only be used at the beginning of the condition.
        'Case Else is optional
    End Select
End Sub

Die Logik des Select Case Blocks kann invertiert werden, um das Testen verschiedener Variablen zu unterstützen. In diesem Szenario können wir auch logische Operatoren verwenden:

Dim x As Integer
Dim y As Integer

x = 2
y = 5

Select Case True
    Case x > 3
        MsgBox "x is greater than 3"
    Case y < 2
        MsgBox "y is less than 2"
    Case x = 1
        MsgBox "x is equal to 1"
    Case x = 2 Xor y = 3
        MsgBox "Go read about ""Xor"""
    Case Not y = 5
        MsgBox "y is not 5"
    Case x = 3 Or x = 10
        MsgBox "x = 3 or 10"
    Case y < 10 And x < 10
        MsgBox "x and y are less than 10"
    Case Else
        MsgBox "No match found"
End Select

Case-Anweisungen können auch arithmetische Operatoren verwenden. Wenn ein arithmetischer Operator für den Wert " Select Case auswählen" verwendet wird, sollte das Schlüsselwort " Is vorangestellt werden:

Dim x As Integer

x = 5

Select Case x
    Case 1
        MsgBox "x equals 1"
    Case 2, 3, 4
        MsgBox "x is 2, 3 or 4"
    Case 7 To 10
        MsgBox "x is between 7 and 10 (inclusive)"
    Case Is < 2
        MsgBox "x is less than one"
    Case Is >= 7
        MsgBox "x is greater than or equal to 7"
    Case Else
        MsgBox "no match found"
End Select

Für jede Schleife

Das For Each Schleifenkonstrukt ist ideal für das Durchlaufen aller Elemente einer Auflistung.

Public Sub IterateCollection(ByVal items As Collection)

    'For Each iterator must always be variant
    Dim element As Variant

    For Each element In items
        'assumes element can be converted to a string
        Debug.Print element
    Next

End Sub

Verwenden Sie For Each Element, wenn Sie Objektauflistungen durchlaufen:

Dim sheet As Worksheet
For Each sheet In ActiveWorkbook.Worksheets
    Debug.Print sheet.Name
Next

Vermeiden Sie For Each beim Durchlaufen von Arrays; Eine For Schleife bietet eine wesentlich bessere Leistung bei Arrays. Umgekehrt bietet eine For Each Schleife eine bessere Leistung, wenn eine Collection durchlaufen wird.

Syntax

For Each [item] In [collection]
    [statements]
Next [item]

Auf das Next Schlüsselwort kann optional die Iterator-Variable folgen. Dies kann helfen, geschachtelte Schleifen zu klären, obwohl es bessere Möglichkeiten gibt, geschachtelten Code zu klären, beispielsweise das Extrahieren der inneren Schleife in eine eigene Prozedur.

Dim book As Workbook
For Each book In Application.Workbooks

    Debug.Print book.FullName

    Dim sheet As Worksheet
    For Each sheet In ActiveWorkbook.Worksheets
        Debug.Print sheet.Name
    Next sheet
Next book

Machen Sie eine Schleife

 Public Sub DoLoop()
    Dim entry As String
    entry = ""
    'Equivalent to a While loop will ask for strings until "Stop" in given
    'Prefer using a While loop instead of this form of Do loop
    Do While entry <> "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to the above loop, but the condition is only checked AFTER the
    'first iteration of the loop, so it will execute even at least once even 
    'if entry is equal to "Stop" before entering the loop (like in this case)
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop While entry <> "Stop"

    
    'Equivalent to writing Do While Not entry="Stop"
    '
    'Because the Until is at the top of the loop, it will
    'not execute because entry is still equal to "Stop"
    'when evaluating the condition
    Do Until entry = "Stop"
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop

    'Equivalent to writing Do ... Loop While Not i >= 100
    Do
        entry = InputBox("Enter a string, Stop to end")
        Debug.Print entry
    Loop Until entry = "Stop"
End Sub

While-Schleife

'Will return whether an element is present in the array
Public Function IsInArray(values() As String, ByVal whatToFind As String) As Boolean
    Dim i As Integer
    i = 0

    While i < UBound(values) And values(i) <> whatToFind
        i = i + 1
    Wend
    
    IsInArray = values(i) = whatToFind
End Function

Für Schleife

Die For Schleife wird verwendet, um den eingeschlossenen Codeabschnitt eine bestimmte Anzahl von Malen zu wiederholen. Das folgende einfache Beispiel veranschaulicht die grundlegende Syntax:

Dim i as Integer           'Declaration of i
For i = 1 to 10            'Declare how many times the loop shall be executed
    Debug.Print i          'The piece of code which is repeated
Next i                     'The end of the loop

Der obige Code deklariert eine Ganzzahl i . Die For Schleife weist i jeden Wert zwischen 1 und 10 zu und führt dann Debug.Print i - dh der Code gibt die Zahlen 1 bis 10 in das unmittelbare Fenster aus. Beachten Sie, dass die Schleifenvariable durch die Next Anweisung inkrementiert wird, d. H. Nachdem der eingeschlossene Code ausgeführt wurde, bevor er ausgeführt wird.

Standardmäßig wird der Zähler bei jeder Ausführung der Schleife um 1 erhöht. Es kann jedoch ein Step angegeben werden, um den Betrag des Inkrements entweder als Literal oder als Rückgabewert einer Funktion zu ändern. Wenn der Startwert, der Endwert oder der Step eine Gleitkommazahl ist, wird diese auf den nächsten ganzzahligen Wert gerundet. Step kann entweder ein positiver oder ein negativer Wert sein.

Dim i As Integer
For i = 1 To 10 Step 2
    Debug.Print i       'Prints 1, 3, 5, 7, and 9
Next

Im Allgemeinen wird eine For Schleife in Situationen verwendet, in denen vor Beginn der Schleife bekannt ist, wie oft der eingeschlossene Code ausgeführt werden soll (andernfalls ist eine Do oder While Schleife möglicherweise geeigneter). Dies liegt daran, dass die Beendigungsbedingung nach dem ersten Eintritt in die Schleife festgelegt ist, wie der folgende Code zeigt:

Private Iterations As Long              'Module scope

Public Sub Example()
    Dim i As Long
    Iterations = 10
    For i = 1 To Iterations
        Debug.Print Iterations     'Prints 10 through 1, descending.
        Iterations = Iterations - 1
    Next
End Sub

Eine For Schleife kann mit der Exit For Anweisung vorzeitig beendet werden:

Dim i As Integer

For i = 1 To 10
    If i > 5 Then
        Exit For
    End If
    Debug.Print i       'Prints 1, 2, 3, 4, 5 before loop exits early.
Next


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow