• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル/マクロ Exit Subが実行されない)

エクセルマクロのExit Subが実行されない

このQ&Aのポイント
  • エクセルのマクロでExit Subが実行されない問題についての質問です。エクセルの2000版を使用しています。特定の条件下でシートをコピーして名前を変更し、フォームを閉じる処理を行いたいのですが、Exit Subが実行されません。
  • 条件分岐文(If文)の中でExit Subを使用していますが、処理の最後にたどり着くことができません。メッセージボックスを挿入するとメッセージは表示されるため、問題はExit Subの部分にあると考えられます。
  • Exit Subが実行されない理由と解決法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.4

こんな感じでどうでしょう。 Private Sub CommandButton1_Click() Dim Ws As Worksheet Set Ws = Worksheets("Summary") On Error GoTo ErrorMessage Ws.Name = TextBox1.Value On Error GoTo 0 Ws.Name = "Summary" Ws.Copy After:=Ws ActiveSheet.Name = TextBox1.Value MsgBox "Task Completed!" Exit Sub ErrorMessage: MsgBox "Invalid name!" End Sub Private Sub CommandButton2_Click() Unload Me End Sub CommandButton2はキャンセルボタンというより終了ボタンになります。 「Unload Me」でユーザーフォームを終了します。 CommandButton1でユーザーフォームを終了させてもよいのですが、シートを複数回コピーする場合を考えると、終了ボタンで終了させた方がよいと思います。

ocypodidae
質問者

お礼

解決の糸口になりました。Exit Sub とUnload Meを勘違いしていたようです。また一から勉強しなおしです。どうもありがとうございました。

ocypodidae
質問者

補足

CommandButton1でユーザーフォームを終了させる方法をお尋ねしたかったんです。Exit Sub をUnload Meに変更したら希望どおりに作動しました。 )CommandButton1でユーザーフォームを終了させてもよいのですが、シートを複数回コピーする場合を考えると、終了ボタンで終了させた方がよいと思います。 というのはなぜでしょうか?

その他の回答 (4)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

>処理後にExit Subが実行されません >やはりExit Subにはたどり着けませんでした。 提示のコードはまともに動作するコードです。 上記のように判断した理由はなんですか? それをちゃんと提示しませう。 (Exit SubをExitSubと書いてあるのは単に転記ミスでしょうね)   ●因みに提示のコードでは、Exit Subは不要です。  というよりない方がベターでしょう。 以上です。

ocypodidae
質問者

お礼

質問が不明瞭で申し訳ありませんでした。 優しくしていただいてどうもありがとうございました。

ocypodidae
質問者

補足

CommandButton1でユーザーフォームを終了させる方法をお尋ねしたかったんです。Exit Sub をUnload Meに変更したら希望どおりに作動しました。Exit SubとUnload Meを勘違いしていたようです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

「エクセル/マクロ エラー処理がうまくいきません」 前回の回答者ですが、なぜ、私のコードが無視するほどのレベルでしょうか? もう一度、私の前回のコードを確認してみてください。シート名の法則が書かれています。31文字までとか、使ってはいけない文字とか、同ブックに同じ名前はないこととか、網羅されています。こういうことは基本的なことだと思います。 本来は、シート名をコピーしてシート名を変えれば、後は、MsgBox を出せば済むはずです。 エラートラップというのは、伝家の宝刀のようなもので、エラートラップは上級ワザなのです。こういう私でも、それに頼ると、さっぱりコードが見えなくなることがあります。今回は、識別子のExitSub(正しくは、Exit Sub) は認識されてしまっているけれども、本来は、エラーが出ていて、エラートラップで通り越ししているように見受けられます。 予想しうるエラーは、避けられるなら、事前にエラーの発生を極力避けるというのが、VBAの基本です。 今回は、やむを得ず、エラートラップを生かしますが、シート名を入れる前に、すべてをチェックすれば、少なくも、省メモリになると考えて作ったのですが、ここの質問者さんの多くは、VBAが少し分かるようになると、そういうコードはめんどうだから避けるようになってしまうようです。最近は、そういう人が多くなっているようです。今回だけは、一応、回答を付けておきます。 シートコピーは、元のシートに名前登録などないことが条件になります。 元のシートの名前を変えるのは、どうでしょうね。私なら、そのようなコードは書きません。 '// Private Sub CommandButton1_Click()  Dim NewSheetName As String  NewSheetName = TextBox1.Value  If NewSheetName = "" Then Exit Sub  On Error GoTo Err1   Worksheets("Summary").Copy After:=Worksheets("Summary")   ActiveSheet.Name = NewSheetName   Worksheets("Summary").Select   MsgBox "Task Completed!"   'Unload Me 'UserForm終了   Exit Sub Err1:   MsgBox "Invalid name!" End Sub それと、Sheets とWorksheets の違いは理解しておくようにしましょう。これも、基本です。

ocypodidae
質問者

お礼

前回の質問ではすべての質問にお礼を付ける前に締切ってしまいました。大変失礼しました。 私はまだVBAを勉強中で、何が基本で何が基本じゃないかはわかりません。背伸びせずにわかる範囲から徐々に勉強していこうと思っている次第です。 いつかは頑張ってWendy02さんのように細かいことにも気を配れる完璧超人になりたいものです。ありがとうございました。

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.2

>フォームを閉じるという処理を目指しています。 だったら exit sub でなく フォームを閉じるという処理を目指しています。 ActiveWorkbook.Close または Workbook.Close ではないでしょうか

ocypodidae
質問者

お礼

質問が不明瞭な為にご迷惑をおかけしました。

ocypodidae
質問者

補足

ワークブックではなくユーザーフォームを終了させる方法をお尋ねしたかったんです。Exit Sub をUnload Meに変更したら希望どおりに作動しました。ありがとうございました。

  • kool_noah
  • ベストアンサー率33% (95/285)
回答No.1

たどりつけないというのはどういう事でしょう・・? 上のコードを見ていると「ExitSub」が「Exit Sub」ではないので普通にエラーになりそうですが それは単純なコピペミスだとして、「Task Completed」が表示された後は処理がないのでExit Subしなくてもいいような気もするんですが

ocypodidae
質問者

お礼

Exit Sub とUnload Meを勘違いしていたようです。素早い回答、感謝至極、です。

関連するQ&A