Messwerte der gezeigten Varianten gegenübergestellt.
Wobei der Vergleich mit Konstanten bei Masseverarbeitung (logischerweise) schneller ist als der Vergleich von Zeichenketten.
############################################################
## Schleifenzähler:= Const iCount as Long = 10 ^ 4 #####
############################################################
[CheckBoxen zur Laufzeit erzeugen] 00:00:08,460938sek
[ForEachTypeName] 00:00:00,031250sek
[ForEachTypeOf] 00:00:00,019531sek
[ForI] 00:00:02,730469sek
############################################################
## Schleifenzähler:= 1 To 10 ^ 4 #####
############################################################
[CheckBoxen zur Laufzeit erzeugen] 00:00:08,339844sek
[ForEachTypeName] 00:00:00,031250sek
[ForEachTypeOf] 00:00:00,023438sek
[ForI] 00:00:02,808594sek
############################################################
## Schleifenzähler:= 1 To 10000 #####
############################################################
[CheckBoxen zur Laufzeit erzeugen] 00:00:08,222656sek
[ForEachTypeName] 00:00:00,031250sek
[ForEachTypeOf] 00:00:00,023438sek
[ForI] 00:00:02,726563sek
Quellcode
'***** UserForm: UserForm1
'***** CommandButton: cmdExit
'***** CommandButton: cmdGo
Option Explicit
Const iCount As Long = 10 ^ 4
Private Sub cmdExit_Click()
Unload Me
End Sub
Private Sub cmdGo_Click()
Call main
End Sub
Private Sub UserForm_Initialize()
Dim i As Long
Dim t
t = Timer
For i = 1 To 10000
Me.Controls.Add "Forms.Checkbox.1"
DoEvents
Next i
Debug.Print "############################################################"
Debug.Print "## Schleifenzähler:= 1 To 10 ^ 4 #####"
Debug.Print "############################################################"
Debug.Print "[CheckBoxen zur Laufzeit erzeugen] ", Format(Timer - t, "00:00:00.000000") & "sek"
End Sub
Sub main()
Dim t
UserForm1.Caption = "Läuft..."
t = Timer: Call ForEachTypeName
Debug.Print "[ForEachTypeName] ", Format(Timer - t, "00:00:00.000000") & "sek"
t = Timer: Call ForEachTypeOf
Debug.Print "[ForEachTypeOf] ", Format(Timer - t, "00:00:00.000000") & "sek"
t = Timer: Call ForI
Debug.Print "[ForI] ", Format(Timer - t, "00:00:00.000000") & "sek"
UserForm1.Caption = "Fertig"
End Sub
Sub ForEachTypeName()
Dim ctl As MSForms.Control
For Each ctl In UserForm1.Controls
If TypeName(ctl) = "CheckBox" Then
ctl.Value = False
End If
Next ctl
End Sub
Sub ForEachTypeOf()
Dim ctl As MSForms.Control
For Each ctl In UserForm1.Controls
If TypeOf ctl Is MSForms.CheckBox Then
ctl.Value = False
End If
Next ctl
End Sub
Sub ForI()
Dim i As Long
For i = 1 To 10000
Me.Controls("CheckBox" & i).Value = False
Next
End Sub
Hinweis:
Der Harcodierte Schleifenzähler der For-Schleife war der schnellste, wenngleich für den User unwirklich spürbar.
|