【解決方法】VBA エラー 91「オブジェクト変数またはWithブロック変数が設定されていません。」

【解決方法】VBA エラー 91「オブジェクト変数またはWithブロック変数が設定されていません。」

今まさに、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 ブロック変数が設定されていません。」の解説をしました。

パターンを把握しておくことで、エラーが発生した時にどれに該当するか確認することで対応出来ますね。

Excelカテゴリの最新記事