VBA错误:方法';范围';对象的'_工作表';失败

VBA错误:方法';范围';对象的'_工作表';失败,vba,excel,excel-formula,Vba,Excel,Excel Formula,我使用下面的代码来清除A2单元格到最后一个单元格的内容。如果活动工作表为TimeStampWork,则此代码工作正常。但如果我在任何其他工作表上,我会得到错误1004,对象的方法“Range”失败错误。如果工作表未激活,如何运行相同的代码 Sub test1() Dim ForClr As Worksheet Set ForClr = Workbooks("Main.xlsm").Sheets("TimeStampWork") ForClr.Range("A2", Range("A2").End

我使用下面的代码来清除A2单元格到最后一个单元格的内容。如果活动工作表为TimeStampWork,则此代码工作正常。但如果我在任何其他工作表上,我会得到错误1004,对象的方法“Range”失败错误。如果工作表未激活,如何运行相同的代码

Sub test1()
Dim ForClr As Worksheet
Set ForClr = Workbooks("Main.xlsm").Sheets("TimeStampWork")
ForClr.Range("A2", Range("A2").End(xlDown)).ClearContents
End Sub

在此情况下,其中一个范围对象是不合格的,因此引用活动图纸也是不合格的:

ForClr.Range("A2", Range("A2").End(xlDown)).ClearContents
你应该改写

ForClr.Range(ForClr.Range("A2"), ForClr.Range("A2").End(xlDown)).ClearContents
试试这个

Sub test1()
  Dim ForClr As Worksheet
  Set ForClr = Sheets("TimeStampWork")
  ForClr.range(ForClr.range("A2"), ForClr.range("A2").End(xlDown)).ClearContents
End Sub

此宏是在普通代码模块中还是在工作表模块中?您是试图在所有工作表上运行此代码,还是仅在“TimestamWork”中运行此代码?此外,FWIW会警告您这些隐式的ActiveSheet引用,并且可以避免您问这个重复的问题(免责声明:我管理Rubberduck开源项目)。正确。不过,稍作解释会有所帮助。OP代码中的第一个
“A2”
引用了活动工作表上的单元格A2,这使得剩余部分成为跨越多个工作表的不可能的范围声明。@vacip OP代码中的第一个“A2”符合
ForClr
,第二个不符合
范围(“A2”)
将出现在活动表上。我认为不需要进一步解释。这是很明显的,也是可以想象的。@ExcelinEfendisi对于初学者或不熟悉对象模型或其怪癖的人来说,对你我来说显而易见的东西不太可能是显而易见的。这里的最佳答案通常至少包括对问题/错误源的一些简要诊断,以及对解决方案“工作原理”的解释。出于@DavidZemens指出的原因,投票结果是否定的。在这个网站上有足够多的“尝试这个{code dump}”答案——实际上太多了。这些答案不会教任何东西,只会在OP遇到下一个障碍时引发更多的[重复]问题,因为他们还没有从这里得到的任何“尝试这个{code dump}”答案中学到任何东西。在你的答案上付出一些努力,你就会因为让互联网变得更好而得到回报。或者不要,让无知之轮继续转动。对不起,大卫。。。我回应了你的批评。。。