0

我想在 excel 中创建一个宏,我可以在任何工作表上重复使用它来关闭工作表并将用户引导回“主页”工作表。

我在想这样的事情?但我在第 3 行遇到错误。

    Sub CloseCurrentTab()

    ' CloseCurrentTab Macro

    Dim strCurrentSheet As String
    strCurrentSheet = ActiveSheet.Name
    Sheets("strCurrentSheet").Visible = False
    Sheets("Home").Activate

    End Sub
4

2 回答 2

2

我从您的问题中假设您想要创建一种隐藏除活动工作表之外的所有内容的导航。

如果这是您要查找的内容,则需要以下代码:

在一个模块中:

Global Const cStrHomeSheet As String = "Home"

公共子 subGotoSheet(strSheetName 作为字符串)
    On Error GoTo ErrorHandler
    将 wsActive 调暗为工作表

    Application.ScreenUpdating = False

    设置 wsActive = ActiveSheet

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

    wsActive.Visible = xlSheetVeryHidden

    Application.ScreenUpdating = True

    退出子

错误处理程序:
    MsgBox "找不到工作表" & strSheetName
结束子

公共子 subGotoHomeSheet()
    subGotoSheet cStrHomeSheet
结束子

公共子 subGotoSheetFromCaller()
    subGotoSheet Application.Caller
结束子

公共子 subHideAll()
    暗淡为工作表

    Application.ScreenUpdating = False
    ActiveWindow.DisplayWorkbookTabs = False

    Sheets(cStrHomeSheet).Visible = xlSheetVisible
    表格(cStrHomeSheet)。激活
    对于表格中的每个 ws
        If ws.Name cStrHomeSheet Then _
            ws.Visible = xlSheetVeryHidden
    下一个

    Application.ScreenUpdating = True
结束子


公共子 subShowAll()
    暗淡为工作表

    Application.ScreenUpdating = False
    ActiveWindow.DisplayWorkbookTabs = True

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

    Application.ScreenUpdating = True
结束子    

此外,将以下代码放入ThisModule模块中:

私有子 Workbook_Open()
    隐藏全部
结束子

解释及用法:

模块中的代码ThisWorkbook将隐藏除了加载工作簿的主工作表之外的所有内容。(为了隐藏您正在切换工作表的事实,它还隐藏了窗口左下方的工作表标签栏)。

通过调用 asubGotoSheet "DestinationSheet"您现在可以“激活”,即取消隐藏目标工作表 - 旧工作表将被隐藏。为了让您的生活更轻松,您还可以调用subGotoHomeSheet- 更重要的是,使用subGotoSheetFromCaller. 如果您将它与按钮(或任何形状)结合使用,这真的很整洁:如果您将按钮或形状插入工作表,请将此宏分配给它。您现在只需要根据您的目标表命名项目(使用公式字段左侧的名称框) - 该按钮将自动将您带到所需的表!

最后但并非最不重要的一点是,我假设您还需要一个“开发人员模式”,您可以在其中查看和编辑所有工作表。为此,运行subShowAll,返回,运行subHideAll。我建议您为这两个宏分配快捷键,这样您就可以在开发人员模式和用户模式之间快速切换。

于 2013-01-14T21:34:09.753 回答
0

要让它编译将第 3 行更改为:

Sheets(strCurrentSheet).Visible = False

然而,这只是隐藏工作表;它不会删除它。要(永久)删除它,请使用:

Sheets(strCurrentSheet).Delete
于 2013-01-14T19:21:51.530 回答