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の原因③「対象のオブジェクトが存在しない」

VBA エラー 91の原因の三つ目は対象のオブジェクトが存在しない場合となります。

実際に利用者様から寄せられた事象内容にて説明をいたします。

Outlookで宛名の自動挿入の方法を探していてこちらのサイトにたどり着きました。

「実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません」となってしまうのですが、どうすればよいのでしょうか?
参照元:【Outlook VBA】返信時に宛名を自動挿入する方法!様・さん付けも!

Outlook VBAにて、現在表示中のメールアイテムを「返信」メールとしてオブジェクトへセットする処理があるのですが、

Set objReItem = ActiveInspector.CurrentItem.Reply

当然ながら表示しているメールアイテムがなければ取得対象がないということでエラーとなります。

タカヒロ
タカヒロ
根本原因は「代入結果がNothingの場合」と同じになります。②のケースは明示的にオブジェクトを消去した場合、③は対象オブジェクトの表示をうっかり忘れていたり、処理遅延等不具合で対象オブジェクトが出ない場合が想定されます。

VBA エラー 91の原因③「対象のオブジェクトが存在しない」の対処方法は対象オブジェクトを取得可能な状態にする

VBA エラー 91の原因「対象のオブジェクトが存在しない」の対処方法は対象オブジェクトを取得可能な状態にするようにしましょう。

上記の場合ですと対象メールアイテムを表示させた状態にした上でVBAを実行する必要があります。

Set objReItem = ActiveInspector.CurrentItem.Reply

さいごに

今回は、

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

についてまとめました。

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

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



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

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








コメントを残す

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