您可以使用類似Worksheets("sheet_to_hide").Visible = xlSheetHidden
隱藏薄片,Worksheets("sheet_to_unhide").Visible = xlSheetVisible
再次取消隱藏它。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim HideIt As Boolean
HideIt = True
For Each cell In Range("$A$30:$A$38")
If cell.Value = "Descriptor 1" Or _
cell.Value = "Descriptor 2" Then
HideIt = False
Exit For
End If
Next Cell
If HideIt Then
Columns("B:F").Hidden = True
Worksheets("Sheet1").Visible = xlSheetHidden
Worksheets("Sheet2").Visible = xlSheetHidden
Else
Columns("B:F").Hidden = False
Worksheets("Sheet1").Visible = xlSheetVisible
Worksheets("Sheet2").Visible = xlSheetVisible
End If
End Sub
如果工作表被隱藏/可見取決於他們的工作表名稱是否出現在你的範圍內,那麼我會建議作以下修改:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Dim HideIt As Boolean
'Don't do anything if there was no change to A30:A38
If Intersect(Target, Range("$A$30:$A$38")) Is Nothing Then Exit Sub
HideIt = True
For Each cell In Range("$A$30:$A$38")
If cell.Value = "Descriptor 1" Or _
cell.Value = "Descriptor 2" Then
HideIt = False
Exit For
End If
Next cell
Columns("B:F").Hidden = HideIt
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> ActiveSheet.Name Then
'See if sheet name exists in A30:A38
'Hide the sheet if doesn't, make it visible if it does
ws.Visible = Not IsError(Application.Match(ws.Name, Range("$A$30:$A$38"), 0))
End If
Next
End Sub
感謝您的快速回復!我會給它一個鏡頭,讓你知道它是如何運作的! –
好的。所以我放棄了。它沒有像我所希望的那樣工作。問題在於我的解釋。我有22張紙,每張在9個單獨的下拉框中的數據驗證列表中都有對應的名稱。我不僅需要根據描述符1和描述符2來隱藏列,還要根據9個下拉列表中的獨立選項隱藏/取消隱藏22個描述符的表單,以隱藏列。如果獨立圖紙名稱不在下拉列表中,則需要隱藏獨立圖紙。 –
@il_Paco如果A30:A38中的任何一個是「描述符1」或「描述符2」,不是100%確定我理解,所以請耐心等待 - 您希望在活動工作表中顯示這些列?您還希望隱藏活動工作表上的任何A30:A38單元格中未顯示其名稱的任何工作表(除活動工作表之外?),或者如果工作表名稱確實出現在這些單元格中,則可以使工作表可見? – YowE3K