[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『メッセージボックスの使い方』(らん)
初めましての質問です。
ファイルを閉じようとしたとき、
指定したセルに指定した文字が入力されているとき、
別で指定したセルが空欄だったらそのセルを赤くして
注意メッセージを表示したいです。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("C23").Value = "はい" Then
If Range("G25").Value = "" Then Range("G25").Interior.ColorIndex = 3 MsgBox "赤い箇所が未入力です。" Cancel = True End If End If If Range("D34").Value = "その他" Then If Range("E40").Value = "" Then Range("E40").Interior.ColorIndex = 3 MsgBox "赤い箇所が未入力です。" Cancel = True End If End If If Range("D34").Value = "その他" Then If Range("E42").Value = "" Then Range("E42").Interior.ColorIndex = 3 MsgBox "赤い箇所が未入力です。" Cancel = True End If End If If Range("C45").Value = "その他" Then If Range("G47").Value = "" Then Range("G47").Interior.ColorIndex = 3 MsgBox "赤い箇所が未入力です。" Cancel = True End If End If If Range("C54").Value = "その他" Then If Range("G56").Value = "" Then Range("G56").Interior.ColorIndex = 3 MsgBox "赤い箇所が未入力です。" Cancel = True End If End If If Range("C59").Value = "はい" Then If Range("G61").Value = "" Then Range("G61").Interior.ColorIndex = 3 MsgBox "赤い箇所が未入力です。" Cancel = True End If End If End Sub
このようにしたのですが、
これだと、全部該当する場合、6回もメッセージが出てしまいます。
全部該当する場合であっても、メッセージは1回だけにしたいのですが、
どのようにすればよいでしょうか?
教えてください。よろしくお願いいたします。
< 使用 Excel:Excel2007、使用 OS:unknown >
メッセージの回数に関しては、後ほど案をアップしたいと思います。 (その前に 他の回答者さんから回答があるとは思いますが)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
BeforeCloseイベントを使っておられますね。 これは、やめたほうがいいですよ。
ブックをいろいろ変更した、でも、それをチャラにして保存なしで閉じたい、いずれ時間の余裕があるときに 入力しなおそう こんな場合って、しょっちゅうありますよね。
なのに、あそこをいれろ、ここをいれろと うるさく(?)叱られて、かつ Cancel = True ですから すべて、正しく入れるまで、【保存なしで閉じることができません】
やるなら BeforeSave で行うべきでしょうね。
ただ、BeforeSaveの場合、途中の上書き保存のみならず、Xボタンで閉じる、その際に、保存すると指定した時に 実行されるわけですが、そのタイミングでチェックして Cancel = True としても、【保存がキャンセル】されるだけで ブックは、保存なしで閉じられてしまいます。
そのあたりが不都合なら、別途の手立てを考える必要があります。
(β) 2016/04/20(水) 13:52
もう2つ。
ThisWorkbookモジュールに書かれたコードのセル参照は、標準モジュールと同じ扱いで どのシートのセルという指定がない場合、【たまたま、その時に】アクティブになっているシートが対象になります。
コードなでチェックしているセルのシートがどれなのか、シート修飾をして明示すべきですね。
(最悪、プロシジャの最初で 該当のシート.Activate というコードをいれておくと、アップされた記述でもOKですけど)
それと、C45 と C54 それぞれ、その他 かどうか判定していますが、ミスタイプじゃなく C45 と C54 なんですね?
(β) 2016/04/20(水) 13:57
とりあえずコード例です。
イベントは、そちらのコードのまま、BeforeClose にしてあります。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Sheet1").Activate '★対象シート
Range("G25,E40,E42,G47,G56,G61").Interior.ColorIndex = xlNone
If Range("C23").Value = "はい" Then If Range("G25").Value = "" Then Range("G25").Interior.ColorIndex = 3 Cancel = True End If End If If Range("D34").Value = "その他" Then If Range("E40").Value = "" Then Range("E40").Interior.ColorIndex = 3 Cancel = True End If End If If Range("D34").Value = "その他" Then If Range("E42").Value = "" Then Range("E42").Interior.ColorIndex = 3 Cancel = True End If End If If Range("C45").Value = "その他" Then If Range("G47").Value = "" Then Range("G47").Interior.ColorIndex = 3 Cancel = True End If End If If Range("C54").Value = "その他" Then If Range("G56").Value = "" Then Range("G56").Interior.ColorIndex = 3 Cancel = True End If End If If Range("C59").Value = "はい" Then If Range("G61").Value = "" Then Range("G61").Interior.ColorIndex = 3 Cancel = True End If End If
If Cancel Then MsgBox "赤い箇所が未入力です。"
End Sub
(β) 2016/04/20(水) 14:18
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.