VBAを実行すると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演算子ですので注意してください。
VBA エラー 91の原因③「対象のオブジェクトが存在しない」
VBA エラー 91の原因の三つ目は対象のオブジェクトが存在しない場合となります。
実際に利用者様から寄せられた事象内容にて説明をいたします。
Outlookで宛名の自動挿入の方法を探していてこちらのサイトにたどり着きました。
「実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません」となってしまうのですが、どうすればよいのでしょうか?
参照元:【Outlook VBA】返信時に宛名を自動挿入する方法!様・さん付けも!
Outlook VBAにて、現在表示中のメールアイテムを「返信」メールとしてオブジェクトへセットする処理があるのですが、
Set objReItem = ActiveInspector.CurrentItem.Reply
当然ながら表示しているメールアイテムがなければ取得対象がないということでエラーとなります。
VBA エラー 91の原因③「対象のオブジェクトが存在しない」の対処方法は対象オブジェクトを取得可能な状態にする
VBA エラー 91の原因「対象のオブジェクトが存在しない」の対処方法は対象オブジェクトを取得可能な状態にするようにしましょう。
上記の場合ですと対象メールアイテムを表示させた状態にした上でVBAを実行する必要があります。
Set objReItem = ActiveInspector.CurrentItem.Reply
さいごに
今回は、
についてまとめました。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す