Попробуйте использовать Select Case Statements
, если у вас есть несколько If Statement
на основе одного и того же значения.
MSDN - Выберите регистр
Выполняет одну из нескольких групп операторов в зависимости от значения выражения.
For Each c In Me.Controls
Select Case c.Tag
Case "IDSpec2Table", "IDSpec1Table", "IDSpec1TableExtra"
c.Height = 0
c.Visible = False
Case "IDSpec2Texts", "IDSpec1Texts"
c.Visible = True
c.Height = 330
Case "IDSpec1TextsExtra"
If ModuleTarget.TargetGroup <> "23C" Then
c.Visible = True
c.Height = 330
End If
End Select
Next
Производительность: выберите регистр против If против ElseIf
Я упомянул в комментарии, что использование Select Case
больше для удобства чтения, чем для производительности. Что правильно, если мы сравниваем операторы Select Case
и If ElseIf
(читай Какой путь быстрее? Если еще, или выберите регистр ).
Select Case
и If ElseIf
могут быть значительно быстрее, чем несколько If
операторов. Это связано с тем, что VBA оценивает каждое условие в операторе If
и прекращает оценку, когда выполняется одно условие в операторе Select Case
. Примечание: не все языки делают.
Рассмотрим этот простой тест.
Sub Test()
Debug.Print "Test:If Statement Test:"
If ret(1) = 1 Or ret(2) = 2 Or ret(3) = 3 Or ret(4) = 4 Or ret(5) = 5 Then
End If
Debug.Print vbNewLine; "Test:If ElseIf Statement"
If ret(1) = 1 Or ret(2) = 2 Then
ElseIf ret(3) = 3 Then
ElseIf ret(4) = 4 Then
ElseIf ret(5) = 5 Then
End If
Debug.Print vbNewLine; "Test:Select Case Statement"
Select Case 1
Case ret(1), ret(2)
Case ret(3)
Case ret(4)
Case ret(5)
End Select
End Sub
Function ret(n As Long) As Long
ret = n
Debug.Print n,
End Function
Обратите внимание, что оператор If
должен был выполнить 5 операций, хотя все они были истинными. ElseIf
пришлось выполнить 2 операции, потому что первые 2 операции были сгруппированы в одном предложении If
. Select Case
выполнил только одну операцию, хотя две операции были сгруппированы вместе. Это связано с тем, что Select Case
всегда останавливает оценку условий, когда выполняется одно условие.