如何创建宏来根据下拉列表显示/隐藏行?

如何创建宏来根据下拉列表显示/隐藏行?

尝试遵循之前帖子中的一些建议(根据单元格值隐藏或取消隐藏行的 VBA 代码) 创建一个宏,这样我就可以根据下拉列表显示/隐藏某些行。我几乎已经拥有它了,但至少我的公式中有 1 部分不起作用。以下是我使用的:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("D13").Value = "Unlimited" Then
         Rows("77").EntireRow.Hidden = True
    ElseIf Range("D13").Value = "Unlimited" Then
        Rows("78:82").EntireRow.Hidden = False
    End If
    If Range("D13").Value = "Limited" Then
        Rows("78:82").EntireRow.Hidden = True
    ElseIf Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = False
    End If
    If Range("D13").Value = "Select one" Then
        Rows("78:82").EntireRow.Hidden = False
    ElseIf Range("D13").Value = "Select one" Then
        Rows("77").EntireRow.Hidden = False
    End If
End Sub

使用此公式,我希望根据用户的选择来影响下拉列表选择下方显示的行。带有下拉列表的单元格是 D13。它有 3 个可能的值:有限、无限和选择一个。以下是我的目标:

  • 选择一项:77-82 行均可见
  • 限制:第 77 行可见,第 78-82 行隐藏
  • 无限制:第 77 行隐藏,第 78-82 行可见

上面的代码似乎有点不一致:不确定我为每个下拉菜单设置的功能是否意外地相互重叠?目前,只有当您从选择一个 --> 有限/无限制更改时,我的功能才能按预期工作,但如果您随后更改为另一个选择,我无法让它们继续工作。

任何人的帮助都将不胜感激!!现在我有点为这件事抓狂了哈哈。提前谢谢 :)

答案1

下面代码的第一行处理 Worksheet_Change。它确保只有一个单元格被更改,并且该单元格是 D13。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("D13")) Is Nothing Or Target.Cells.Count > 1 Then
        Exit Sub

    ElseIf Range("D13").Value = "Select One" Then
        Rows("77:82").EntireRow.Hidden = False

    ElseIf Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = False
        Rows("78:82").EntireRow.Hidden = True    

    ElseIf Range("D13").Value = "Unlimited" Then
        Rows("77").EntireRow.Hidden = True
        Rows("78:82").EntireRow.Hidden = False   

    End If

End Sub

请注意,上面的代码必须复制到工作表您的下拉菜单所在的任何工作表的对象。

在此处输入图片描述

我希望这个帮助能祝你好运。

答案2

您可以使用这个简单的宏来隐藏/取消隐藏特定的行。

Private Sub Hide_Unhide()

  If Range("D13").Value = "Select One" Then
       Rows("77:82").EntireRow.Hidden = false
  End if

  If Range("D13").Value = "Limited" Then
        Rows("77").EntireRow.Hidden = false
        Rows("78:82").EntireRow.Hidden = true    

  ElseIf Range("D13").Value = "Unlimited" Then
        Rows("77").EntireRow.Hidden = true
        Rows("78:82").EntireRow.Hidden = False   

  End If

End Sub

相关内容