[英]Trying to hide sheets based on cell value for a range of cells to a range of sheets
我有一本工作簿,在工作表方面變得非常緊湊。 我不會一直使用它們,所以我想根據我正在做的事情隱藏未使用的那些。
我有一個主索引,其中有一列具有 G2:G30 的值范圍,以指示是否顯示工作表。 我有一系列的工作表,這些工作表的編號范圍低於從 1、2、3、..... 到 26 的范圍。我有一個簡單的 VBA 解決方案,它將顯示“Y”的單個 G2 以顯示或顯示否則隱藏。 我對這將如何迭代這兩個范圍以匹配事物的線索為零。 它們是增量的。
Private Sub Worksheet_Change(ByVal Target As Range)
If [G2] = "Y" Then
Sheets("1").Visible = True
Else
Sheets("1").Visible = False
End If
End Sub
我真的需要它來遍歷范圍以指示工作表中的工作表。
我想建議您對您的要求進行一些更改。 如果在單元格 H2:H30 中添加工作表名稱,則可以執行以下操作:
Dim SheetRef As Range
Dim TargetSheet As Worksheet
For Each SheetRef In Range("G2:G30")
Set TargetSheet = ThisWorkbook.Worksheets(SheetRef.Offset(0, 1).Value)
TargetSheet.Visible = (UCase(SheetRef.Value) = "Y")
Next
這將從 G2、G3 等右側的單元格中讀取工作表的名稱,並使用它來控制可見性。
如果您不這樣做,您將不得不找到另一種方法來了解哪個切換指的是哪個工作表。
您可以嘗試類似於:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Cells(2, 7), Cells(30, 7))) Is Nothing Then Exit Sub
Select Case UCase(Target.Value)
Case "Y"
Sheets(Target.Row).Visible = True
Case "N"
Sheets(Target.Row).Visible = False
End Select
End Sub
這將完全基於您的目標行
如果您在相鄰單元格中有工作表的名稱,您可以嘗試:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(Cells(2, 7), Cells(30, 7))) Is Nothing Then Exit Sub
Select Case UCase(Target.Value)
Case "Y"
Sheets(Cells(Target.Row,Target.Column-1).Value).Visible = True
Case "N"
Sheets(Cells(Target.Row,Target.Column-1).Value).Visible = False
End Select
End Sub
用 4 張紙進行測試,Sheet1(又名 sheet(1))到 sheet4(又名 sheet(4))。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.