2015-04-07 53 views
0

我想知道如果任何人有这个任何想法,我觉得有些事情是会在我的头上,因为我相信这应该工作...自动隐藏行 - Excel的VBA

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

我已经定义行22:52作为'RLHotel',行53:85作为'RLHostel'和行86: 115作为'RLCabin'。本质上,我试图让用户选择他们试图填写房间列表的哪种类型的房产。

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

我使用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 

目前,如果我选择“酒店” ,只有'小屋'行隐藏。如果我选择'旅馆',所有行都显示。如果我选择'小屋',旅馆和旅馆行就会隐藏。

任何人有任何想法?将不胜感激,一直在寻找这永远!谢谢!

回答

2

试试这个,我认为你是试图通过对两个非连续的范围(例如,Range("RLHotel", "RLHostel"),只需翻动的布尔表达式运算符<>正是如此设置Hidden属性为每种类型的物业经营得太多它:

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 
+0

即将发布相同的解决方案。 – L42

+0

啊哈谢谢哈哈,我不敢相信我一直盯着那么久,没看见。 – arbitel

+0

快速的问题,不知道这是一个简单的修复。使用上面的固定脚本,Cell A11现在不是DV下拉菜单,但链接到不同工作表上的DV下拉菜单。当我在A11指向的下拉菜单中更改选择时,它不会自动隐藏/显示范围(RLHotel,RlHostel,RLCabin)。我试过添加Application.Volatile,但没有修复。有任何想法吗? – arbitel

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