我想在excel中创建一个宏,我可以在任何工作表上重复使用以关闭工作表并将用户引导回“主页”工作表。
我在考虑这样的事情?但我在第3行遇到错误。
Sub CloseCurrentTab()
' CloseCurrentTab Macro
Dim strCurrentSheet As String
strCurrentSheet = ActiveSheet.Name
Sheets("strCurrentSheet").Visible = False
Sheets("Home").Activate
End Sub
答案 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