Show/Hide 每个下拉选择的行数

Show/Hide Rows Per Dropdown Selection

我在网上找到了一个代码示例,我已根据我在 Excel 文件的下拉列表中选择的选项来调整显示或隐藏特定行。

无论我怎么尝试,宏都不起作用。

我的代码如下(附上问题 2 (2a - 2d) 下不是 showing/hiding 的行的屏幕截图)

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$F" 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 语句。试试这个:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$F" 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 = " "

缺少 End If。我假设需要测试目标单元格 (F13) 的值的值。如果值为 "Yes",它应该取消隐藏行 14:17,如果它是 " "(空格键)它应该隐藏它们,如果它是 "No" 也应该隐藏它们。其他值不会影响行的 hiding/unhiding。 在 End Sub 之前应该有第二个 End If,这样上面的所有 if 语句都包含在地址检查中。

另请注意,此代码应放在工作sheet 本身中,因为您要挂接到 Worksheet_Change 事件。

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

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F" 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

其他备注:

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