今回はExcel VBAを実行した際に発生した「実行時エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の対象方について解説していきます。
オブジェクトとは
オブジェクトは「物」のことを指します。
VBAで「ブック」、「シート」、「セル」に対して操作する時にどのオブジェクトを指定するのか指定するための書き方です。
例えばSheet1のRange(“A1”)に”テスト”と設定したい時、Sheet2を表示した状態で下記コードを実行するとSheet2のRange(“A1″)に”テスト”と設定されてしまいます。
1 2 3 4 5 |
Sub Sample() Range("A1") = "テスト" End Sub |
別のシートに設定されないようにするためにどのシートに対して操作をするのかオブジェクトを指定します。
1 2 3 4 5 6 7 8 |
Sub Sample2() Dim Ws1 As Worksheet Set Ws1 = Worksheets("Sheet1") Ws1.Range("A1") = "テスト" End Sub |
うめ
オブジェクトを指定しなくても問題ありませんが、どのオブジェクトを操作するのか指定するのをオススメします。
エラーの原因
オブジェクトについて理解した上でエラーを解説していきます。
エラーの原因は2つです。
オブジェクトに対してSetの付け忘れ
先ほどのコードから「Set」を取り除くと実行時エラー91が発生します。
1 2 3 4 5 6 7 8 |
Sub Sample2() Dim Ws1 As Worksheet Ws1 = Worksheets("Sheet1") Ws1.Range("A1") = "テスト" End Sub |
オブジェクトを代入する時はSetが必要です。
Setを付け忘れている場合は、Setを付けるだけでエラーが解消されるのでオブジェクト変数まわりを確認しましょう。
Setしたオブジェクトに対してNothing
シートを指定する場合、存在しないものを指定することはできません。
1 2 3 4 5 6 7 8 |
Sub Sample2() Dim Ws1 As Worksheet Ws1 = Nothing Ws1.Range("A1") = "テスト" End Sub |
まとめ
実行時エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の対処法について解説を行いました。
個人的にはSetの付け忘れが多いのかな…と思っています。
オブジェクト変数を指定する場合は気を付けるようにしましょう!