VBA报错:Method 'Range' of Object '_Worksheet' failed 问题排查
解决方案:完全限定Cells的工作表引用
你猜的没错,这个错误100%是因为Cells对象没有被完全限定父工作表导致的。
在VBA中,单独写Cells(行,列)时,它默认指向当前的ActiveSheet。如果代码执行时ActiveSheet不是mm或wks,就会出现Method 'Range' of Object '_Worksheet' failed错误——因为你试图用SheetA的Range去引用SheetB的Cells,属于跨工作表的无效引用。
正确写法:给每个Cells指定父工作表
修改代码,给Cells前面加上对应的工作表对象,确保Range和Cells的父对象一致:
' 设置Range变量的写法 Set csvrng = mm.Range(mm.Cells(1, 1), mm.Cells(lastrow, lastcol - 2)) Set wksrng = wks.Range(wks.Cells(1, 1), wks.Cells(lastrow, lastcol - 2)) csvrng.Value = wksrng.Value
或者直接赋值的写法:
mm.Range(mm.Cells(1, 1), mm.Cells(lastrow, lastcol - 2)).Value = _ wks.Range(wks.Cells(1, 1), wks.Cells(lastrow, lastcol - 2)).Value
额外优化:用With语句简化代码
如果要多次操作同一个工作表,用With块可以减少重复代码,同时避免引用错误:
With mm Set csvrng = .Range(.Cells(1, 1), .Cells(lastrow, lastcol - 2)) End With With wks Set wksrng = .Range(.Cells(1, 1), .Cells(lastrow, lastcol - 2)) End With csvrng.Value = wksrng.Value
这样就能确保所有Range和Cells的引用都严格对应到目标工作表,不会再出现跨表引用的错误。
内容的提问来源于stack exchange,提问作者Chris H.
相关产品推荐
相关产品推荐

