VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の原因と対処方法

VBAを実行するとVBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」を見る機会はありませんか?

コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。

そんな中で悩むことは、

・VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の原因はなに?
・VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の対処はどうすればよい?

ではないでしょうか?

今回は、
VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の原因とサクっとできる対処方法について
まとめます!



VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」はどんなエラー?

Setステートメントのつけ忘れや、Setステートメントの代入結果がNothingの場合に発生するエラーです。

オブジェクトを扱う時には必ずと言ってよいほど出くわすエラーではないでしょうか。

タカヒロ
タカヒロ
デバッグするとほんとよく出るエラーです…



VBA エラー 91の原因①「Setステートメントのつけ忘れ」

Setが必要なところをついつい忘れてしまい、

「Setステートメントが必要だよ」

と怒られるパターンとなります。

以下サンプルコードです。
3行目の頭にsetが必要ですが、ありません。

Sub エラーテスト1()
    Dim objRG As Range
    objRG = Range("A1:B10")
End Sub

はい、エラーとなりました。



VBA エラー 91の原因①「Setステートメントのつけ忘れ」の対処方法はSetステートメントを使って代入すること

単純にSetステートメントを忘れているわけですから、

Setステートメントを使って代入しましょう。

Sub エラーテスト1R()
    Dim objRG As Range
    Set objRG = Range("A1:B10")
End Sub

エラーは出なくなりましたね。



VBA エラー 91の原因②「代入結果がNothingの場合」

Setステートメントは記述していても代入結果がNothingの場合は同様にエラー91が発生します。

以下サンプルコードです。

Sub エラーテスト2()
    Dim objRG As Range
    Set objRG = Nothing
    objRG.Activate
End Sub

強制的にNothingを代入して、無いものに対してアクティブにしようとしたから

ないよと怒られたわけです。



VBA エラー 91の原因②「代入結果がNothingの場合」の対処方法はNothingの場合は処理をしないよう判定処理を入れる

代入結果がNothingの場合は処理をしないよう判定処理を入れましょう。

Sub エラーテスト2R()
    Dim objRG As Range
    Set objRG = Nothing
    
If Not objRG Is Nothing Then
    objRG.Activate
End If
End Sub

なお、オブジェクト変数でNothingを判定する演算子は=や<>ではなくIs、NotIS演算子ですので注意してください。

タカヒロ
タカヒロ
昔、「If objRG = Nothing Then」のように文法をよく間違っていました。。。



さいごに

今回は、
VBA エラー 91「オブジェクト変数または With ブロック変数が設定されていません。」の原因とサクっとできる対処方法について
まとめました。

VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、

しっかりと対処方法を把握するようにしておきたいですね!



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です