EXCEL2010 VBA 複数処理の終了

このQ&Aのポイント
  • EXCEL2010 VBAで複数の処理を実行する方法
  • 処理Aの確認画面でNOを選択すると処理Bも実行せずに終了する方法
  • Exit Subに代わるすべての処理を終了させるコマンドはあるか
回答を見る
  • ベストアンサー

EXCEL2010 VBA 複数処理の終了

EXCEL2010 VBAでコマンドボタンを押すと複数の処理を実行するようにしています。 Sub 実行() 処理A 処理B Ens sub 処理Aでは実行時に確認画面が出てNOを選択すると処理が終了するようにしています。 確認画面は下記の様な形です。 If MsgBox("処理を実行しますか?", vbYesNo + vbQuestion, "確認") = vbNo Then Exit Sub End If この処理Aの確認画面でNOを選択すると処理Aだけでなく処理Bも実行せず 終了するようにしたいのですが何か良い方法はないでしょうか? Exit Subにかわるすべての処理を終了させるコマンドがあれば良いのですが。。。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

処理Aで「Exit Sub」の代わりに If MsgBox("処理を実行しますか?", vbYesNo + vbQuestion, "確認") = vbNo Then End とします。

Not_Pro
質問者

お礼

回答ありがとうございます。 subを抜くだけだったのですね。 無事できました。

関連するQ&A

  • Access2002 終了時の処理

    フォーム及びアクセスを誤って終了させることのないよう、フォーム内ボタンもしくは右上×をクリックした時、以下のモジュールで確認ボタンを表示させようとしています。 ======================== Private Sub Form_Close() '閉じるとき確認 2004/6/9 If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, _ "終了確認") = vbNo Then Cancel = False End If End Sub ======================== システムを終了しますか?のコメントとともにYes No ボタンも出ますが、Noを押しても終了してしまいます。終了しないようにするにはどのようにすればよいのでしょうか? いつもすみません。よろしくお願いします。

  • VBAでエクセル終了

    エクセル2000です。 VBAで「閉じる」ボタンを作りました。 Sub closeボタン() myYN = MsgBox("終了しますか?", vbYesNo + vbQuestion, "終了確認") If myYN = vbNo Then Exit Sub ThisWorkbook.Close End Sub ところが作動させると「いいえ」を選ぶとすんなり終了してくれますが、「はい」にすると「変更を保存しますか?」を何故か続けて2回も聞いてきます。 2回目も「はい」にすると今度はブック保存のダイアログが出てきて、ブック名が「:」(半角コロン)になってます。 変だなあ、と思い上記のマクロを別ブックを新たに作って標準モジュールに張ってみると正常に作動します。 もとのブックに何かあって、こんな現象が起きているのでしょうか? とっても困ってます。

  • IF文の使い方を教えてください

    もし A5001 に データがあるのなら処理を中止し、データが無ければ処理を継続する。内容のマクロを考えてますが、 A5001にデータがないなら処理を中止は下記の記述で良いかと思いますが、 逆にあったら処理を中止する記述はどうすればよいのですか? Value が怪しいかと思うのですが・・・・ お願いします。 If Range("読み込み!A5001").Value = "" Then MsgBox "データがありません", vbOKOnly, "データ有無確認" Exit Sub End If ret = MsgBox("過去のシュミレーションデータを削除します。よろしいですか?", vbYesNo + vbQuestion, "データ削除実行確認") If ret = vbNo Then Exit Sub End If

  • Access VBA エラートラップでの終了処理

    お世話様です。 Access2003 VBA にて、各プロシージャに貼ったエラートラップで、 メッセージを出力した後にAccessを終了したいと考えております。 ここで、通常終了時(フォームの×ボタン押下時)の 終了確認メッセージをForm_Unloadイベントで記述しているのですが、 エラートラップでの終了時にも、このメッセージが表示されてしまいます。 エラートラップでの終了時は、終了確認メッセージを表示させたくないので、 標準モジュールにパブリック変数のエラーフラグを用意し、 それで判断しようと考えたのですが、 エラートラップ内でエラーフラグに値を設定しても保持されず、 Form_Unloadイベントで終了確認メッセージがどうしても表示されてしまいます。 何か良い方法はありますでしょうか?よろしくお願いいたします。 例: '***ボタンAクリックイベント******************* Private Sub btn_A_Click() On Error GoTo ERR_LINE   <何らかの処理> Exit Sub ERR_LINE:   MsgBox "予期せぬエラーが発生しました。終了します。" & Chr(13) & _       "エラー番号: " & Err.Number & Chr(13) & _       "エラー内容: " & Err.Description, vbCritical + vbOKOnly, "例外エラー"   bl_ErrFlg = True 'エラーフラグ設定←保持されない   Application.Quit End Sub '***フォームアンロードイベント******************* Private Sub Form_Unload(Cancel As Integer)   If bl_ErrFlg = False Then     Cancel = MsgBox("終了します。よろしいですか?",vbQuestion + vbYesNo, "終了確認") = vbNo   End If End Sub

  • VBAのエラー処理がうまくいきません!?

    下記のようなマクロを見よう見まねで作りました。 K13:K43に入れた文字列としての計算式を隣りのJ列に計算された答えを入れるというものです。 うまく動いたのですが、式が間違っている場合、エラーになるのでエラー処理をいれてみました。 On Error GoTo Trapと Exit Sub Trap: MsgBox "式が不正です。", vbCritical, "式" の3行を新たに挿入しましたが、どういうわけか全部がエラーになってしまいMsgBoxが出てしまいます。 どこが間違ったのでしょうか? Sub 包括料算() Dim i As Long Sheets("包括明細").Select For i = 1 To 30 If Range("K" & i + 13) <> "" Then 'K列14~43行で空白以外のセルの場合 On Error GoTo Trap 'エラーの時Trapへ Range("J" & i + 13).Formula = "=ROUND(" & Range("K" & i + 13).Value & ",2)" 'J列14~43行に式としていれる Exit Sub Trap: MsgBox "式が不正です。", vbCritical, "式" End If Next A% = MsgBox("入力完了ですか?" _ + Chr(&HD) + Chr(&HA) + "", vbYesNo + vbQuestion, "確認") Select Case A% Case vbYes 包括終了 '終了用マクロへ Case vbNo Exit Sub End Select End Sub

  • フォームを閉じないようにする VB6 SP6

    VB6 でプログラムを作成中です。 プログラムを実行して、フォームが立ち上がった所で右上の×を押し、画面を閉じようとします。 そこで以下のコードで、もし×が押されたらvbYesNoメッセージボックスを表示させ、もし「いいえ」が押されたらフォームを閉じないようにし、実行画面を維持したいのです。 しかし、Exit Sub ですとプログラムが終了してしまい、困っています。宜しくお願い致します。 Private Sub Form_Unload(Cancel As Integer) 'フォームを閉じる Dim last As String last = MsgBox(" プログラムを終了させますか?", vbYesNo, "終了確認1") If (last = vbYes) Then Dim last2 As String last2 = MsgBox(" 本当にプログラムを終了させますか?", vbYesNo, "終了確認2") If (last2 = vbNo) Then Exit Sub End If End If If (last = vbNo) Then Exit Sub End If End Sub

  • エクセルVBA

    ユーザーフォームがあり、コマンドボタンが準備されています そのコマンドボタンをクリックした場合、処理1~処理3を実行するようにしています Sub CommandButton1_Click() CommandButton1処理1 CommandButton1処理2 CommandButton1処理3 End Sub Private Sub CommandButton1処理1() ・・・ End Sub Private Sub CommandButton1処理2() ・・・ End Sub Private Sub CommandButton1処理3() ・・・ End Sub 処理1→処理2→処理3という流れが進むかと思います 処理1の中にIf~End ifがあり、Ifに合致する場合はメッセージボックスが表示するようになっています 処理3の中に、「ユーザーフォームを閉じる」記載がされています 処理1のIfに合致する場合、メッセージボックスを表示させユーザーフォームを閉じることなく終了したいです つまりIfに合致した場合、その後の処理2、処理3をさせず処理1で終了させればいいのかと思ったのですが、そのようなことはできるのでしょうか? 処理1でIfに合致する場合、Exit Subとすると処理1は終了するかもしれませんが、その後処理2、処理3に進んでしまうので困っています よろしくお願いします

  • Excel VBA「If else」の使い方

    Excelで管理台帳を作っています コマンドボタンをクリックすると、元データ「受給者情報」シートから今月利用終了となる人のリストを「利用終了者」シートに抽出できるようにしています 正しい作り方ではないのかもしれませんが、これでちゃんと抽出できているから抽出自体はこれでも問題ないと思います(^_^;) それはいいのですが、対象となる人がいない場合、抽出先の「利用終了者」シートにはタイトル行しか出ません。 それでも構わないのですが、できたら抽出データがない場合(A2セルより下のデータがない場合)は、「今月で終了の利用者はいません」とメッセージを出し、「top_page」シートに移動させたいのです そのやり方がうまくいきません 現時点はこのように入れています Private Sub CommandButton2_Click() Worksheets("利用終了者").Select Worksheets("利用終了者").Range("A:M").Clear With Worksheets("受給者情報") .Range("A:M").Copy Worksheets("利用終了者").Range("A1") .Range("A:Q").AdvancedFilter _ Action:=xlFilterCopy, _ criteriarange:=.Range("U1:V3"), _  CopyToRange:=Worksheets("利用終了者").Range("A:M"), _ unique:=False End With MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then Exit Sub End If Worksheets("利用終了者").PrintOut Sheets("top_page").Select Range("a1").Select End Sub If elseを使うんだろうな、というのは何となくわかるのですが、どこにどう入れたらちゃんと反応するのかわかりません。 一度、  (前略) If Application.CountA(Range("A2")) = 0 Then MsgBox "今月末で終了の利用者はいません", vbOKOnly + vbInformation, "確認" Else MsgBox "今月末で終了の利用者です!", vbOKOnly + vbInformation, "確認" If MsgBox("印刷しますか?", vbYesNo + vbQuestion, "印刷") = vbNo Then Exit Sub End If Worksheets("利用終了者").PrintOut End If Sheets("top_page").Select Range("a1").Select End Sub と入れてみたのですが、これだと2行目以降もデータがあっても、「今月末で終了の利用者はいません」となってしまいます 2行目以降にデータがある場合は「今月末で終了の利用者です!」とメッセージボックスを出し、2行目以降にデータがない場合は「今月末で利用終了の利用者はいません」とメッセージボックスを出したいです そのやり方を教えてください。お願いします ちなみにバージョンはExcel2010です

  • EXCEL2007にてVBAによる図形の複数選択ができなくなってしまっ

    EXCEL2007にてVBAによる図形の複数選択ができなくなってしまった。 以前EXCEL2003にて以下のプログラムでできたことができなくなってしまい いろいろ方法を探していたのですが見つからず困っています。 Sub 図形選択_Click() '--------------------------------------------- With ActiveSheet k% = MsgBox("どちらを選択?左列は(はい)を 右列は(いいえ)を 全選択は(キャンセル)を", vbYesNoCancel + vbQuestion, "複写方法の確認") Select Case k% Case vbYes For Each ob In .DrawingObjects If Not Intersect(ob.TopLeftCell, .Range("A1:D31")) Is Nothing Then ob.Select Replace:=False End If Next Case vbNo For Each ob In .DrawingObjects If Not Intersect(ob.TopLeftCell, .Range("E1:I31")) Is Nothing Then ob.Select Replace:=False End If Next Case vbCancel For Each ob In .DrawingObjects If Not Intersect(ob.TopLeftCell, .Range("A1:I31")) Is Nothing Then ob.Select Replace:=False End If Next End Select End With End Sub

  • EXCEL2002 VBAのループ処理について

    セルB1~B24に入力した数字を i とすると、 コマンドボタンを押したときに、セルB1~B24にの全てに値が入力されていて、 セル( F & i )が空白であれば、そこにセルA1の値を入れるようなマクロを作成しています。 セル( F & i )への入力は、セルB1~B24の全部に数値が入力されており、セル( F & i )が空白があるときのみ処理が実行されるように。どちらかが満たされない場合には、メッセージボックスを表示し、処理しないようにしたいのですが、どうしても途中まで入力されてしまいます。 以下のようなコードですが、何か良い方法はないでしょうか? Private Sub CommandButton1_Click() 'ロール確認 Dim 入力 As String, パレット As String Dim i As Long, t As Long For i = 1 To 24 入力 = Range("B" & i) パレット = Range("F" & i) If 入力 = "" Then MsgBox "aaa" Exit For End If 'パレットNo.転記 If パレット <> "" Then MsgBox "bbb" Exit For ElseIf パレット = "" Then Range("F" & 入力).Value = Range("A1").Value End If Next i End Sub

専門家に質問してみよう