2017-11-03 67 views
1

私は以下のコードを少し持っています。これは、 "実行時エラー '1004'オブジェクト '_Worksheet'のメソッド '範囲'を取得できませんでした。私はws.Activateメソッド(2番目のブロックを参照)を使用してこれを動作させることができますが、なぜこれが機能しないのか理解したいと思います。OffestとFillDown:実行時エラー '1004'メソッド '_Worksheet'オブジェクトの 'Range'が失敗しました

障害が発生するのは、 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 

答えて

1

あなたはすべてのセル/範囲参照用シートを指定しない場合のコードは、アクティブなシートをので、あなたの範囲が2枚、したがって、エラーをカバーすることができる適用すると仮定します。 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)" 
+0

魅力的な作品です!私に何か新しいことを教えてくれてありがとう:-) – SiriDeva

関連する問題