Excel 根据下拉选择显示/隐藏行

Excel 根据下拉选择显示/隐藏行,excel,vba,Excel,Vba,这是我第一次使用宏。 我在B2中创建了一个下拉列表,带有“是”和“否”选项 如果用户选择“是”,则第10行显示/第11行隐藏 如果用户选择“否”,则第11行显示/第10行隐藏 我使用了以下代码: Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then If Range("B2") = Yes Then ActiveSheet.Rows("10:10").EntireRow.

这是我第一次使用宏。 我在B2中创建了一个下拉列表,带有“是”和“否”选项

  • 如果用户选择“是”,则第10行显示/第11行隐藏
  • 如果用户选择“否”,则第11行显示/第10行隐藏
我使用了以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$2" Then
If Range("B2") = Yes Then
    ActiveSheet.Rows("10:10").EntireRow.Hidden = False
    ActiveSheet.Rows("11:11").EntireRow.Hidden = True
ElseIf Range("B2") = No Then
    ActiveSheet.Rows("10:10").EntireRow.Hidden = True
    ActiveSheet.Rows("11:11").EntireRow.Hidden = False
End If
End If
End Sub
我在表1中创建了一个新模块,并将其放在那里。我将excel保存为启用宏的Tamplate,但是更改下拉列表时不会发生任何事情

谢谢你的帮助

If Range("B2") = "Yes" Then

同样,对于“否”选项,请帮自己一个大忙,养成在所编写的每个VBA代码模块的顶部编写
选项Explicit
的习惯

我已经添加了注释,并解释了您需要的修改

'this requires you to dimension all variables
'when you used '= yes' VBA thought you were saying
'the same as, = aVariable
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$2" Then
        If Range("B2").Value = "Yes" Then
            'You can reference the row directly on the same sheet
            'and do not need ActiveSheet
            Rows("10:10").EntireRow.Hidden = False
            Rows("11:11").EntireRow.Hidden = True
        ElseIf Range("B2").Value = "No" Then
            Rows("10:10").EntireRow.Hidden = True
            Rows("11:11").EntireRow.Hidden = False
        End If
    End If
End Sub

还要注意,这只是使用“是”-使用“是”或“是”会导致问题。如果您希望在将来避免这些情况,可以按如下方式使用
UCase
方法:

        If UCase(Range("B2").Value) = "YES" Then

谢谢,我刚想出来:)。乔西,有没有办法隐藏一行给它指定变量名?我注意到,如果我有一个宏脚本插入一个新行,那么
行(“10:10”)
不再是正确的行-因为所有内容都已下移。是的,您可以在第10行命名一个单元格,然后使用
范围(“范围名称”).EntireRow.Hidden=False
作为InstanceHanks!我想我差不多明白了。现在,我得到一个运行时错误1004<代码>对象“\u工作表”的“范围”方法失败。下面是我使用的代码:分配名称的代码应该指定行所属的工作表——我假设它与更改事件代码所在的工作表相同