VBA Excel Double If



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

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

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 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

最新更新