Set mainWB = Workbooks("Copy Paste.xlsb")
Set mainWS = mainWB.Sheets("Sheet1")
Set testWS = mainWB.Sheets("Sheet3")
mainWS.Select
我一直在Excel VBA的最后一行收到错误:
“方法选择对象'_Worksheet'失败”
知道为什么或如何解决这个问题?谢谢!
答案 0 :(得分:8)
如评论中所述,无法在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 :(得分:1)
虽然我同意上述内容,但同样重要的是要注意,如果工作表的可见性当前设置为xlSheetVeryHidden
,则删除功能将不起作用。答案 2 :(得分:0)
我遇到了同样的问题,并查看了此帖子以获取有关如何解决它的想法。我的问题通过在代码失败的那一行使用“激活”而不是“选择”来解决。因此,请尝试使用“ mainWS.Activate”,而不要使用“ mainWS.Select”。