VBA Excel双如果

标签 vba excel if-statement excel-formula

我在文档中有各种下拉菜单,需要创建一个双重条件语句。

所以我正在尝试执行以下操作:

If Cell B14 = Option 1 Then unhide Cells B16:B17
If Cells B17 = Yes Then hide Cells B19:B53
If Cells B17 = No Then show Cells B19:B34

所以如果有人选择Option 1从下拉菜单中会出现另一个下拉菜单,如果他们选择 Yes从第二个开始隐藏所需的单元格,如果他们选择 No它取消隐藏所需的单元格。

第一个下拉菜单中的选项 2 和 3 不需要显示第二个下拉框。

除了双重 if 之外,我所有的一切都在工作。

当前代码是:
If Target.Address = "$B$14" Then

    If Range("B14") = "Option 1: Travel Home" Then
        ActiveSheet.Rows("16:35").EntireRow.Hidden = False
        ActiveSheet.Rows("36:55").EntireRow.Hidden = True
    ElseIf Range("B14") = "Option 2: Travel to next city" Then
        ActiveSheet.Rows("15").EntireRow.Hidden = False
        ActiveSheet.Rows("16:17").EntireRow.Hidden = True
        ActiveSheet.Rows("19:35").EntireRow.Hidden = True
        ActiveSheet.Rows("36").EntireRow.Hidden = False
        ActiveSheet.Rows("37:55").EntireRow.Hidden = True
    ElseIf Range("B14") = "Option 3: Make own arrangements" Then
        ActiveSheet.Rows("15:36").EntireRow.Hidden = True
        ActiveSheet.Rows("39:55").EntireRow.Hidden = False
    End If

End If

选项 2 和 3 工作正常,只是选项 1 无法取消隐藏/隐藏必要的内容,然后还需要执行第二个下拉选项,该选项会改变显示的内容。

最佳答案

我测试了下面的代码,它似乎表现得如你所愿。我确实对结构进行了一些看似重大的更改,但我这样做是为了使其更易于阅读和维护。我认为我的编辑是不言自明的。

我还冒昧地假设这是一个 Worksheet_Change事件,即使您没有明确说明。

Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Target.Address

    Case Is = "$B$14"

        Select Case Right(Left(Target.Value, 8), 1)

            Case Is = 1 'Option 1

                Me.Rows("16:17").EntireRow.Hidden = False

            Case Is = 2 'Option 2

                Me.Rows("15").EntireRow.Hidden = False
                Me.Rows("16:17").EntireRow.Hidden = True
                Me.Rows("19:35").EntireRow.Hidden = True
                Me.Rows("36").EntireRow.Hidden = False
                Me.Rows("37:55").EntireRow.Hidden = True

            Case Is = 3 'Option 3

                Me.Rows("15:36").EntireRow.Hidden = True
                Me.Rows("39:55").EntireRow.Hidden = False

            Case Else 

                Me.Rows("15:55").EntireRow.Hidden = True

        End Select


    Case Is = "$B$17"

        Me.Range("B19:B35").EntireRow.Hidden = Not (Target.Value = "No")

End Select

End Sub

这是确保在打开工作簿时隐藏所有行的代码。
Private Sub Workbook_Open()

With Me.Worksheets("SheetName") ' change as needed
    .Rows("1:3").EntireRow.Hidden = True
    .Rows("15:55").EntireRow.Hidden = True
End With

End Sub

关于VBA Excel双如果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38228979/

相关文章:

vba - 范围对象 - 为什么有时我不能使用工作表

vba - 强制忽略从ADODB到Excel VBA的错误

PHP与Excel计算差异

vba - 使用 VBA 条件格式化数据透视表

java - 带有 "?"运算符的 if 语句并中断 java

mysql - 对尚未使用的项目求和

vba - 使用 Long 对变量行求和 VBA

vba - 在没有数据源的情况下创建多个excel图表的平均值

excel - PowerPoint VBA 更改图表中所选项目的字体颜色

Javascript if语句和&&运算符的区别