显示/隐藏行每下拉select

我在网上find代码,作为一个例子,我已经调整了显示或隐藏特定的行,这取决于我在Excel文件的下拉列表中select的select。

无论我尝试什么,macros都无法工作。

我的代码如下(还附加了问题2(2a – 2d)中不显示/隐藏的行的截图) Excel文件的屏幕截图

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$13" Then If Range("F13").Value = "Yes" Then Rows("14:17").EntireRow.Hidden = False End If If Range("F13").Value = "No" Then Rows("14:17").EntireRow.Hidden = True End If If Range("F13").Value = " " Then Rows("14:17").EntireRow.Hidden = True End If End Sub 

有一个End If失踪。 我假设目标单元格(F13)的值需要testing它的值。 如果值为“是”,则应取消隐藏行14:17,如果是“”(空格键)则应该隐藏它们,如果是“否”,则应该隐藏它们。 其他值不会影响行的隐藏/取消隐藏。 在End Sub之前应该有第二个End If ,这样上面的所有if语句都被包装在Address检查中。

还要注意,这个代码应该放在工作表本身中,因为你想挂钩到Worksheet_Change事件。

在工作表模块中试试这个:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$13" Then 'Check if the changed value is indeed in F13 If Target.Value = "Yes" Then ActiveSheet.Rows("14:17").EntireRow.Hidden = False 'Show the rows if the value is Yes ElseIf Target.Value = "No" Then ActiveSheet.Rows("14:17").EntireRow.Hidden = True 'Hide them when it's No ElseIf Target.Value = " " Then ActiveSheet.Rows("14:17").EntireRow.Hidden = True 'Or space End If End If End Sub 

其他评论:

  • 而不是ActiveSheet你也可以使用MeMe.Rows... )在这种情况下,他们可能也是这样做的。 但是,如果您从另一个工作表(例如重新计算的公式)更改工作表上的值, Me将引用更改的触发事件的工作表,而activeworksheet将影响当前活动的工作表。
  • 使用Target而不是再次引用Range。 目标是已经在内存中的范围对象。 因此,与再次访问工作表相比,执行速度会更快。

这是一个很好的示例,可以帮助您识别问题。 你错过了一个结束IF语句。 尝试这个:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$F$13" Then If Range("F13").Value = "Yes" Then Rows("14:17").EntireRow.Hidden = False End If If Range("F13").Value = "No" Then Rows("14:17").EntireRow.Hidden = True End If If Range("F13").Value = " " Then Rows("14:17").EntireRow.Hidden = True End If End If End Sub 

你也可以使用:

 If Range("F13").Value = "" 

代替

 If Range("F13").Value = " "