[[20160420131203]] 『メッセージボックスの使い方』(らん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『メッセージボックスの使い方』(らん)

初めましての質問です。

ファイルを閉じようとしたとき、
指定したセルに指定した文字が入力されているとき、
別で指定したセルが空欄だったらそのセルを赤くして
注意メッセージを表示したいです。

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.