VBA隐藏工作簿中未使用的所有工作表

我在工作簿中有很多工作表。 我有一个名为“JE”的主表/“表单”,在表单上有button和macros,这些button和macros会导致工作簿中的其他表单。 但是,其目的是让其他用户,而不是我自己,使用工作簿。 所以,我只想在任何给定时间使用的表格都是可见的。 在任何时候,我都不希望用户看到多于一张纸。 用户可以主要通过单击button和选定工作表中的某些单元格来导航工作簿,这将允许他们浏览整个工作簿。 我已经通过向“ThisWorkbook”模块中添加代码尝试了这一点,但似乎并没有按照我的意愿工作。 当我导航到一张纸,然后回到另一张纸上时,当我想让他们隐藏时,一些纸张仍然可见,所以我不确定为了得到我想要的结果,我可以对其进行哪些其他修改。 如果任何人可以提出任何修改或改变,我可以做到这一点,我真的很感激。

更新 :我已经将此代码添加到我的“ThisWorkbook”对象:

Option Explicit Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim MySh As Worksheet For Each MySh In ThisWorkbook.Worksheets If MySh.Name <> Sh.Name Then MySh.Visible = 0 Next MySh End Sub 

但是,当我去双击通常填充在我的主表(“JE”)单元格中的值,我得到一个运行时1004错误。 值仍然填充主表单,但它不再导航回到主表,我想。

如果有人知道我可以制作一个解决scheme或一个国防部,我真的很感激。

它应该是Workbook_SheetActivate

 Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim MySh As Worksheet For Each MySh In ThisWorkbook.Worksheets If MySh.Name <> Sh.Name Then MySh.Visible = 0 'zero - false, 1 - true, 2 - very hidden Next MySh End Sub 

代码很好。 简单地把它放在VBA项目的Workbook部分:

 Option Explicit Private Sub Workbook_Open() Dim MySh As Worksheet For Each MySh In ThisWorkbook.Worksheets If MySh.Name = ActiveSheet.Name Then MySh.Visible = xlSheetHidden Next MySh End Sub 

ThisWorkbook部分在这里: 在这里输入图像描述

一般来说,当我启动Excel应用程序时,我总是使用类似的东西。 我用VisibleInvisible工作表定义了两个Arrays ,我遍历它们,使它们可见或不可见。 喜欢这个:

 Option Explicit Public Sub HideNeeded() Dim varSheet As Variant Dim arrVisibleSheets As Variant Dim arrHiddenSheets As Variant arrVisibleSheets = Array(Sheet1) arrHiddenSheets = Array(Sheet2, Sheet3) For Each varSheet In arrVisibleSheets varSheet.Visible = xlSheetVisible Next varSheet For Each varSheet In arrHiddenSheets varSheet.Visible = xlSheetVeryHidden Next varSheet End Sub 

xlSheetVeryHidden使得它只能从VB编辑器中取消隐藏。 否则,你需要xlSheetHidden

 Sub HideInactive() Set theActiveSheet = ActiveSheet For Each Sheet In ThisWorkbook.Worksheets If Sheet.Index <> theActiveSheet.Index Then Sheet.Visible = False Next End Sub 

我testing了代码。 感谢您的阅读。