VBAを実行するとVBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」を見る機会はありませんか?
コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。
そんな中で悩むことは、
・VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の対処はどうすればよい?
ではないでしょうか?
今回は、
についてまとめます!
もくじ
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」はどんなエラー?
オブジェクトを参照できないか、オブジェクトのプロパティーやメソッドが存在しないときに発生するエラーです。
VBA エラー 438に近いエラーとして、
VBA エラー 423「プロパティまたはメソッドが見つかりません。」があり、通常こちらが表示されるはずなのですが、
VBA エラー 438の方が優先されるようですね。
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の原因①「プロパティやメソッドを間違えて入力」
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」が発生する一番多い原因はオブジェクト名やプロパティの指定の際にスペルが異なるなど定義されていない値を入力してしまう場合と言われています。
当然ながら存在しないオブジェクトやプロパティを参照することになるので、
「そんなのないよ」
と怒られてしまう訳ですね。
では、エラーを再現してみましょう。
シート名”Sheet1″をオブジェクトObjTestへセットし、
Cells(1, 1)へテキストを挿入する内容ですが、
Valueと入れるべきプロパティを「テスト」と
存在しないプロパティを指定してみます。
Sub エラーテスト1()
Dim ObjTest As Object
Set ObjTest = ThisWorkbook.Worksheets("Sheet1")
ObjTest.Cells(1, 1).テスト = "test"
End Sub
はい、エラーがでましたね。
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の対処方法はプロパティやメソッドを確認し、正しい内容へ変更する
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の対処方法は、
入力ミスをしたプロパティやメソッドを確認し、正しい内容へ変更をするようにしましょう。
サンプルでは、「テスト」を「Value」へ修正をしています。
Sub エラーテスト1()
Dim ObjTest As Object
Set ObjTest = ThisWorkbook.Worksheets("Sheet1")
ObjTest.Cells(1, 1).Value = "test"
End Sub
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の原因②「オブジェクトに存在しないプロパティやメッソドを指定」
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」が発生する原因の二つ目はオブジェクトに存在しないプロパティやメッソドを指定するケースとなります。
例えばセルの値を隣のセルへコピー&ペーストする場合は、
シンプルに以下が考えられますが、残念ながらエラーとなります。
Sub エラーテスト2()
Set ObjTest = ThisWorkbook.Worksheets("Sheet1")
ObjTest.Cells(1, 1).Select
ObjTest.Cells(1, 1).Copy
ObjTest.Cells(1, 2).Select
ObjTest.Cells(1, 2).Paste
End Sub
エラーとなった箇所は、Pasteメソッドとなります。
実は、Pasteメソッドはシートオブジェクトに対してのメソッドであり、
セル以下のメソッドには含まれていないのです。
VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の対処方法はプロパティやメソッドを確認し、正しい内容へ変更する
こちらも1と同じくオブジェクトのプロパティやメソッドを確認し、オブジェクトに定義されているものへ変更をするようにしましょう。
サンプルでは「ObjTest.Cells(1, 2).Paste」を「ObjTest.Paste」へ変更しました。
Sub エラーテスト2()
Set ObjTest = ThisWorkbook.Worksheets("Sheet1")
ObjTest.Cells(1, 1).Select
ObjTest.Cells(1, 1).Copy
ObjTest.Cells(1, 2).Select
ObjTest.Paste
End Sub
選択候補から選ぶと確実ですね。
さいごに
今回は、
についてまとめました。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す