Vba Offest和FillDown:运行时错误';1004';方法';范围';对象的'_工作表';失败
下面我有一些代码。正在获取“对象的运行时错误“1004”方法“范围”\u工作表“失败”。我可以通过使用ws.Activate方法来实现这一点(请参见第二块),但我想了解为什么这不起作用 故障仅发生在以下情况: 1) 在线与。FillDown 2) 当代码在非活动工作表上运行时Vba Offest和FillDown:运行时错误';1004';方法';范围';对象的'_工作表';失败,vba,excel,Vba,Excel,下面我有一些代码。正在获取“对象的运行时错误“1004”方法“范围”\u工作表“失败”。我可以通过使用ws.Activate方法来实现这一点(请参见第二块),但我想了解为什么这不起作用 故障仅发生在以下情况: 1) 在线与。FillDown 2) 当代码在非活动工作表上运行时 Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets(1) Set ws2 = Worksheets(2) ws1.Range("D2").For
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
ws1.Range("D2").Formula = "=CONCATENATE(B2,"" "", C2)"
ws1.Range("D2", Range("C2").End(xlDown).Offset(0, 1)).FillDown
ws2.Range("D2").Formula = "=MID(C2, 3, 6)"
ws2.Range("D2", Range("C2").End(xlDown).Offset(0, 1)).FillDown
'''This code works.
Worksheets(1).Activate
Range("D2").Formula = "=CONCATENATE(B2,"" "", C2)"
Range("D2", Range("C2").End(xlDown).Offset(0, 1)).FillDown
Worksheets(2).Activate
Range("D2").Formula = "=MID(C2, 3, 6)"
Range("D2", Range("C2").End(xlDown).Offset(0, 1)).FillDown
如果未为每个单元格/范围引用指定工作表,代码将假定活动工作表适用,因此您的范围可能覆盖两张工作表,因此会出现错误。您可以使用With语句-注意范围引用前面的点,这样就不需要激活任何图纸
With ws1
.Range("D2").Formula = "=CONCATENATE(B2,"" "", C2)"
.Range("D2", .Range("C2").End(xlDown).Offset(0, 1)).FillDown
End With
With ws2
.Range("D2").Formula = "=MID(C2, 3, 6)"
.Range("D2", .Range("C2").End(xlDown).Offset(0, 1)).FillDown
End With
您的代码也可以缩短为,例如
ws1.Range("C2", ws1.Range("C2").End(xlDown)).offset(,1).Formula = "=CONCATENATE(B2,"" "", C2)"