【问题标题】:Trying to hide sheets based on cell value for a range of cells to a range of sheets尝试根据单元格范围的单元格值隐藏工作表到工作表范围
【发布时间】:2020-01-24 19:20:14
【问题描述】:

我有一本工作簿,在工作表方面变得非常紧凑。我不会一直使用它们,所以我想根据我正在做的事情隐藏未使用的那些。

我有一个主索引,其中有一列包含 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

我真的需要它来遍历范围以指示工作表中的工作表。

【问题讨论】:

  • 这应该如何工作?如果 G3="Y" 那么 sheet("2") 是可见的等等?
  • G 是您的是/否,但工作表名称...是 F 中相邻的名称还是什么?您的更改事件可以引用列(“G”)的特定目标相交,但工作表引用可以是sheets(cells(activecell.row,activecell.column-1).value).visible = 。同样,如果第 2 行 = 第 1 页,那么您可以拥有 sheets(activecell.row-1).visible =

标签: excel vba loops cell show-hide


【解决方案1】:

我想建议对您的请求进行一些更改。如果在单元格 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 等右侧的单元格中读取工作表的名称,并使用它来控制可见性。
如果您不这样做,您将不得不找到另一种方法来了解哪个切换指的是哪个工作表。

【讨论】:

  • 我试过这个,但似乎对我不起作用,我不知道为什么。它会隐藏任何不是 Y 的东西吗?给我一个编译错误:For Each SheetRef 行的外部过程无效。
  • 看起来这将是一个独立的子例程而不是更改事件,并且可以循环遍历范围内的所有单元格并根据列出的特定工作表名称进行评估。可以作为一个按钮工作,它基于 True/False 场景的可见性,值为“Y”
  • @Cyril - 我同意。把它放在原来的 Worksheet_Change 中会有风险
  • @Sam 可能希望在您的 sheetref.value 周围添加 ucase() 以确保“y”和“Y”被视为相似。
  • Fanctioning ..... 这需要一些关于偏移的操作。结果需要在最后添加一行,1,1 作为我的值,但根据需要工作并添加案例只是为了更好地衡量。谢谢大家。
【解决方案2】:

你可以尝试类似:

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))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多