今まさに、VBAの実行中でこのエラーに遭遇しているのではないでしょうか?
VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」
このエラーは、setステートメントがなかったり、オブジェクトを格納していないオブジェクト変数を操作するタイミングでエラーになったりします。
ExcelVBAを扱う上でかなり出会う頻度が高いエラーの1つであると思います。
パターン1「Setステートメントのつけ忘れ」
Sub sumple1()
Dim obj As Range
obj= Range("A1:B10")
End Sub
これは、Setを付けていない事でエラーになります。
Sub sumple1()
Dim obj As Range
Set obj = Range("A1:B10")
End Sub
setステートメントを付けてあげることで解決出来ます。
パターン2「代入結果がNothingになっている」
Sub sample2()
Dim obj As Range
Set obj= Nothing
obj.Activate
End Sub
オブジェクトがnothingになっているとエラーします。
今回は意図的に「Set obj= Nothing」していますが、通常の運用だと前の処理で意図せず”Nothing”が入って来てしまっている可能性があります。
その場合は、”Nothing”になっている原因を探ってみて下さい。
もう一つ、”Nothing”が入ってくるのは想定済みの場合、これは処理をしない用にしてあげましょう。
Sub sample2()
Dim obj As Range
Set obj = Nothing
If Not obj Is Nothing Then
obj.Activate
End If
End Sub
IF文を使用して、「オブジェクトがNothingではなかったら…」と言うように判定処理を入れてみましょう。
パターン3「そもそもオブジェクトが存在しない」
Sub Sample3()
Dim obj As Range
obj.Name = "Sample"
End Sub
そもそもオブジェクトを格納していないオブジェクト変数を操作しようとしたときにも、当然発生します。
まとめ
今回はExcelVBAを使ったマクロのエラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の解説をしました。
パターンを把握しておくことで、エラーが発生した時にどれに該当するか確認することで対応出来ますね。