【问题标题】:multiple VBA if statements triggering different event多个 VBA if 语句触发不同的事件
【发布时间】:2017-02-20 14:51:35
【问题描述】:

对不起,我认为这是非常基本的,但我想知道是否有人可以告诉我为什么这些 IF 语句中只有 1 个似乎运行。 "CASH" 选项的第 3 个 IF 语句有效,但遗憾的是其他 2 个无效。

Sub HideUnhide_Discount()

If Range("Payment_Option") = "Subscription" Then
    Range("MnthD_Row").EntireRow.Hidden = False
    Range("MnthD").Value = 0
Else
    Range("MnthD_Row").EntireRow.Hidden = True
End If

If Range("Payment_Option") = "Lease" Then
    Range("OOD_Row").EntireRow.Hidden = False
    Range("Leasing_Info").EntireRow.Hidden = False
    Range("OOD").Value = 0
Else
    Range("OOD_Row").EntireRow.Hidden = True
    Range("Leasing_Info").EntireRow.Hidden = True
End If

If Range("Payment_Option") = "Cash" Then
    Range("OOD_Row").EntireRow.Hidden = False
    Range("MnthD_Row").EntireRow.Hidden = False
    Range("OOD").Value = 0
Else
    Range("OOD_Row").EntireRow.Hidden = True
    Range("MnthD_Row").EntireRow.Hidden = True
End If

End Sub

【问题讨论】:

  • 确实如此,但是当您到达第三个时,它会取消其他两个,您的第三个 If 不会嵌套在前两个的 Else 部分中
  • 你能显示任何数据吗?
  • 如果你在第一行 If 的开头放置一个断点 (F9),然后 F8 单步执行调试器中的代码,你会发现 Else 块前两个 If...End If 块在前两个条件评估为 False 时执行。那可能不是你打算写的。事实上,尚不清楚Else 块应该在什么条件下运行。 Range("Payment_Option") 检查需要在 Select CaseIf...Else If 块中,并且您需要弄清楚在哪些情况下需要 MnthD_RowLeasing_InfoOOD_Row 隐藏。
  • 换句话说,read your code to a rubber duck 比较它实际在做什么和它假定在做什么。

标签: vba excel excel-2013 nested-if


【解决方案1】:

尝试用下面的Select Case 替换您的多个If >> Else 条件:

Sub HideUnhide_Discount()

' first reset all rows to be visible , later according to the value, unhide specific rows
Range("MnthD_Row").EntireRow.Hidden = True
Range("OOD_Row").EntireRow.Hidden = True
Range("Leasing_Info").EntireRow.Hidden = True

Select Case Range("Payment_Option")
    Case "Subscription"
        Range("MnthD_Row").EntireRow.Hidden = False
        Range("MnthD").Value = 0

    Case "Lease"
        Range("OOD_Row").EntireRow.Hidden = False
        Range("Leasing_Info").EntireRow.Hidden = False
        Range("OOD").Value = 0

    Case "Cash"
        Range("OOD_Row").EntireRow.Hidden = False
        Range("MnthD_Row").EntireRow.Hidden = False
        Range("OOD").Value = 0

End Select

End Sub

【讨论】:

  • 这太棒了……正是我所需要的。谢谢
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2020-09-22
  • 1970-01-01
相关资源
最近更新 更多