プロが教えるわが家の防犯対策術!

よろしくお願いいたします!

セルBC12:BC24に文字があればメッセージを表示するようにしましたが、
「再試行」ボタン押下で、何もしないでシートに戻る。(既入力データはそのまま)
「キャンセル」ボタン押下で、保存しないでブックを閉じる。(当然、既入力データはおじゃん)
・・・としたいのですが下記記述は中途半端だと思います。
どうかお手助けいただきたく存じます。

ーーーーーーーーーーーーーーーーーー
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If WorksheetFunction.CountA(Worksheets("Sheet1").Range("BC12:BC24")) > 0 Then
MsgBox "時刻を入力ください!",vbCritical+vbCritical, "入力チェック"
End If
ActiveWorkbook.Close SaveChanges:=False
End Sub

A 回答 (2件)

こんばんは!



横からお邪魔します。
実はこちらに投稿しようとしたコードをまったく関係ない質問者さんの方に投稿していました。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 With ThisWorkbook.Worksheets("Sheet1")
  If WorksheetFunction.CountA(.Range("BC12:BC24")) > 0 Then
   If MsgBox("時刻が未入力です。" & vbCrLf & "セルを選択しますか?", vbYesNo) = vbYes Then
    .Range("BC1").Select '//←とりあえずBC1セルを時間入力セルとしている★//
    Cancel = True
   Else
    Application.DisplayAlerts = False
     ThisWorkbook.Close savechanges:=False
    Application.DisplayAlerts = True
   End If
  End If
 End With
End Sub

※ とりあえず、メッセージボックスで「はい」を選択した場合に
「時刻入力セル」←BC1セルとしています を選択するようにしています。

お望み通りの動きにならなかったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
ほぼ希望通りにメッセージ処理できました。
しかし、常時メッセージ表示してしまい「セルBC12:BC24に文字があれば」の構文が効いていないような・・・
ちなみにそこには、IF関数が入っていますがそれが原因でしょうか?

お礼日時:2020/06/03 10:59

何処から突っ込めばいいのか、迷ってしまいますが・・・。



MsgBox で、「vbCritical+vbCritical」だとOKボタンしか表示されませんよね。
再試行とキャンセルなら、「vbRetryCancel」でしょ!!

その上で、こんな風に書きます。
If MsgBox("時刻を入力ください!", vbRetryCancel, "入力チェック") = vbCancel Then
MsgBox "キャンセル時の処理"
Else
MsgBox "キャンセル以外の時の処理"
End If


さて、本題です。

「入力チェックに引っかかった時、保存するか否かを選択させたい」ということだと思うのですが、Workbook_BeforeCloseイベントプロシジャだと、例えば、「上書き保存」された場合、チェックを通らず、そのまま保存されてしまうような気がします。
よって、Workbook_BeforeSaveイベントプロシジャにもチェックのロジックを入れる必要があるかもです。
しかし、Workbook_BeforeSaveイベントプロシジャの場合、「Cancel = True」としても保存されなくなるだけで、「何もしないでシートに戻る」ような動作にはならないようです。

さて、どうしたものか・・・。力不足で申し訳ありません。強者の回答をお待ちください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
「上書き保存」の場合をまったく想定していませんでした。
アドバイス感謝いたします!!

お礼日時:2020/06/03 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!