Een workbook is een collection of objecten van het type worksheet.
Scrollen door een collection doe je met "For Each" niet met een (i) counter.
Stel je hebt een worksheet "Inkomsten" die nu nummer 1 heeft. Zal dat altijd zo zijn, zelfs wanneer je worksheets toevoegt, wist, verplaatst???
Daar staat geen garantie op
Met "For Each" hoef je daar niet wakker van te liggen :d
Wat je zegt is niet juist.
Worksheets(1) is het blad met index 1 van alle beschikbare sheets, en deze reikt tot sheets([Worksheets.count]). Daar staat wel degelijk garantie op.
Als je met een For..Each loop door alle worksheet objecten heengaat kun je ook fouten generen, Dat geldt niet alleen met for ... to loops zoals je implicieert. Wat is bijvoorbeeld het resultaat van de volgende code?
Code:
For Each sht In ActiveWorkbook.Sheets
Sheets.Add after:=sht
Next
de collectie Activeworkbook.sheets wordt op het moment van het starten van de Lus for..each bepaald, en hier zal dus het aantal sheets in de werkmap worden verdubbeld, en geen eindeloze lus ontstaan.
Er is dus niets mis met de methode die Excel Amateur gebruikt,.. Sterker nog.
Soms kun je beter for .. to gebruiken . bijvoorbeeld
Deze code werkt wel:
Code:
Sub TestForTO()
For i = Worksheets.Count To 1 Step -1
If Sheets.Count = 1 Then Exit For
Sheets(i).Delete
MsgBox "blad " & i & "is verwijderd"
Next
MsgBox "Klaar!"
End Sub
Deze code werkt niet:
Code:
Sub TestForEach()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In ActiveWorkbook.Sheets
If ws.Index <> 1 Then
ws.Delete
MsgBox "Blad " & ws.Index & " is verwijderd.."
End If
Next
Application.DisplayAlerts = True
MsgBox "Dit ga je niet zien met meer dan 2 sheets"
End Sub
Laatst bewerkt: