エラーの原因
このエラーでは、該当する変数がオブジェクト変数になっていないケースが考えられます。
・変数を定義していない
・変数にオブジェクトが代入されていない(Setを付けずに代入した)
・変数名のスペルミス
などが原因かもしれません。
エラーの例
実際にエラーの例を検証してみましょう。
Sub test1()
Rng = Range("A1")
Rng.Value = "abc" 'エラー:「オブジェクトが必要です。」
Debug.Print Rng.Text
End Sub
この例では、一行目の変数RngにRangeであるA1セル(オブジェクト)を代入しているつもりですが、ここではA1セルの値(Valueプロパティ)が代入されています。
勘違いしているものの、間違ってはいないのでここではエラーとなりません。
この段階で、Rng変数は文字列型として認識されています。
次に、Rng.Value としていますが、Rngは文字列型の変数なので、Valueプロパティは持っていません。
なので、「オブジェクトが必要です。」というエラーが発生します。
上記プログラムは、一行目に Set を付けてオブジェクトとして代入すれば問題なく動作します。
Set Rng = Range(“A1”)
変数は定義した方が良い
このプログラムでは、変数の定義をしていれば、異なるエラーが発生します。
Sub test2()
Dim Rng As Range
Rng = Range("A1") 'Setが付いていない
Rng.Value = "abc"
Debug.Print Rng.Text
End Sub
「オブジェクト変数またはWithブロック変数が設定されていません。」というエラーは、オブジェクト変数の代入にSetを入れ忘れた時の典型的なエラーで、前のプログラムとは違いエラーしている行で止まります。
この場合でも、以下のようにSetを入れてやればエラーは解決します。
Set Rng = Range(“A1”)
VBAでは、変数を定義しなくてもエラーとはなりませんが、思わぬ勘違いでエラーとなった場合、原因がわかりずらくなるので変数はキチンと定義するようにしましょう。
変数の宣言を強制するオプション
VBEでは、各モジュールの冒頭に、「Option Explicit」と記述する事で変数を宣言しなかった場合に警告を出してくれるオプションがあります。
VBEのメニューから「ツール」>「オプション」でオプションを開いて、「編集」タブの「コードの設定」にある「変数の宣言を強制する」にチェックを入れます。

プログラミングに慣れているユーザーは殆どこのオプションをチェックしているので、チェックしておくことを推奨します。
コメント