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

mainWS.Select

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

“对象'_Worksheet'的方法选择失败”

知道为什么或如何解决这个问题吗?谢谢!

4

3 回答 3

10

正如评论中所讨论的,不能Sheets在 VBA 中选择不活动的(或Range它们上的对象)。

例如下面的代码

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

将导致您收到的错误。

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

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

请注意,您可以使用命令参考激活的工作表ActiveSheet来获取属性或您感兴趣的任何其他操作。

如果您通过工作簿中的所有工作表循环工作并且存在隐藏工作表,也会发生此错误。留意那个。


最后,与您的特定错误消息无关,我假设您在某处声明这些变量并且根本没有在此处复制它们 - 如果不是我会考虑使用Option Explicit,因为您经常会遇到各种问题而无需Option Explicit在您的 VBA 顶部代码。

于 2012-10-02T23:31:07.780 回答
1

虽然我同意上述观点,但同样重要的是要注意,如果工作表的可见性当前设置为 xlSheetVeryHidden,则删除功能将不起作用

于 2013-08-29T07:33:00.480 回答
1

我遇到了同样的问题,并查看了这篇文章以获取有关如何解决它的想法。通过在我的代码失败的行上使用“激活”而不是“选择”来解决我的问题。因此,不要使用“mainWS.Select”,而是尝试使用“mainWS.Activate”。

于 2019-09-10T13:59:02.860 回答