根据下拉select显示/隐藏行

这是我第一次使用macros。 我在B2中创build了一个“是”和“否”选项的下拉菜单。

  • 如果用户select“是”,则第10行显示/第11行隐藏
  • 如果用户select“否”,行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中创build了一个新的模块,并放在那里。 我将excel保存为启用macros的模板 ,但是当我更改下拉列表时,没有任何反应。

谢谢你的帮助!

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

与“否”选项类似

做自己的一个巨大的好处,养成在每个你编写的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