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

标签 vba excel

我的工作簿中有很多工作表。我有一个名为“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 错误。这些值仍然填充主工作表,但它不再像我想要的那样导航回主工作表。

如果有人知道我可以制作的解决方案或模组,我将不胜感激。

最佳答案

代码很好。简单的把它放在 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 部分在这里:
enter image description here

一般来说,当我启动 Excel 应用程序时,我总是使用类似的东西。我定义了两个 ArraysVisibleInvisible工作表和我迭代它们,使它们可见或不可见。像这样:
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 .

关于VBA隐藏工作簿中未使用的所有工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306186/

相关文章:

sql-server - VBA 可以通过 SSL 证书连接到 SQL 服务器吗?

vba - 在保留自动筛选设置的同时清除单元格?

excel - 获取文本框的值到单元格

sql - Excel/DAX/Power Query : How to filter table to find records that fill within a 24 hour window from two dates

excel - 在 VBA (Excel) 中使用表单设计器将项目添加到列表框

c# - Excel 2010 64 位无法创建 .net 对象

sql - 使用 VBA 在 SQL 中插入德语日期格式

excel - 当命名 range1 中的所有值都等于 “N/A” VBA Application.WorksheetFunction 时,希望删除命名 range2

vba - 简单替换功能不适用于度数符号

ruby - Roo Gem 检查空工作表