簡體   English   中英

嘗試根據單元格范圍的單元格值隱藏工作表到工作表范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM