• ベストアンサー
  • 困ってます

プログラムのイベント処理中断方法

VB2008のイベンド中止処理についてお教え頂けませんでしょうか。 Formにボタンが1つあり、クリックするとCSVファイルが出力される処理をしたいです。 やりたい処理: 1. 「CSVファイル出力しますか?」というメッセージを出す。YESなら処理続行。Noなら処理中止。 2. CSVファイル出力処理。 3. 「CSVファイルを出力しました。」 (プログラム自体を終了したいわけではありません) VBAだと下記のようなコードを書きたいです。 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end end if 'CSV出力処理~~~ end sub VBにendというステートメントがあれば、良いのですが無さそうです・・・ 何か上手な処理はあるでしょうか?VBAのコードになってしまいますが、下記のような処理方法しかないでしょうか? '''''''''''''''''1 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then end else 'CSV出力処理~~~ end if end sub ''''''''''''''''2 Sub テスト() Dim ans As Integer ans = MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") If ans = vbNo Then goto here end if 'CSV出力処理~~~ here: end sub

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数212
  • ありがとう数8

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

  • ベストアンサー
  • 回答No.1

イベントの中でReturnなりExit Subなりすればいいのでは? Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click  If MsgBox("CSVファイル出力しますか?", vbYesNo, "テスト") <> vbYes   Return 'またはExit Sub  End if  'CSV出力処理 End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

returnでよいのですね・・・ありがとうございました!

関連するQ&A

  • フォームを閉じないようにする 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

  • Private sub の使い方

    Private Sub Worksheet_Activate() Dim ANS As Integer ANS = MsgBox("Bをクリアしてもいいですか?", _ vbYesNo + vbInformation, "クリア実行") If Sheets("B").Range("D6").Value <> "" Then Select Case ANS Case vbYes Sheets("営業確認").Range("D6:E1000").Select Selection.ClearContents Sheets("入力").Select MsgBox "クリアしました" Case vbNo MsgBox "キャンセル" End Select Else End If End Sub 質問 『A』のシートを開いた時に『B』のシートのD6に値があれば、MsgBoxを出すようにしたく上記のマクロを組みましたが、値が無くてもMsgBoxが表示されてしまいます。 どこがおかしいのかアドバイスをお願いします。

  • Yes・Noで表示するメッセージで、Yesの場合はコードを実行するので

    Yes・Noで表示するメッセージで、Yesの場合はコードを実行するのですが、 Noの場合にも「完了」が最後に表示されてしまいます。 Noの場合は何もなく終了したいのですが、どのようにしたらいいでしょうか? Sub test() Dim i As Long, r As Long Dim SH As Worksheet Dim ans As Integer Set SH = Sheets("シート") ans = MsgBox("入力年月日、入力担当は正しいですか?", vbYesNo) If ans = vbYes Then 実行コードfor &#65374;Next   End If MsgBox "完了" End Sub

  • Excelの同時置換の置換場所指定

    以前、どなたかの質問の回答で… Sub MultiReplacement()  Dim MyWords As Variant  Dim MyRepWords As Variant  Dim Ans As Integer  Dim Rng As Range  MyWords = Array("A", "C") 'ここに検索語を入れてください。  MyRepWords = Array(1, 2) 'ここに置換語を入れてください。  '検索語と置換語を調べる  If UBound(MyWords) <> UBound(MyRepWords) Then   MsgBox "検索語数( " & UBound(MyWords) & _   " )と置換語数( " & UBound(MyRepWords) & " )数が違います。", 64   Exit Sub  End If    Set Rng = Selection 'マウスで範囲を選択してください。  If Rng.Count = 1 Then   Ans = MsgBox("セル1つしか選択されていませんが、よろしいですか?", vbYesNo)   If Ans = vbNo Then    Exit Sub   End If  End If  '実行  For i = LBound(MyWords) To UBound(MyWords)   Cells.Replace What:=MyWords(i), Replacement:=MyRepWords(i), _   LookAt:=xlPart, _   MatchCase:=True  Next i End Sub ------------------------ というものを出してくれた方が折られました。それでなのですが… 置換語の場所を指定する場合はこれをどの用にしたらよいのでしょうか?? たとえば、セルA1から並んでいる、りんご/みかん/めろん…を、ほかの列CにApple/Orange/Mellon…するには??教えてくださいませ。

  • 文字制限方法。

    どなたか知識ある方、教えてください。 ソートプログラムの演習をしているんですが、 どのように書いていいか悩んでます。現在の課題はtextが10個あり、sortボタンをクリックすると左から数字を小さい順に並びます、数字のみ入力可、空白でもエラーなしで(全て空白はエラー)とりあえず数字があれば10個埋めていなくても並べる、文字等はエラーを出したいです。 '配列のインデックス番号の開始に1を設定 Option Base 1 Option Explicit Private Sub cmdCLEAR_Click() '変数の宣言 Dim ans As Integer Dim i As Integer '消去する際の確認事項 ans = MsgBox("消去していいですか?", vbYesNo + vbQuestion) Select Case ans Case vbYes For i = 1 To 10 Step 1 Text(i).Text = "" Next i Case vbNo MsgBox "取り消します", vbInformation End Select End Sub Private Sub cmdSORT_Click() '変数の宣言 Dim intNum(10) As Integer Dim S As Integer Dim j As Integer Dim k As Integer Dim i As Integer '配列の整理 For i = 1 To 10 Step 1 intNum(i) = Int(Text(i).Text) Next i 'バブルソート For k = 1 To 9 Step 1 For j = 1 To 9 Step 1 If intNum(j) > intNum(j + 1) Then S = intNum(j) intNum(j) = intNum(j + 1) intNum(j + 1) = S End If Next j Next k '結果を返して表記する For i = 1 To 10 Step 1 Text(i).Text = intNum(i) Next i End Sub 現在書いたのはここまででどうしてもエラーと文字制限の方法はわからないので教えていただける方、宜しくお願いします。

  • [と”の意味を教えてください。

    http://okwave.jp/qa/q5945112.html を参考に、 Sub test1() Dim i As Integer i = 2 If i Like "[1-3]" Then MsgBox i & "です" End If End Sub Sub test2() Dim i As Integer i = 2 If i Like "[1-5]" Then MsgBox i & "です" End If End Sub Sub test3() Dim i As Integer i = 2 If i Like "[1-10]" Then MsgBox i & "です" End If End Sub を作ったのですが、 test3はうまく行きません。 意味としては、 iが "[1-10]"の中の数字の間のどれかであれば、 MsgBox i & "です" を表示させたいです。 でも上記のマクロを実行させた結果、 "[1-10]"の中で計算が行われてるのではないかと思います。 だから、test3は、1-10=-9 という事になり、msgboxが反応しないのではないかと思っています。 でもそうすると、test2だって "[1-5]"は、-4になって、i=2とは違う値なのに なぜMsgBoxが反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。

  • エクセルVBAでBOOKを開く際の処理

    エクセルVBAでBOOKを開く際の処理 エクセル2000です。 VBAで特定のフォルダー内のBOOKを開き、1枚目のシートSheets(1)のデータを読み込んで別BOOK(マクロを記載したBOOK)にコピペしたら保存せず閉じるコードを下記のように書きました。(かなり簡略化しましたが) これで作動するのですが、万一、そのフォルダー内のBOOKが開いていても1枚目のシートのデータを読み込み後、閉じられてしまいます。 BOOKが開いていれば、その開いていたBOOKは閉じず、先に進むようにするにはどのように直せばいいでしょうか? Sub TEST01()   Dim mb As Workbook, wb As Workbook   Dim myfd As String, fnme As String, ans As Byte, i As Long      ans = MsgBox("集計用フォルダーには回収したアンケートファイルとこの集計用ファイルしかないですね?", vbYesNo + vbQuestion, "( ̄∇ ̄) ? ")   If ans = vbNo Then     MsgBox "それじゃだめです。", vbCritical, "Σ( ̄ロ ̄lll)"     Exit Sub   End If      Set mb = ThisWorkbook   myfd = mb.Path   fnme = Dir(myfd & "\*.xls")      Do Until fnme = Empty     If fnme <> mb.Name Then       Set wb = Workbooks.Open(myfd & "\" & fnme)       i = i + 1       mb.Sheets(1).Cells(i, 1) = wb.Sheets(1).Range("S10")       wb.Close (False) '保存せずに閉じる     End If     fnme = Dir   Loop        Set mb = Nothing   Set wb = Nothing   MsgBox i End Sub

  • Accessフォームの作成

    Accessで作成されているシステムの ファイル取り込みフォームにある実行ボタンを押下すると、 下記のメッセージが表示されます。 「select case に対応する case がみつからない。」 どこかで指定しないといけないのでしょうか? Private Sub Cmd実行_Click() On Error GoTo Err Dim StrSql As String Dim IntNDCnt As Integer Dim IntNTCnt As Integer '確認メッセージの出力 If MsgBox("処理を開始します。よろしいですか?", vbInformation + vbYesNo, "データ取込処理") = vbNo Then Exit Sub End If '対象データ別の処理実行 Select Case Me.Cmb対象.ListIndex Case -1 'エラー MsgBox "読込むデータを指定してください", vbCritical, "データ取込処理" Exit Sub Case 0 '全データ If F_手数料明細読込() = False Then Exit Sub End If If F_奨励金読込() = False Then Exit Sub End If If F_減額読込() = False Then Exit Sub End If If F_預り金読込() = False Then Exit Sub End If Case 1 '手数料データ If F_手数料明細読込() = False Then Exit Sub End If Case 2 '奨励金データ If F_奨励金読込() = False Then Exit Sub End If Case 3 '減額データ If F_減額読込() = False Then Exit Sub Case 4 '預り金データ If F_預り金読込() = False Then Exit Sub End If End Select 今は、Case 4が黄色に反転します。

  • エラー内容が分かりません

    ACCESS VBAの独学を始めました。テキストどうりにコードを入力しているのですが、以下のエラーがでていまいます。 プロシージャの宣言がイベントまたはプロシージャの定義と一致していません 入力内容は以下のとおりです Private Sub 閉じる_Click(cancel As Integer) Dim sts As Integer sts = MsgBox("終了しますか?", vbYesNo) If (sts = vbNo) Then cancel = True Else DoCmd.Close End If End Sub (cancel as ・・・)を消去すると、エラーはでません。 なぜなのか分からず質問しました。 すみませんが、よろしくお願いいたします。

  • ファイルオープンの速度を速くするには?

    よろしくお願いします。 下記コードでabc.csvを選択すると、Excelツールバーの”開く”で行う場合よりかなり時間がかかります。速度を早くする方法を教えて頂けないでしょうか。 Option Explicit Option Compare Text Sub Start_Click() Dim Fname As String Dim MBErr As Integer MsgBox "abc.csv を選択して下さい" Start: Fname = Application.GetOpenFilename("CSVファイル,*.csv") If Not Right(Fname, 7) = "abc.csv" Then   MBErr = MsgBox("ファイル名が違うか、ファイルが選択されていません" _          & Chr(13) & Chr(13) & "abc.csv を選択して下さい", 21)   If MBErr = 4 Then     GoTo Start   Else     Exit Sub   End If End If Workbooks.Open Fname End Sub