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

我想知道如果有人对此有任何想法,我觉得有什么东西正在我的脑海中,因为我相信这应该工作…

我有一个数据validation下拉菜单单元格A11包含(select属性,酒店,旅馆,小屋)

我将22:52行定义为“RLHotel”,53:85行定义为“RLHostel”,86:115行定义为“RLCabin”。 基本上,我试图给用户select他们试图填写房间列表的什么types的属性。

如果他们在下拉菜单中select“酒店”,我想要旅馆/小屋隐藏。 如果他们'旅馆',我想要酒店/小屋隐藏等。

我在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 

目前,如果我select“酒店”,只有“小屋”行隐藏。 如果我select“旅馆”,所有行都显示。 如果我select“小屋”,旅馆和旅馆行掩藏他们应该。

有人有主意吗? 将不胜感激,一直在寻找这个永远! 谢谢!

试试这个,我想你试图在两个不连续的范围(例如, Range("RLHotel", "RLHostel")上操作,只要在布尔expression式中将操作符翻转到<>并设置Hidden属性对于每种types的财产如此:

 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 

如果A11(通过公式)链接到另一个工作表上的单元格,则不使用_Change事件使用_Calculate事件:

 Private Sub Worksheet_Calculate() 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 Sub 

这是对答案的评论。 这是最终的解决scheme,使其在每个选项卡上更新,所以我可以build立更多,它会自动填充。

 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