Vba Offest和FillDown:运行时错误';1004';方法';范围';对象的'_工作表';失败

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

下面我有一些代码。正在获取“对象的运行时错误“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").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)"