皆さんは、VBAで「オブジェクトが必要です」というエラーを見たことがありますか?
「オブジェクトが必要です」のエラーは、メッセージを見ただけではエラーの意味がよく分からないため、対処方法がわからず困る方も多いのではないでしょうか。
そこで今回は、
- 「オブジェクトが必要です」のエラーが出る原因
- 「オブジェクトが必要です」のエラーが出たときの対処方法
- エラー処理を使ってデバッグ画面に移動しない方法
といった基礎的な方法から応用的な方法まで、徹底的に解説します!
エラー「オブジェクトが必要です」とは
「実行時エラー ‘424’: オブジェクトが必要です。」のエラーは、オブジェクトのプロパティやメソッドを使う際、オブジェクトがEmptyだったときに表示されます。
よくあるケースだと、Setをつけずに値を代入した場合です。
セルのデータ:
サンプルコード:
Sub Test() Dim obj As Variant obj = ActiveSheet.Range("A1") 'A1セルの値を確認 MsgBox obj.Value End Sub
実行結果:
Setをつけると、次のように正しく値が表示されます。
Setを加えたコード:
Sub Test() Dim obj As Variant Set obj = ActiveSheet.Range("A1") 'A1セルの値を確認 MsgBox obj.Value End Sub
実行結果:
エラーの対処方法
エラーを対処する方法は、大きく分けて3つあります。
エラー番号で検索して調べる
表示されたメッセージにはエラー番号が載っています。
メッセージ文で検索しても見つかるときは見つかりますが、稀に起こるエラーだとメッセージ文だけでは対処方法が見つからないことがあります。
そのため、エラー番号を使って調べる癖をつけるのがおすすめです!
この番号を使ってgoogleなどでエラーの内容を調べてみましょう。
エラー番号の場所:
オブジェクトがSetで代入されているか確認する
このエラーは、変数代入のコードをコピペしたときにSetを付け忘れて起こるケースが圧倒的に多いです。
そのため、エラーの箇所を確認したら、Setで代入していない処理がないかを確認するのがおすすめです。
変数の値を細かく確認する方法をマスターする
Setの付け忘れチェックでほとんど解決できますが、オブジェクトに入っている値がEmptyになっていないか事前に確認ができれば、そもそもエラーは出ないですよね。
事前に変数の値を確認したいときは、イミディエイトウィンドウを使った変数確認方法がおすすめです!
以下で詳しく解説しているので、気になる方は見てみてくださいね!
補足:エラー時にデバッグ画面に移動しない方法
エラーが発生したときにVBEの画面に移動してしまうと、VBAを知らない人がツールを使っていた場合はびっくりしてしまいますよね。
自分で使うだけであればそこまで気にしなくてもいいかもしれませんが、ツールを使うことに対しての不信感にもつながってしまうので、エラー処理を入れておくのがおすすめです!
サンプルコード:
'メインの処理 Sub Main() Dim resultMessage As String resultMessage = Test If resultMessage <> "" Then MsgBox resultMessage, vbCritical Else MsgBox "処理成功", vbInformation End If End Sub 'Setを忘れたFunction関数 Function Test() As String On Error GoTo Test_Err Test = "" Dim obj As Variant obj = ActiveSheet.Range("A1") 'A1セルの値を確認 MsgBox obj.Value Exit Function Test_Err: 'エラー時にエラー情報を返す Test = "【処理エラー】" & vbCrLf & _ "エラー番号:" & Err.Number & vbCrLf & _ "エラーメッセージ:" & Err.Description End Function
実行結果:
メッセージの内容はほとんど同じですが、VBEに移動せずにメッセージを表示することができます。
ちょっとしたことで使い勝手が大きく変わるので、エラー処理を入れる癖をつけるのがおすすめです。
エラー処理については以下でも詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、VBAで「オブジェクトが必要です」のエラーが出たときの対処方法について解説しました。
コードが速く書けるようになってきた人ほど、Setの付け忘れでこのエラーを見る人は多いです。エラーが起こった時は、ぜひ試してみてくださいね!