我在工作簿中有很多工作表。我有一个名为“JE”的主表单/“表单”,在该表单上有一些按钮和宏指向工作簿中的其他表单。但是,其目的是让其他用户而不是我自己使用工作簿。所以,我只想在任何给定时间看到正在使用的工作表。在任何时候我都不希望用户看到超过1张纸。用户可以主要通过单击按钮和选择表单中的某些单元格来导航工作簿,这些单元格将允许它们在整个工作簿中导航。我已经通过在“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错误。这些值仍然填充主表,但它不再按照我的意愿导航回主表。
如果有人知道我能做出的解决方案或模式,我真的很感激。
答案 0 :(得分:4)
代码很好。只需将其放入VBA项目的工作簿部分:
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
一般情况下,当我启动Excel应用程序时,我总是使用类似的东西。我使用Arrays
和Visible
工作表定义了两个Invisible
,然后迭代它们,使它们可见或不可见。像这样:
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
。
答案 1 :(得分:1)
应为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
答案 2 :(得分:0)
Sub HideInactive()
Set theActiveSheet = ActiveSheet
For Each Sheet In ThisWorkbook.Worksheets
If Sheet.Index <> theActiveSheet.Index Then Sheet.Visible = False
Next
End Sub
我测试了代码。谢谢你的阅读。