[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『MsgBox表示されたら、EndSabでマクロを終了させる方法』(ちゃんぷる)
お世話になっております
アドバイスの程よろしくお願いします。
以下のような事はできますでしょうか?
同じModule内のマクロを読み込んで処理をさせたいと構想中です。
やりたいことは
Bマクロ処理を行う前に
Aマクロを実行させて、MsgBoxが表示されたら
EndSab出来ますでしょうか?
ちなみに表示内容は
MsgBox"入力ミス発見。入力内容を確認し再実行してください"
・Aマクロ実行
→MsgBox表示 → EndSab(終了)
→MsgBox表示されなかった → Bマクロ実行(処理)
と言った感じです。
どうすればよいのか検討もつかず書き込みしました。
sub 集計()
IF (Aマクロの処理でMsgBoxが表示されたら Then
MsgBox "元のfileを修正してください" '処理中止
Exit Sub'抜ける
EndIF
'※上記でMsgBoxが表示されなければ以下の処理を実行
Bマクロ実行
end sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
ちゃんぷる さん
Callステートメントを知っていますか?
下記のマクロをmoduleに記述した後、 アクティブシートのA1に、 「1」を入力した後にA_Macroを実行してみてください。次に、 「2」を入力した後にA_Macroを実行してみてください。 **************************************** Option Explicit
Sub A_Macro() Dim x As Long'★整数型で定義 x = Range("A1").Value If x = 1 Then MsgBox "表示" Else Call 集計'★集計マクロ(プロシージャ)を実行する End If End Sub
Sub 集計() MsgBox "集計マクロ実行されました" End Sub ****************************************
要約すると、下記になりますでしょうか? Aマクロでの処理に次のようなコードを書きたい ・「MsgBox表示」されたら、終了(【sub 集計】を実行しない) ・「MsgBox非表示」なら、【sub 集計】を実行
どんなときに、AマクロでMsgBoxを表示したいのでしょうか? 上記の例では、x=1のときだけ、MsgBoxを表示しています。 それ以外の★整数(xをLong型で定義しているため)を入れたときは、 集計マクロを実行します。
余談ですが、…。 Call 集計 と書きましたが、 ★引数がある場合は、集計()のカッコ内に引数を記述します。 「参照渡しと値渡し」については、下記を参照 「ByRefとByVal」と同じ意です。 http://officetanaka.net/excel/vba/tips/tips94.htm
(!!!) 2017/02/23(木) 03:31
横から失礼。
To !!!さん
> 余談ですが、…。
余談というより、唐突なコメントで、チャンプルさんも戸惑うんじゃないですか? とくに
>「参照渡しと値渡し」については、下記を参照 >「ByRefとByVal」と同じ意です。
ちゃんぷるさんの質問文にも !!!さんのコメント内にも 「参照渡しと値渡し」という言葉は どこにも登場しないのに、いきなり ・・・については・・・ というくだりが出てますから。
そういう言葉がその前にあって、ちなみに、それについては・・・という説明ならわかりますが。
( β) 2017/02/23(木) 10:00
あのですね。。。。
Msgboxを表示させるかさせないかの判断をするのも「自分」ですよね?
つまり、Msgboxがどうのこうのというより、
「入力ミスがあったかどうか」で、処理を中止するかしないかを判断するってことですよね?
つまり、
sub メイン()
もし、入力にミスがあったら、「中断」 任意の処理を行う End sub
と書けばいいのです。
なので、たとえば、
A1セルの値が1から10の間の数値でなければ、処理したくないなら、
Function ChkValue(ByVal c As Range) As Boolean
Dim l As Long
If IsNumeric(c(1).Value) Then l = c(1).Value Else l = -4000 End If
If l > 0 And l < 11 Then ChkValue = True End If End Function
Sub メイン()
'もし、入力にミスがあったら、「中断」 If ChkValue(Range("A1")) = False Then MsgBox "不正値です" Exit Sub End If
MsgBox "続きの処理" End Sub
FunctionプロシージャでTrueかFalseを返すように自作で関数をつくり、
それの返す答えによって、条件分岐するといいと思います。
(まっつわん) 2017/02/23(木) 10:25
シートに作業セルA1を設けて、入力チェックマクロでエラー時に「1」が入るようにして
アドバイスのコードを使用して以下のようにしました。
バッチリでした。
'-----★以下のメッセージボックスが表示=A1に値1が入る(エラーあり)の場合は処理を終了-----
Dim x As Long '★整数型で定義 Call 請求用_予定重複エラーチェック '呼び出しマクロ(予定に重複がないか再度チェック) 'エラーがあれば、A1に1が入るので・・・ x = Range("A1").Value If x = 1 Then ' '定数に対し値は1が選択 '処理中止 Exit Sub Else '通常処理
※別のマクロ実行で表示される
メッセージボックスの表示有無を取得するコードはあるのでしょうか
探してみましたが、ありませんでした。
何故そのようなことをするのか・・・理由ですが
→別のマクロをCallする理由は、長いコードなので、本体マクロに組み込むのは避けたいからでした。
(ちゃんぷる) 2017/02/23(木) 11:38
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.