excel - 选择“主”工作表时自动隐藏/取消隐藏“子”工作表
问题描述
问题
我正在运行一个宏,它会根据用户输入创建几个新的工作表;至少一个“主”工作表和几个“子”工作表。这些将具有“Group 1 Master”、“Group 1 Sub 1”、“Group 2 Sub 2”、“Group 2 Sub 3”......“Group n Master”、“Group n 子 1"......
我想找到一种方法来隐藏子工作表,直到它们的主工作表被选择/激活,此时它们应该变得可见,然后当没有选择主工作表时,它们应该再次被隐藏。
方法
我找到了指示如何手动实现这一点的来源,方法是在给定的工作表中插入类似下面的子内容,但是我的工作表是由宏生成的,我不想手动完成并将其添加到所有他们。
Private Sub Worksheet_Activate()
For Each SubSheet in SubSheets
SubSheet.Visible = False
Next SubSheet
End Sub
问题
除了选择它们的主工作表之外,如何隐藏所有子工作表?
谢谢
解决方案
想象一下,这是所有工作表可见时的样子:
然后这是隐藏所有子表的外观:
这就是它与自动隐藏/显示活动主工作表的子工作表的工作方式:
我使用了以下代码:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'find master left of selected sheet
Dim ActiveMaster As Object
Dim iSht As Long
For iSht = Sh.Index To 1 Step -1 'loop backwards until a master is found
If InStr(1, ThisWorkbook.Sheets(iSht).Name, "Master") > 0 Then
Set ActiveMaster = ThisWorkbook.Sheets(iSht)
Exit For
End If
Next iSht
If ActiveMaster Is Nothing Then
'no master sheet left of current sheet found
MsgBox "No 'Master' sheet found.", vbCritical
Exit Sub
End If
'find last sub sheet
Dim LastSub As Object
For iSht = ActiveMaster.Index + 1 To ThisWorkbook.Sheets.Count
If InStr(1, ThisWorkbook.Sheets(iSht).Name, "Master") > 0 Then
Set LastSub = ThisWorkbook.Sheets(iSht - 1)
Exit For
End If
Next iSht
'if no last sub sheet was found it is the very last sheet
If LastSub Is Nothing Then
Set LastSub = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
End If
'hide all SUB-sheets left of master sheet and right of LastSub sheet
If ActiveMaster.Index > 1 Then
For iSht = 1 To ThisWorkbook.Sheets.Count
If iSht < ActiveMaster.Index Or iSht > LastSub.Index Then
If InStr(1, ThisWorkbook.Sheets(iSht).Name, "Master") = 0 Then
ThisWorkbook.Sheets(iSht).Visible = xlSheetHidden
End If
Else
ThisWorkbook.Sheets(iSht).Visible = xlSheetVisible
End If
Next iSht
End If
End Sub
Public Sub ShowAllSheets()
Dim iSht As Long
For iSht = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets(iSht).Visible = xlSheetVisible
Next iSht
End Sub
Public Sub HideAllSubSheets()
Dim iSht As Long
For iSht = 1 To ThisWorkbook.Sheets.Count
If InStr(1, ThisWorkbook.Sheets(iSht).Name, "Master") = 0 Then
ThisWorkbook.Sheets(iSht).Visible = xlSheetHidden
End If
Next iSht
End Sub
推荐阅读
- ios - xCode 安装错误 - 无法从 GoogleUtilities.framework 加载 info.plist
- ios - 如何使用 swift 将文件 Doc/pdf/excel 从 iphone 设备上传到后端?
- python - 如何分组并将操作聚合到多个列?
- r - 在 r 中解开数据框的最佳方法
- javascript - JavaScript Async/Await 逻辑表现为同步
- javascript - 在动画将它们从侧面引入之前,我有一个斜线。我该如何摆脱它?
- recursion - 将二进制值类型加一
- javascript - 如何转换这两种日期时间格式进行比较?
- python - Bootstrap 4 输入字段未向服务器发送值(python、flask、GAE)
- flutter - 为什么我们应该在 Flutter Bloc 中使用 Equatable?