Microsoft Accessでフォームを開いた際に「イベントプロパティに指定した式 読み込み時 でエラーが発生しました:Returnに対応するGoSubがありません」というメッセージが表示され、フォームが正常に開かないケースがあります。特にMicrosoft 365版Accessでは、古いマクロやイベント設定との相性によって発生することがあり、VBAコード内に実際に「Return」が存在しなくてもエラーになる場合があります。この記事では、このエラーの原因と対処方法をわかりやすく解説します。
「Returnに対応するGoSubがありません」とは
このエラーは、本来「GoSub」で呼び出された処理から「Return」で戻る構文に問題がある場合に表示されます。
ただしAccessでは、フォームイベント・埋め込みマクロ・古いイベント式の破損などでも同じエラーが表示されることがあります。
特に以下のようなケースが多いです。
- フォームのイベントプロパティ破損
- 古いAccess形式からの変換
- 埋め込みマクロ内部の不整合
- フォームモジュールとイベント設定のズレ
フォームコピーで直る理由
質問内容のように「フォームをコピーするとエラーが消える」場合、フォーム自体の内部情報が壊れている可能性が非常に高いです。
Accessのフォームには、見た目だけでなくイベント設定・マクロ情報・内部IDなど多くの情報が保存されています。
コピー時に内部構造が再生成されるため、破損情報だけが除去され、正常化するケースがあります。
まず確認したいポイント
フォームのイベントプロパティ
フォームをデザインビューで開き、「読み込み時(On Load)」や「開く時(On Open)」の設定を確認します。
以下のような設定が残っていないか確認してください。
- [イベント プロシージャ]
- 埋め込みマクロ
- 古い関数名
- 存在しないマクロ名
一度空欄にして保存し、再設定すると直ることがあります。
埋め込みマクロの確認
VBAだけでなく、Accessの「埋め込みマクロ」にも注意が必要です。
フォームプロパティから「…」ボタンを押してマクロエディタを開き、GoSubや古い制御文が残っていないか確認します。
VBAコードに問題がなくても起こる
質問のように、VBA全体検索しても「Return」が存在しないケースは珍しくありません。
これはAccess内部のイベントキャッシュや古いマクロ構造が原因であることが多いためです。
特にMicrosoft 365版Accessでは、旧バージョンで作成したmdbやaccdbを開いた際に発生しやすい傾向があります。
おすすめの修復方法
| 対処方法 | 効果 |
|---|---|
| フォームをコピーして作り直す | 非常に高い |
| イベントプロパティ再設定 | 高い |
| 埋め込みマクロ削除 | 高い |
| データベースの最適化と修復 | 中程度 |
| 新規accdbへインポート | 高い |
「最適化と修復」も試す
Accessには「データベースの最適化と修復」という機能があります。
ファイル内部の破損を修復できる場合があります。
- ファイル
- 情報
- データベースの最適化と修復
から実行可能です。
フォーム再作成が最終的に安定することも多い
長年運用したAccessファイルでは、フォーム内部のイベント情報が壊れているケースが少なくありません。
そのため、最終的には新しいフォームへコントロールを貼り直した方が安定する場合があります。
実際、フォームコピーで改善するなら「内部破損」が原因である可能性はかなり高いです。
まとめ
Accessの「Returnに対応するGoSubがありません」エラーは、必ずしもVBAコード内のReturnが原因ではありません。フォームイベント・埋め込みマクロ・内部破損などでも発生します。
特に「フォームコピーで直る」場合は、フォーム内部情報の破損が疑われます。イベントプロパティ確認、埋め込みマクロ削除、フォーム再作成などを行うことで改善するケースが多いため、まずはフォーム側の修復を試すのがおすすめです。


コメント