Excel VBA の実行時エラー辞典
実行時エラー '35':Sub、Function、または Property が定義されていません
呼び出した処理の名前、置き場所、公開範囲、参照設定を確認します。
よくある原因
- 呼び出し側と Sub・Function の名前が一致していません。
- 別モジュールの Private な処理を呼び出しています。
- 別プロジェクトの関数を使うための参照設定がありません。
直し方
- VBE の検索で呼び出した名前の定義を探します。
- 定義があれば名前と引数を合わせ、別モジュールから必要な処理だけ Public にします。
- 外部プロジェクトに依存する場合は参照設定を確認し、デバッグメニューからコンパイルします。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
標準モジュールに置き、呼び出し名のつづりを合わせます。存在しない機能の空の Sub を追加して済ませず、本来の処理を確認してください。
修正前
Sub StartReport()
BuildReprot
End Sub
Sub BuildReport()
Debug.Print "集計開始"
End Sub
修正後
Sub StartReport()
BuildReport
End Sub
Sub BuildReport()
Debug.Print "集計開始"
End Sub
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 実行前にコンパイルします。実行まで進める場合は呼び出し直前にブレークポイントを置き、F8 で呼び出し先を確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? ThisWorkbook.Name
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '3':Return に対応する GoSub がありません
- 実行時エラー '28':スタック領域が不足しています
- 実行時エラー '438':オブジェクトは、このプロパティまたはメソッドをサポートしていません