Excel VBA の実行時エラー辞典

実行時エラー '3':Return に対応する GoSub がありません

処理を終えるための Return と、GoSub から戻る Return を取り違えていないか確認します。

よくある原因

直し方

  1. 停止した Return の直前まで、どの順に処理が進んだか調べます。
  2. Sub を途中で終える目的なら Exit Sub にします。Function の戻り値は関数名に代入し、終了には Exit Function を使います。
  3. GoSub を使う既存コードなら、通常の処理からラベル内へ流れ込まないように終了位置を確認します。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。

最初のワークシートの A1 が空のとき、ボタンの処理を終える例です。

修正前

Sub CheckInput()
    If Len(ThisWorkbook.Worksheets(1).Range("A1").Text) = 0 Then Return
End Sub

修正後

Sub CheckInput()
    If Len(ThisWorkbook.Worksheets(1).Range("A1").Text) = 0 Then Exit Sub
    MsgBox "入力があります"
End Sub

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. Return と GoSub を検索し、Return の行にブレークポイントを置いて呼び出し元を確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? ThisWorkbook.Worksheets(1).Range("A1").Text

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料