VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の原因と対処方法

VBAを実行するとVBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」を見る機会はありませんか?

コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。

そんな中で悩むことは、

・VBA エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の原因はなに?
・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 エラー 438「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」の原因とサクっとできる対処方法について
まとめました。

VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、

しっかりと対処方法を把握するようにしておきたいですね!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です