创build一个可重用的macros来closures在Excel中的活动工作表?

我想在Excel中创build一个macros,我可以在任何工作表上重新使用它来closures工作表并将用户引导回“主页”工作表。

我在想这样的事情? 但是我在第三行得到一个错误。

Sub CloseCurrentTab() ' CloseCurrentTab Macro Dim strCurrentSheet As String strCurrentSheet = ActiveSheet.Name Sheets("strCurrentSheet").Visible = False Sheets("Home").Activate End Sub 

我从你的问题中假设你想创build一种隐藏除活动表单之外的全部导航。

如果这是你正在寻找的,你需要像下面的代码:

在一个模块中:

全局常量cStrHomeSheet As String =“Home”

 Public Sub subGotoSheet(strSheetName As String)
    在错误转到ErrorHandler
    昏暗的wsActive作为工作表

     Application.ScreenUpdating = False

    设置wsActive = ActiveSheet

    表(strSheetName).Visible = xlSheetVisible
    表(strSheetName).Activate

     wsActive.Visible = xlSheetVeryHidden

     Application.ScreenUpdating = True

    退出小组

的ErrorHandler:
     MsgBox“找不到工作表”&strSheetName
结束小组

 Public Sub subGotoHomeSheet()
     subGotoSheet cStrHomeSheet
结束小组

 Public Sub subGotoSheetFromCaller()
     subGotoSheet Application.Caller
结束小组

 Public Sub subHideAll()
    昏暗的ws作为工作表

     Application.ScreenUpdating = False
     ActiveWindow.DisplayWorkbookTabs = False

    表(cStrHomeSheet).Visible = xlSheetVisible
    表(cStrHomeSheet).Activate
    对于每个ws在表中
        如果ws.Name cStrHomeSheet那么_
             ws.Visible = xlSheetVeryHidden
    下一个

     Application.ScreenUpdating = True
结束小组


 Public Sub subShowAll()
    昏暗的ws作为工作表

     Application.ScreenUpdating = False
     ActiveWindow.DisplayWorkbookTabs = True

    对于每个ws在表中
         ws.Visible = xlSheetVisible
    下一个

     Application.ScreenUpdating = True
结束小组    

另外,将下面的代码放在ThisModule模块中:

 Private Sub Workbook_Open()
     subHideAll
结束小组

说明和用法:

ThisWorkbook模块中的代码将隐藏除加载工作簿之外的所有工作表。 (要隐藏切换工作表的事实,它也会隐藏窗口左下方的工作表标签栏)。

通过调用subGotoSheet "DestinationSheet"您现在可以“激活”,即取消隐藏目标工作表 – 旧工作表将被隐藏。 为了让你的生活更轻松,你也可以调用subGotoHomeSheet – 更重要的是,使用subGotoSheetFromCaller 。 如果将它与button(或任何形状的事物)结合起来,这个实际上是非常整洁的:如果将一个button或形状插入到工作表中,则将该macros指定给它。 您现在只需要根据您的目标工作表命名该项目(使用公式字段左边的名称框) – 并且该button将自动将您指定到所需的工作表!

最后但并非最不重要的一点,我假设你还需要一个“开发人员模式”,在这个模式下你可以看到并编辑所有的表格。 为此,运行subShowAll ,返回,运行subHideAll 。 我build议你为两个macros分配快捷键,这样你就可以在开发者和用户模式之间快速切换。

为了让它编译更改第3行到:

 Sheets(strCurrentSheet).Visible = False 

但是,这只是隐藏表; 它不会删除它。 要删除它(永久)使用:

 Sheets(strCurrentSheet).Delete