对象“_Worksheet”的方法Select失败 - 为什么?

8
Set mainWB = Workbooks("Copy Paste.xlsb")
Set mainWS = mainWB.Sheets("Sheet1")
Set testWS = mainWB.Sheets("Sheet3")

mainWS.Select

我在Excel VBA中的最后一行不断收到一个错误:

"Method Select of Object '_Worksheet' failed"

有什么想法可以解决这个问题吗?谢谢!


你的工作表实际上是命名为sheet1/sheet3吗?工作簿的名称也是一样的吗? - enderland
2
因此,应避免使用.Select :) 请参阅此链接https://dev59.com/3Ggv5IYBdhLWcg3wSe0f - Siddharth Rout
1
哦,我不知道只有在元素处于活动状态时才能使用选择。好了解,谢谢! - Sam
3个回答

10

如评论中所讨论,无法在VBA中选择未激活的Sheets(或其上的Range对象)。

例如以下代码:

Sheets(1).Activate
Sheets(2).Range("A1").Select

会导致您收到的错误。

在您的情况下,似乎您正在尝试选择一个未激活的工作表 - 您的mainWS对象在调用此代码时可能不是ActiveSheet。测试是否发生这种情况的简单方法是,如果您将以下内容添加到代码末尾:

if (ActiveSheet.Name <> mainWS.Name) then
    msgbox ("Going to crash after clicking ok!")
end if
mainWS.Select

请注意,您可以使用命令ActiveSheet引用已激活的工作表以获取属性或进行其他感兴趣的操作。

如果有循环遍历工作簿中的所有工作表,并且存在隐藏的工作表,则也可能会发生此错误。要注意这一点。


最后,与您特定的错误消息无关,我假设您在某个地方声明了这些变量,只是没有将它们复制到这里 - 如果没有,请考虑在您的 VBA 代码顶部使用Option Explicit,因为没有Option Explicit常常会遇到各种问题。


优秀的回答。恭喜你展现出了卓越的知识和表达能力。 - NoChance

1
我遇到了同样的问题,并查看了这篇文章以获取解决方法。我的问题通过在代码失败的行上使用“Activate”而不是“Select”得到了解决。因此,尝试使用“mainWS.Activate”代替“mainWS.Select”。

1

虽然我同意上述观点,但也需要注意,如果工作表的可见性当前设置为xlSheetVeryHidden,则删除功能将无法工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接