2015-04-07 55 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