【问题标题】:Multiple If/Then Call options多个 If/Then 调用选项
【发布时间】:2022-01-20 19:27:15
【问题描述】:

我有几个工作表。有 3 个基于工作表名称的子程序 CALL 选项。我已经尝试重新排列和 If、If Not、Else 和 ElseIf、Exit Sub、End If 等。如果 CALL 完成并返回,它不可避免地会到达最后一个 CALL(这里... IsolOther)并执行它甚至通过前一个呼叫有效。我还试图找出 SELECT CASE 函数用于多种选择。 CBI、Fire、LEA 和 InCase 的 CALL 可以完美运行。问题是当我有一个不同名称的工作表时......我希望 CALL 转到 IsolOther。

        Sub DetermineTabs()

        'DETERMINE WHICH SUBROUTINE TO CALL BASED ON SHEET (TAB) NAME

            Dim newTab As String
            newTab = ActiveSheet.Name

        'Call appropriate Category processing routine    
                    'Call IsolNamesOnly Subroutine if ActiveSheet is named ... CBI
                If newTab = "CBI" Then Call IsolNamesOnly Else
                    'Call IsolNamesOnly Subroutine if ActiveSheet is named ... Fire
                If newTab = "Fire" Then Call IsolNamesOnly Else
                    'Call IsolNamesOnly Subroutine if ActiveSheet is named ... LEA
                If newTab = "LEA" Then Call IsolNamesOnly Else
                    'Call IsolInCase Subroutine if ActiveSheet is named ... InCase
                If newTab = "InCase" Then Call IsolInCase Else
                   'Call IsolOther Subroutine if ActiveSheet is named ... anything else
                If newTab <> "CBI" Or newTab <> "Fire" Or newTab <> "LEA" Or newTab <> "InCase" Then Call IsolOther Else
        
        End Sub

我也尝试过 "If Not newTab = "CBI" Or newTab = "Fire" Or newTab = "LEA" Or newTab = "InCase" Then Call IsolOther Else"(不带引号作为最后 IF 行的替代),以及将最后一行设为单独的 If Not/Else,但我失败了。如果前 4 张都没有找到,我想执行那个 CALL 和 End Sub。我查看了问题 60781118、51274411、24684092 和其他 Google 查询。帮助 。 . .请。

【问题讨论】:

  • 嗨,也许使用Elseif风格

标签: excel vba if-statement subroutine


【解决方案1】:

考虑SELECT...CASE 并将多个条件与Case Else 条件结合起来。

Select Case newTab
    Case "CBI", "LEA", "Fire"
    Call IsolNamesOnly 

    Case "InCase" 
    Call IsolInCase 

    Case Else
    Call IsolOther
End Select

【讨论】:

    【解决方案2】:

    Select CaseIf...Then...Else

    作为使用Select Case statement(在这种情况下要走的路)的替代方法,您可以考虑使用If...Then...Else statement

    如果你用下面的(流行的)方式写,...

    Sub DetermineTabsIfThenElse()
        
        Dim NewTab As String: NewTab = ActiveSheet.Name
        
        If NewTab = "CBI" Or NewTab = "Fire" Or NewTab = "LEA" Then
            IsolNamesOnly
        ElseIf NewTab = "InCase" Then
            IsolInCase
        Else
            IsolOther
        End If
    
    End Sub
    

    ...即使工作表名称为CBI,字符串FireLEA 也会被计算,而在Select Case 版本中,语句将立即退出。

    要模仿Select Case 版本,您可以按以下方式重写代码...

    Sub DetermineTabsIfThenElseSelectCase()
        
        Dim NewTab As String: NewTab = ActiveSheet.Name
        
        If NewTab = "CBI" Then
            IsolNamesOnly
        ElseIf NewTab = "Fire" Then
            IsolNamesOnly
        ElseIf NewTab = "LEA" Then
            IsolNamesOnly
        ElseIf NewTab = "InCase" Then
            IsolInCase
        Else
            IsolOther
        End If
    
    End Sub
    

    ...这会使其更长(更多“重复”输入)且可读性降低。

    实际上,我从未注意到任何版本的执行时间有任何差异。

    为了证明前面的“评估”点,替换例如"LEA" 带有数字,激活CBI 工作表并运行每个代码。第一个 If 版本会引发类型不匹配错误,因为 NewTab 被声明为字符串,而其他两个版本不会“注意到”它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多