显示/隐藏行,具体取决于下拉选择

时间:2013-06-05 15:23:38

标签: excel vba

这是我第一次使用Macros。 我在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

我在 Sheet1 中创建了一个新模块,并将其放在那里。我将excel保存为 Macro Enabled Tamplate ,但是当我更改下拉列表时没有任何反应。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

为自己做一个大忙,养成在你编写的VBA代码的每个模块顶部写Option 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

答案 1 :(得分:2)

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

和" No"类似。选项