VBAを実行するとVBA エラー 424「オブジェクトが必要です。」を見る機会はないでしょうか。
コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。
そんな中で悩むことは、
・VBA エラー 424「オブジェクトが必要です。」の対処はどうすればよい?
ではないでしょうか?
今回は、
原因とサクっとできる対処方法
についてまとめます!
もくじ
VBA エラー 424「オブジェクトが必要です。」はどんなエラー?
VBA エラー 424「オブジェクトが必要です。」はVariant型に指定した、もしくは型指定をしない変数に対して、
オブジェクトを設定せずに、オブジェクトに定義されているプロパティやメソッドを使用した時に発生するエラーです。
VBA エラー 424の原因①「Variant型の変数に対してオブジェクトが設定されていない」
VBA エラー 424の原因はVariant型の変数に対してオブジェクトが設定されていないことが原因となります。
そもそも、Variant型とはどんな内容なんでしょうか?
“variant”は直訳すると「多様な」という意味になり、
VBAではその意味のとおりどんな型でも扱える万能型として扱われます。
ある時はString型の文字列、またある時は配列だったりと七変化するわけです。
型はどのタイミングの何で決められるかというと、代入した値の形式とプロパティやメソッドの組み合わせにより決定されます。
今回はオブジェクトに関連するエラーですので、
オブジェクトに定義されているプロパティやメソッドを指定したタイミングでオブジェクト型と判断され、
「オブジェクトのプロパティやメソッドを使いたい事もわかった。」
「けど、肝心のオブジェクトがないよ」
と言われているわけですね。
ではエラーを再現してみましょう。
Sub エラーテスト1a()
Dim ObjTest As Variant
ObjTest = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
ObjTest.Value = "test"
End Sub
VBAを実行するとエラーとなりましたね。
まず、変数をVariant型で指定します。
Dim ObjTest As Variant
次にセル(1, 1)を変数ObjTestへ代入します。
ObjTest = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
次にValueプロパティで値を代入しようとしていますが、文字列格納の変数に対して、
オブジェクトのプロパティを使おうとしているから、ミスマッチとなりエラーが発生するわけです。
ObjTest.Value = "test"
なお、Variant型は省略が可能で、型なしの宣言をすると自動的にVariant型となります。
以下VBAでも同様のエラーが発生します。
おそらくこちらのパターンが多いのではないでしょうか。
Sub エラーテスト1b()
Dim ObjTest
ObjTest = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
ObjTest.Value = "test"
End Sub
VBA エラー 424の原因①「Variant型の変数に対してクラス変数が設定されていない」の対処方法はオブジェクトのプロパティとメソッドを使う場合はSetステートメントを使う
VBA エラー 424の対処方法は、オブジェクトのプロパティとメソッドを使う場合はSetステートメントを使うようにしましょう。
Variant型指定あり
Sub エラーテスト1a()
Dim ObjTest As Variant
Set ObjTest = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
ObjTest.Value = "test"
End Sub
Variant型指定なし
Sub エラーテスト1b()
Dim ObjTest
Set ObjTest = ThisWorkbook.Worksheets("Sheet1").Cells(1, 1)
ObjTest.Value = "test"
End Sub
Setを入れるだけですのでかんたんですね。
さいごに
今回は、
原因とサクっとできる対処方法
についてまとめました。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す