Excel VBA の実行時エラー辞典
実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません
操作先の種類を調べ、そのオブジェクトで使えるプロパティやメソッドを選びます。
よくある原因
- Worksheet に対して、Range の Value などを使っています。
- Object 型で受け取った実体が想定と違っています。
- 遅延バインディングで呼ぶメソッド名やプロパティ名を間違えています。
- 別のアプリやバージョン向けの機能を、そのまま呼び出しています。
直し方
- TypeName で実際のオブジェクトの種類を確認します。
- VBE のオブジェクトブラウザーと Microsoft の該当 API 資料で、その種類が使えるメンバーを確認します。
- 正しい対象を指定し、種類が決まっている変数は Worksheet や Range として宣言します。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
シートそのものにはセルの Value はありません。読むセルを Range で指定します。
修正前
Dim target As Object
Set target = ThisWorkbook.Worksheets(1)
Debug.Print target.Value
修正後
Dim target As Worksheet
Set target = ThisWorkbook.Worksheets(1)
Debug.Print target.Range("A1").Value2
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 代入した直後と失敗直前の TypeName を比べ、途中で別の種類を代入していないか確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? TypeName(target)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '35':Sub、Function、または Property が定義されていません
- 実行時エラー '91':オブジェクト変数または With ブロック変数が設定されていません
- 実行時エラー '424':オブジェクトが必要です