使用.Cells()跨工作表复制时出现VBA运行时错误1004求助
VBA代码1004错误解决:Method 'Range' of object '_Worksheet' failed
问题重现
运行代码最后一行时触发1004错误:Method 'Range' of object '_Worksheet' failed,但被注释的上一行代码可正常执行,调试时LC值为6。
错误原因
最后一行代码里的Cells(3,8)没有明确指定所属工作表,VBA会默认使用当前活动工作表,而不是你定义的TD工作表。当Range方法(属于TD)引用了不属于它的Cells对象时,就会触发引用错误。
对比注释行的TD.Range("F3"),这里用的是字符串地址,VBA能明确识别是TD工作表的范围,所以不会出错。
修复代码
把出错的最后一行:
HTD.Range(HTD.Cells(2, 1), HTD.Cells(LR, 1)).Copy Destination:=TD.Range(Cells(3, 8))
修改为:
HTD.Range(HTD.Cells(2, 1), HTD.Cells(LR, 1)).Copy Destination:=TD.Range(TD.Cells(3, 8))
或者更简洁的写法:
HTD.Range(HTD.Cells(2,1), HTD.Cells(LR,1)).Copy TD.Cells(3,8)
额外优化建议
原代码大量使用Select和Selection,不仅容易引发类似的工作表引用错误,还会降低代码执行效率,建议替换为直接操作对象:
比如原代码中:
.Range("A1:A2").Select Selection.Merge ActiveCell.Value = "Candidate Group" Selection.Font.Bold = True Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter
可以改为:
With .Range("A1:A2") .Merge .Value = "Candidate Group" .Font.Bold = True .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter End With
同理,其他用到Select/Selection的地方都可以用类似的With块优化,避免依赖活动单元格/工作表。
内容的提问来源于stack exchange,提问作者user19767223
相关产品推荐
相关产品推荐

