今回はVBAを実行した時に「Range’メソッドは失敗しました:’_Worksheet’オブジェクト」とエラーメッセージ表示された時の対処法を紹介します。
うめ
エラーの理由がわかってしまえば、次からはすぐに解消できるようになります!
エラーの状況
Sheet2を選択した状態で下記のコードを実行すると「Range’メソッドは失敗しました:’_Worksheet’オブジェクト」とエラーが発生します。
1 2 3 4 5 6 7 8 |
Sub Sample1() Dim ws1 As Worksheet: Set ws1 = Worksheets("Sheet1") Dim ws2 As Worksheet: Set ws2 = Worksheets("Sheet2") ws1.Range(Cells(1, 1), Cells(3, 3)) = "1" End Sub |
ちなみにSheet1を選択した状態でコードを実行するとエラーなく処理が終わってしまうため、VBAの経験が浅い場合は混乱しますよね…。
エラーの原因
6行目の記述ですが、Cellsを使用する場合は、どのシートを参照するのか指定する必要があります。
1 |
ws1.Range(Cells(1, 1), Cells(3, 3)) = "1" |
標準モジュールの場合はアクティブシートを参照するため、Sheet2を選択した状態でコードを実行すると、実際はこのようになっています☟
1 |
ws1.Range(Sheet2.Cells(1, 1), Sheet2.Cells(3, 3)) = "1" |
うめ
Sheet1のSheet2セルを参照しようとするため、エラーが発生します。
対処法
このようにCellsの参照シートを指定すればSheet2を選択した状態でもエラーが発生しません。
1 2 3 4 5 6 7 8 9 10 |
Sub Sample2() Dim ws1 As Worksheet: Set ws1 = Worksheets("Sheet1") Dim ws2 As Worksheet: Set ws2 = Worksheets("Sheet2") With ws1 .Range(.Cells(1, 1), .Cells(3, 3)) = "1" End With End Sub |
1シートだけでコードを書く場合は、今回のエラーは発生しませんが、参照シートを指定する癖は付けておいた方が良いと思います。