创建一个可重用的宏来关闭excel中的活动工作表?

时间:2013-01-14 19:19:42

标签: excel excel-vba vba

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

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

    Sub CloseCurrentTab()

    ' CloseCurrentTab Macro

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

    End Sub

2 个答案:

答案 0 :(得分:2)

我假设您想要创建一种隐藏除活动工作表以外的所有导航的导航。

如果这是您正在寻找的,您将需要类似以下代码的内容:

在模块中:

Global Const cStrHomeSheet As String = "Home"

Public Sub subGotoSheet(strSheetName As String)
    On Error GoTo ErrorHandler
    Dim wsActive As Worksheet

    Application.ScreenUpdating = False

    Set wsActive = ActiveSheet

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

    wsActive.Visible = xlSheetVeryHidden

    Application.ScreenUpdating = True

    Exit Sub

ErrorHandler:
    MsgBox "Cannot find worksheet " & strSheetName
End Sub

Public Sub subGotoHomeSheet()
    subGotoSheet cStrHomeSheet
End Sub

Public Sub subGotoSheetFromCaller()
    subGotoSheet Application.Caller
End Sub

Public Sub subHideAll()
    Dim ws As Worksheet

    Application.ScreenUpdating = False
    ActiveWindow.DisplayWorkbookTabs = False

    Sheets(cStrHomeSheet).Visible = xlSheetVisible
    Sheets(cStrHomeSheet).Activate
    For Each ws In Sheets
        If ws.Name  cStrHomeSheet Then _
            ws.Visible = xlSheetVeryHidden
    Next

    Application.ScreenUpdating = True
End Sub


Public Sub subShowAll()
    Dim ws As Worksheet

    Application.ScreenUpdating = False
    ActiveWindow.DisplayWorkbookTabs = True

    For Each ws In Sheets
        ws.Visible = xlSheetVisible
    Next

    Application.ScreenUpdating = True
End Sub    

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

Private Sub Workbook_Open()
    subHideAll
End Sub

解释&用法:

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

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

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

答案 1 :(得分:0)

要将编译更改为第3行:

Sheets(strCurrentSheet).Visible = False

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

Sheets(strCurrentSheet).Delete