Excel VBA:在嵌套的if-else语句中创建"fall through",还允许正常行为?

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)

Sco*_*ner 6

制作你想要做的单独的潜艇,并在正常情况下调用它们.

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)

这样就没有重复了