• 締切済み

メッセージBOXの「はい」「いいえ」の処理について

お世話になっております。 エクセルマクロで処理を行うときに メッセージBOXにて「はい」か「いいえ」のボタンを押して 実行か中断の処理を行なっていたいのですが、 「いいえ」を押しても処理が実行されてしまいます。 以下で作成しております。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub IP呼び出し() Dim keizoku As Integer Dim rc As Long rc = MsgBox("処理を続けますか?", vbYesNo + vbQuestion) If rc = vbYes Then MsgBox "処理を続けます", vbInformation Else MsgBox "処理を中止します", vbCritical End If Dim Wsh, wExec, cmd, rRes, i, j Dim sBuf() As String Set Wsh = CreateObject("WScript.Shell") For i = 2 To Cells(Rows.Count, 3).End(xlUp).Row Set wExec = Wsh.exec("%ComSpec% /c nslookup " & Cells(i, 3)) Do While wExec.Status = 0 DoEvents Loop Sleep 1 rRes = wExec.StdOut.ReadAll 'MsgBox rRes sBuf = Split(rRes, vbCrLf) For j = 0 To UBound(sBuf) If Left(sBuf(j), 5) = "Name:" Or Left(sBuf(j), 3) = "名前:" Then Cells(i, 18) = Trim(Right(sBuf(j), Len(sBuf(j)) - 5)) End If Next j Next i MsgBox "ドメインを確認して下さい。", vbOKOnly, "マクロが終了しました" End Sub Excel2010で行なっております。 ご教授の程、よろしくお願いいたします。

みんなの回答

  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.2

>rc = MsgBox("処理を続けますか?", vbYesNo + vbQuestion) >If rc = vbYes Then >MsgBox "処理を続けます", vbInformation >Else >MsgBox "処理を中止します", vbCritical >End If まあもっと言ってしまえば、一つ目のMSGBOXで問い合わせを行いボタンを押させたのに 更に2つ目3つ目のMSGBOXを出すのは邪魔くさい仕様で、利用者からは絶対に改善要求がでる そんなんなら、そのif文では中止の条件か?だけ判断して中止なら処理を終了させて「中止しました」という表示にする そうすれば処理を継続した側の最後に表示される『マクロが終了しました』というモノと対応が取れて 利用者には分かり易いだろうなぁ

noname#189141
noname#189141
回答No.1

> If rc = vbYes Then > MsgBox "処理を続けます", vbInformation > Else > MsgBox "処理を中止します", vbCritical > End If メッセージを変えているだけで処理が中止されてませんが? メッセージの後に処理を中止する処理を入れてください。

関連するQ&A

  • エクセルVBAの繰り返し処理の質問

    C列にある項目とG列にある項目を比較して、 一致し、H列にある数字が10以上ならば、B列にフラグ1を立てる という処理を行いたいんですが、 下記ぐらいまでしか作れず、うまくいきません・・・ Sub フラグを立てる処理() Dim i As Integer Dim j As Integer Dim k As Integer i = 1 j = 1 Do j = j + 1 Do i = i + 1 If Cells(j, 8) > 9 Then Cells(i - 1, 4) = 1 End If Loop Until Cells(i, 3) <> Cells(j, 7) Or Cells(i, 3) = "" Loop Until Cells(j, 7) = "" End Sub わかる方がいらっしゃいましたら、お願いします。

  • 【Excelマクロ】もっと頭の良い書き方って無いかな?

    5行空白列があったらそこで処理を終わりたいんですが、もっといい書き方はないでしょうか? 下記が私の考えた頭の悪いやり方です。 Sub macro() Dim i As Integer For i = 1 To 1000 If Cells(i, 1) = "" Then  If Cells(i + 1, 1) = "" Then   If Cells(i + 2, 1) = "" Then    If Cells(i + 3, 1) = "" Then     If Cells(i + 4, 1) = "" Then      If Cells(i + 5, 1) = "" Then       MsgBox (i - 1 & "行目で終わりです")       Exit For      End If     End If    End If   End If  End If End If Next End Sub

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • メッセージボックスについて。

    上司に言われた締め切りがあと4日になってしまいました。 在庫管理で在庫残高シートに次のプログラムをはってみました。 Private Sub Worksheet_Change(ByVal Target As range) Dim clm As Integer '変化したセルの列 Dim row As Integer '変化したセルの行 Dim counter As Integer '不足数 clm = Target.Column row = Target.row If Worksheets("在庫残高").Cells(row, clm) < Worksheets("在庫限界入力").Cells(row, clm) And Worksheets("在庫残高").Cells(row, clm) > 0 Then counter = Worksheets("在庫限界入力").Cells(row, clm) - Worksheets("在庫残高").Cells(row, clm) MsgBox counter & "本在庫不足", vbOKOnly, "注意" Else If Worksheets("在庫残高").Cells(row, clm) < 0 Then MsgBox "在庫がありません", vbOKOnly, "警告" End If End If End Sub アクティブになってる入力シートに入力したときに、アクティブシートにメッセージボックスを出したいのですが、どうすればよいでしょう。複数の入力シートに これを全て貼り付けることも考えましたが、入力シートの何個かのセルが、 在庫残高シートの一つのセルに参照されるようになっているので、そうしないほうが、 いいんじゃないかなとおもいました。 よろしくお願いします。

  • VBA どこでもセル選択

    教えて頂いたVBAなのですがもう一つ Sub Macro1() Dim Ws01 As Worksheet Dim Counter As Long, i As Long, j As Long Dim INP As String Set wS = Worksheets("Sheet4") wS.Cells.ClearContents For i = 3 To ActiveSheet.UsedRange.Rows.Count INP = "" For j = Selection(1).Column To Selection(Selection.Count).Column If Cells(i, j) = 1 Then INP = INP & Cells(2, j) & "," End If Next j Counter = Counter + 1 If INP <> "" Then wS.Cells(Counter, "A") = Left(INP, Len(INP) - 1) End If Next i End Sub -------------------------------------------------------------- For i = 3 のところを3としないでどのセル(行)にも対応させたいのですが どうすればいいでしょうか?

  • Excel VBAで検索(Win2000 Excel2000)

    現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub

  • loop終了後のセルの一個右から同様のloopを行う方法

    ・loop終了後のセルの一個右から同様のloopのプログラムを組むのが目的です。 ・データはA列にランダムに数字が入っているものとします。 ・条件式としては基準値より小さな数字が一個下のセルにあったら↓を表示して、さらに下に行くという風にして、基準よりも多くなったところでloopがストップする設定です。 ・困っているところをうまく表現できてないかも知れませんが、よろしくお願いします。 --------------------------- Sub 比較() Dim i As Integer Dim j As Integer Cells(1, 2).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R1C1,""→"",""↓"")" i = 1 Do While Cells(i, 2).Value <> "" If Cells(i, 2).Value = "↓" Then Cells(1 + i, 2).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R1C1,""→"",""↓"")" End If i = i + 1 Loop Cells(i - 1, 3).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R" & i - 1 & "C1,""→"",""↓"")" j = 1 Do While Cells(i - 2 + j, 3).Value <> "" If Cells(i - 2 + j, 3).Value = "↓" Then Cells(i - 1 + j, 3).Select ActiveCell.FormulaR1C1 = "=IF(RC1>R" & i - 1 & "C1,""→"",""↓"")" End If j = j + 1 Loop End Sub

  • (VBA) 配列の文字列を昇順で並べ替えたい

    タイトルの通り、配列に格納したファイル名を昇順に並べ替えたいのですが、期待通りに動作しません。 内部コード(ユニコード?)順には並んでいるようですが、エクスプローラの名前順と同等にはなりません。 どのようにしたら、配列のファイル名をエクスプローラと同じように並べ替えできますか? (テストに使用したコード) Public Sub Test1() Dim FileNames() As String Dim WSH As Object Dim MyPathName As String Dim MyFileName As String Dim i As Integer Dim j As Integer '処理対象フォルダを指定 Set WSH = CreateObject("WScript.Shell") MyPathName = WSH.SpecialFolders("MyDocuments") Set WSH = Nothing i = 0 MyFileName = Dir(MyPathName & "\" & "*.*") If MyFileName = "" Then MsgBox "対象ファイルが1つも見つかりません。", , "処理終了" Exit Sub End If 'ファイル一覧を配列に格納 Do Until MyFileName = "" i = i + 1 ReDim Preserve FileNames(1 To i) FileNames(i) = MyFileName MyFileName = Dir Loop '配列を並べ替える For i = 1 To UBound(FileNames) - 1 For j = i To UBound(FileNames) If FileNames(i) > FileNames(j) Then MyFileName = FileNames(i) FileNames(i) = FileNames(j) FileNames(j) = MyFileName End If Next j Next i End Sub ※以降の処理は、Excel で処理するか Access で処理するかまだ決めていません。  (投稿文字数の関係で詳細は省略)

  • 未記入箇所がある場合メッセージボックス

    お世話になります。 以前https://okwave.jp/qa/q9623125.htmlで質問させて頂きました。 ベストアンサー様や他の回答者様のおかげで解決しましたが、 選択セルを増やさないといけなくなりました。 ベストアンサー様の Dim i As Long For i = 10 To 24 If MFind(i) = False Then Exit Sub Next For i = 28 To 39 If MFind(i) = False Then Exit Sub Next 'VBA高速(終わり) Application.ScreenUpdating = True End Sub Function MFind(ByVal i As Long) As Boolean Dim URange As Range MFind = True Set URange = Union(Range(Cells(i, "B"), Cells(i, "C")), Cells(i, "N"), Range(Cells(i, "Q"), Cells(i, "R"))) If WorksheetFunction.CountA(URange) > 0 And _ WorksheetFunction.CountA(URange) < URange.Count Then MsgBox i & "行に未記入箇所があります。", vbInformation MFind = False End If End Function を使わせて頂いていますが、 この参照セルを『B C N Q R』ではなく『B C D H J K M N O P Q R』にするには どうすれば良いでしょうか? ※過去の質問にも記載していますが、1行だけではありません。 ※B~Rのセルで行により結合させているセルもあります。

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

    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が反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。

専門家に質問してみよう