基于DV下拉菜单的自动隐藏行 - Excel VBA

时间:2015-04-07 01:05:45

标签: excel vba

我想知道是否有人对此有任何想法,我觉得有些事情已经过去了,因为我相信这应该有用......

我在单元格A11上有一个数据验证下拉菜单,包含(选择属性,酒店,宿舍,小屋)

我已将第22:52行的名称定义为“RLHotel”,第53:85行为“RLHostel”,第86:115行为“RLCabin”。基本上我正试图让用户选择他们试图填写房屋清单的房产类型。

如果他们在下拉菜单中选择“酒店”,我希望Hostel / Cabin隐藏。如果他们'旅馆',我希望酒店/小屋隐藏等等。

我在VBA中用于此特定工作表的代码是:

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("A11")) Is Nothing Then
    With Range("$A$11")
        Range("RLHotel, RLCabin").EntireRow.Hidden = .Value = "Hostel"
        Range("RLHostel, RLCabin").EntireRow.Hidden = .Value = "Hotel"
        Range("RLHostel, RLHotel").EntireRow.Hidden = .Value = "Cabin"
    End With
End If


End Sub

目前,如果我选择“酒店”,则只会隐藏“小屋”行。如果我选择“旅馆”,则显示所有行。如果我选择'Cabin',那么宿舍和酒店的行就会隐藏起来。

有人有什么想法吗?非常感谢,一直在寻找这个!谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个,我认为你试图在两个不连续的范围上操作(例如,Range("RLHotel", "RLHostel")来过度思考它。只需将布尔表达式中的运算符翻转为<>并设置{因此,每种类型的财产的{1}}属性:

Hidden

如果A11链接(按公式)到另一个工作表上的单元格,则不使用Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("A11")) Is Nothing Then With Range("$A$11") Range("RLHotel").EntireRow.Hidden = .Value <> "Hotel" Range("RLHostel").EntireRow.Hidden = .Value <> "Hostel" Range("RLCabin").EntireRow.Hidden = .Value <> "Cabin" End With End If End Sub 事件而是使用_Change事件:

_Calculate

答案 1 :(得分:0)

这是关于答案的评论。这是最终解决方案,使其在每个选项卡上更新,以便我可以构建更多,它将自动填充。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal   Target As   Range)
Application.Volatile


With Sheet4.Range("$A$11")
    Sheet4.Range("RLHotel").EntireRow.Hidden = .Value <> "Hotel"
    Sheet4.Range("RLHostel").EntireRow.Hidden = .Value <> "Hostel"
    Sheet4.Range("RLCabin").EntireRow.Hidden = .Value <> "Cabin"
End With

With Sheet12.Range("$A$11")
    Sheet12.Range("RLHotel").EntireRow.Hidden = .Value <> "Hotel"
    Sheet12.Range("RLHostel").EntireRow.Hidden = .Value <> "Hostel"
    Sheet12.Range("RLCabin").EntireRow.Hidden = .Value <> "Cabin"
End With

End Sub