Sla*_*lab 2 excel vba excel-vba
在我的Excel VBA宏中,我想尝试在一些嵌套的if-else语句中创建"fall through".但我还希望能够像普通的if-else语句一样运行.
我的解决方案似乎有效.这种方法有什么问题吗?
我知道使用Goto
是不赞成的,但这是我能想到解决问题的唯一方法.
If fallThrough = True Then GoTo Cr1
If fallThrough = False and criteria = crit1 Then
Cr1:
'MsgBox "Criteria 1"
ElseIf fallThrough = True Then GoTo Cr2
ElseIf fallThrough = False And criteria = crit2 Then
Cr2:
'MsgBox "Criteria 2"
If fallThrough = True Then GoTo Cr3
ElseIf fallThrough = False And criteria = crit3 Then
Cr3:
'MsgBox "Criteria 3"
If fallThrough = True Then GoTo Cr4
ElseIf fallThrough = False And criteria = crit4 Then
Cr4:
'MsgBox "Criteria 4"
End If
Run Code Online (Sandbox Code Playgroud)
制作你想要做的单独的潜艇,并在正常情况下调用它们.
Sub main(fallThrough As Boolean)
If fallThrough Then
critsub1
critsub2
critsub3
critsub4
Else
If criteria = crit1 Then
critsub1
ElseIf criteria = crit2 Then
critsub2
ElseIf criteria = crit3 Then
critsub3
ElseIf criteria = crit4 Then
critsub4
End If
End If
End Sub
Sub critsub1()
MsgBox "Criteria 1"
End Sub
Sub critsub2()
MsgBox "Criteria 2"
End Sub
Sub critsub3()
MsgBox "Criteria 3"
End Sub
Sub critsub()
MsgBox "Criteria 4"
End Sub
Run Code Online (Sandbox Code Playgroud)
是的,你在if中重复调用,但这更容易阅读和维护.
另一种方法是创建单独的Ifs:
If (Not fallThrough And criteria = crit1) Or fallThrough Then critsub1
If (Not fallThrough And criteria = crit2) Or fallThrough Then critsub2
If (Not fallThrough And criteria = crit3) Or fallThrough Then critsub3
If (Not fallThrough And criteria = crit4) Or fallThrough Then critsub4
Run Code Online (Sandbox Code Playgroud)
这样就没有重复了
归档时间: |
|
查看次数: |
99 次 |
最近记录: |