Zoeken…


Selecteer geval

Select Case kan worden gebruikt wanneer veel verschillende voorwaarden mogelijk zijn. De voorwaarden worden van boven naar beneden gecontroleerd en alleen de eerste casus die overeenkomt wordt uitgevoerd.

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

De logica van het Select Case blok kan worden omgekeerd om ook het testen van verschillende variabelen te ondersteunen, in dit soort scenario kunnen we ook logische operatoren gebruiken:

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 statements kunnen ook rekenkundige operatoren gebruiken. Wanneer een rekenkundige operator wordt gebruikt tegen de waarde Select Case , moet deze worden voorafgegaan door het sleutelwoord Is :

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

Voor elke lus

De For Each lusconstructie is ideaal voor het itereren van alle elementen van een verzameling.

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

Gebruik For Each bij het herhalen van objectverzamelingen:

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

Vermijd For Each wanneer itererende arrays; een For lus biedt aanzienlijk betere prestaties met arrays. Omgekeerd biedt een For Each lus betere prestaties bij het herhalen van een Collection .

Syntaxis

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

Het Next sleutelwoord kan optioneel worden gevolgd door de iteratorvariabele; dit kan helpen geneste lussen te verduidelijken, hoewel er betere manieren zijn om geneste code te verduidelijken, zoals het extraheren van de binnenste lus in zijn eigen procedure.

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

Doe een lus

 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

Herhalingslus

'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

For loop

De For lus wordt gebruikt om het ingesloten deel van de code een bepaald aantal keren te herhalen. Het volgende eenvoudige voorbeeld illustreert de basissyntaxis:

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

De bovenstaande code geeft een geheel getal i . De For lus wijst elke waarde tussen 1 en 10 toe aan i en voert vervolgens Debug.Print i - dwz de code drukt de nummers 1 tot en met 10 af naar het directe venster. Merk op dat de lusvariabele wordt verhoogd met de instructie Next , dat wil zeggen nadat de ingesloten code wordt uitgevoerd in tegenstelling tot voordat deze wordt uitgevoerd.

Standaard wordt de teller telkens met 1 verhoogd als de lus wordt uitgevoerd. Er kan echter een Step worden opgegeven om de hoeveelheid van de toename te wijzigen als een letterlijke waarde of de retourwaarde van een functie. Als de beginwaarde, eindwaarde of Step een drijvende-kommawaarde is, wordt deze afgerond op de dichtstbijzijnde gehele waarde. Step kan een positieve of negatieve waarde zijn.

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

Over het algemeen zou een For lus worden gebruikt in situaties waarin bekend is voordat de lus begint hoe vaak de bijgevoegde code moet worden uitgevoerd (anders is een Do of While lus meer geschikt). Dit komt omdat de exitconditie vast is na de eerste invoer in de lus, zoals deze code laat zien:

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

Een For lus kan vroeg worden verlaten met de Exit For instructie:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow