尝试根据一系列单元格的单元格值将工作表隐藏到一系列工作表
Trying to hide sheets based on cell value for a range of cells to a range of sheets
我有一本工作簿,涉及到工作sheet时,它变得非常紧凑。我不会一直使用所有这些,所以我想根据我的工作暂时隐藏未使用的。
我有一个主索引,其中有一列的值范围为 G2:G30,以指示是否显示 sheet。
我有一系列 sheet 已编号以供参考,低于从 1,2,3,..... 到 26 的范围。
我有一个简单的 VBA 解决方案,它将显示 "Y" 的单个 G2 以显示或隐藏。我对这将如何遍历这 2 个范围以匹配事物一无所知。它们是增量的。
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
我真的需要这个来遍历范围以指示工作中的 sheetssheet。
我想对您的请求提出一些修改建议。如果您在单元格 H2:H30 中添加 sheet 名称,那么您可以这样做:
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 等右侧的单元格中读取 sheet 的名称,并使用它来控制可见性。
如果你不这样做,你将不得不找到另一种方法来了解什么切换指的是什么 sheet。
您可以尝试类似于:
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
这将完全基于您的目标行
如果相邻单元格中有一个 sheet 的名称,您可以尝试:
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 sheets,Sheet1(又名 sheets(1))到 sheet4(又名 sheets(4))。
我有一本工作簿,涉及到工作sheet时,它变得非常紧凑。我不会一直使用所有这些,所以我想根据我的工作暂时隐藏未使用的。
我有一个主索引,其中有一列的值范围为 G2:G30,以指示是否显示 sheet。 我有一系列 sheet 已编号以供参考,低于从 1,2,3,..... 到 26 的范围。 我有一个简单的 VBA 解决方案,它将显示 "Y" 的单个 G2 以显示或隐藏。我对这将如何遍历这 2 个范围以匹配事物一无所知。它们是增量的。
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
我真的需要这个来遍历范围以指示工作中的 sheetssheet。
我想对您的请求提出一些修改建议。如果您在单元格 H2:H30 中添加 sheet 名称,那么您可以这样做:
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 等右侧的单元格中读取 sheet 的名称,并使用它来控制可见性。
如果你不这样做,你将不得不找到另一种方法来了解什么切换指的是什么 sheet。
您可以尝试类似于:
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
这将完全基于您的目标行
如果相邻单元格中有一个 sheet 的名称,您可以尝试:
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 sheets,Sheet1(又名 sheets(1))到 sheet4(又名 sheets(4))。