我在下面有一些代码。这就是"运行时错误' 1004'方法'范围'对象' _Worksheet'失败&#34 ;.我可以通过使用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
答案 0 :(得分:1)
如果您没有为每个单元格/范围引用指定工作表,则代码将假定活动工作表适用,因此您的范围可能会覆盖两张,因此错误。您可以使用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)"