【发布时间】:2016-06-09 07:14:41
【问题描述】:
我在 Excel 2013 中有一个用户窗体,可以在操作之前为用户清理 Excel 页面。公共模块具有以下 VBA 代码:
Sub ShowForm()
With ActiveWorkbook
.Worksheets("Sheet1").Activate
.Worksheets("Sheet2").Visible = False 'Hide didn't work
.Worksheets("Sheet3").Visible = False 'Hide didn't work
End With
UserForm1.Show
End Sub
如何隐藏工作表 2 和 3 并激活或使工作表 1 可见?代码应该模仿右键单击选项卡并选择“隐藏”。上面的代码抛出一个Run-time error '9': Subscript out of range。
【问题讨论】:
-
然后
ActiveWorkbook指向一个只有1 个(如果.Worksheets(2)...错误)或2 个(如果.Worksheets(3)...错误)工作表的工作簿。在即时窗口中查询?ActiveWorkbook.Name以了解您实际指向的工作簿。但最好的办法是使用With Workbooks("MyWorkbookName")并确保您正在处理想要的工作簿 -
我尝试使用
With Workbooks...End With并得到相同的Run-time error '9': Subscript out of range.。我还使用即时窗口来确定当前的?ActiveWorkbook.Name。我使用的是正确的 ActiveWorkbook。 -
我看到你编辑了,现在使用
.Worksheets("Sheet 2")(和类似的)。所以现在的重点是你的Workbooks("MyWorkbookName")是否真的有任何以"Sheet 1"(如果.Worksheets("Sheet 1")错误)或"Sheet 3"(如果.Worksheets("Sheet 3")错误)命名的工作表。哪一行出错了? -
@Andy 您说您使用的是 Excel 2013,您确定工作表名称是“工作表 1”吗?请检查确切的工作表名称。 2013 年的默认工作表名称是“Sheet1”,没有空格。
-
我只将工作表更改为“字符串”值,以消除对索引值的争论。如果我对工作表参数使用索引值,我会得到运行时错误。如果我使用工作表名称(我已准确验证),我会收到运行时错误。调试器在
.Worksheets("Sheet2").Visible = False行出错。我相信Visible方法/属性可能不适用于 Worksheets 集合。按 Ctrl+J 时,列表属性对话框不显示。