如果列中的值为否 (50+Columns/Sheets) 使用循环隐藏多个工作表
Hide Multiple Sheets if Value in Column is No (50+Columns/Sheets) Using Loop
我有一个母版 sheet (Sheet 1),其中包含 50 多行特定项目。我有一个 sheet 对应于每个项目并这样命名(即项目 1 = "Clearing" 所以 sheet 2 被命名为 "Clearing")。我在 D 列中的每个项目都有一个下拉菜单,显示 "Yes" 或 "No"。
我目前有一个隐藏 Sheet 的基本代码,它基于我的 "Column D" 50 多行下拉菜单 = "No"(即第 1 项标记为 "No" 所以 sheet 2 被隐藏了)。
Private Sub Worksheet_Change(ByVal Target As Range)
If [D2] = "Yes" Then
Sheets("Clearing").Visible = True
Else
Sheets("Clearing").Visible = False
End If
If [D3] = "Yes" Then
Sheets("Grubbing").Visible = True
Else
Sheets("Grubbing").Visible = False
End If
End Sub
我希望能够 运行 通过使用一系列单元格 D2:D50+ 来循环所有 50 多个项目,而不必输入每个 sheet 名称以上我都做过。我无法通过查看其他示例来弄清楚如何管理它。
非常感谢任何帮助。
如果您的数据设置为 D 列旁边的 sheet 名称(或任何地方,只需调整脚本),您可以直接循环。
Sub hide_Sheets()
Dim mainWS As Worksheet
Dim rng As Range
Set mainWS = ThisWorkbook.Sheets("Sheet1")
Set rng = mainWS.Range("C2:C5") ' Change range as needed
Dim cel As Range
For Each cel In rng
If cel.Offset(0, 1).Value = "Yes" Then
ThisWorkbook.Sheets(cel.Value).Visible = True
Else
ThisWorkbook.Sheets(cel.Value).Visible = False
End If
Next cel
End Sub
使用您开始的 Worksheet_Change
活动:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(Range("D2"), Range("D2").End(xlDown))
If Not Intersect(Target, rng) Is Nothing Then
If Target.Count = 1 Then
On Error GoTo ErrorHandler
If Target = "Yes" Then
Sheets(Target.Offset(, -1).Value).Visible = True
Else
Sheets(Target.Offset(, -1).Value).Visible = False
End If
End If
End If
Exit Sub
ErrorHandler:
MsgBox "The sheet '" & Target.Offset(, -1) & "' does not exist!"
End Sub
我有一个母版 sheet (Sheet 1),其中包含 50 多行特定项目。我有一个 sheet 对应于每个项目并这样命名(即项目 1 = "Clearing" 所以 sheet 2 被命名为 "Clearing")。我在 D 列中的每个项目都有一个下拉菜单,显示 "Yes" 或 "No"。
我目前有一个隐藏 Sheet 的基本代码,它基于我的 "Column D" 50 多行下拉菜单 = "No"(即第 1 项标记为 "No" 所以 sheet 2 被隐藏了)。
Private Sub Worksheet_Change(ByVal Target As Range)
If [D2] = "Yes" Then
Sheets("Clearing").Visible = True
Else
Sheets("Clearing").Visible = False
End If
If [D3] = "Yes" Then
Sheets("Grubbing").Visible = True
Else
Sheets("Grubbing").Visible = False
End If
End Sub
我希望能够 运行 通过使用一系列单元格 D2:D50+ 来循环所有 50 多个项目,而不必输入每个 sheet 名称以上我都做过。我无法通过查看其他示例来弄清楚如何管理它。
非常感谢任何帮助。
如果您的数据设置为 D 列旁边的 sheet 名称(或任何地方,只需调整脚本),您可以直接循环。
Sub hide_Sheets()
Dim mainWS As Worksheet
Dim rng As Range
Set mainWS = ThisWorkbook.Sheets("Sheet1")
Set rng = mainWS.Range("C2:C5") ' Change range as needed
Dim cel As Range
For Each cel In rng
If cel.Offset(0, 1).Value = "Yes" Then
ThisWorkbook.Sheets(cel.Value).Visible = True
Else
ThisWorkbook.Sheets(cel.Value).Visible = False
End If
Next cel
End Sub
使用您开始的 Worksheet_Change
活动:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
Set rng = Range(Range("D2"), Range("D2").End(xlDown))
If Not Intersect(Target, rng) Is Nothing Then
If Target.Count = 1 Then
On Error GoTo ErrorHandler
If Target = "Yes" Then
Sheets(Target.Offset(, -1).Value).Visible = True
Else
Sheets(Target.Offset(, -1).Value).Visible = False
End If
End If
End If
Exit Sub
ErrorHandler:
MsgBox "The sheet '" & Target.Offset(, -1) & "' does not exist!"
End Sub