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

问题描述 投票:0回答:4
Set mainWB = Workbooks("Copy Paste.xlsb")
Set mainWS = mainWB.Sheets("Sheet1")
Set testWS = mainWB.Sheets("Sheet3")

mainWS.Select

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

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

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

vba excel excel-2007
4个回答
10
投票

正如评论中所讨论的,无法在 VBA 中选择不活动的

Sheets
(或其中的
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 代码的顶部。


1
投票

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


1
投票

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


0
投票

子重命名表()

将 rs 调暗为工作表 对于工作表中的每个 rs rs.Name = rs.Range("O2") 下一个 rs

结束子

我也遇到了上述代码的相同错误,实际上我想根据 D16、D17、D18 中的值重命名工作表,有人可以帮助我吗

© www.soinside.com 2019 - 2024. All rights reserved.