よろしくお願いいたします!
セル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
No.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
ありがとうございます。
ほぼ希望通りにメッセージ処理できました。
しかし、常時メッセージ表示してしまい「セルBC12:BC24に文字があれば」の構文が効いていないような・・・
ちなみにそこには、IF関数が入っていますがそれが原因でしょうか?
No.1
- 回答日時:
何処から突っ込めばいいのか、迷ってしまいますが・・・。
MsgBox で、「vbCritical+vbCritical」だとOKボタンしか表示されませんよね。
再試行とキャンセルなら、「vbRetryCancel」でしょ!!
その上で、こんな風に書きます。
If MsgBox("時刻を入力ください!", vbRetryCancel, "入力チェック") = vbCancel Then
MsgBox "キャンセル時の処理"
Else
MsgBox "キャンセル以外の時の処理"
End If
さて、本題です。
「入力チェックに引っかかった時、保存するか否かを選択させたい」ということだと思うのですが、Workbook_BeforeCloseイベントプロシジャだと、例えば、「上書き保存」された場合、チェックを通らず、そのまま保存されてしまうような気がします。
よって、Workbook_BeforeSaveイベントプロシジャにもチェックのロジックを入れる必要があるかもです。
しかし、Workbook_BeforeSaveイベントプロシジャの場合、「Cancel = True」としても保存されなくなるだけで、「何もしないでシートに戻る」ような動作にはならないようです。
さて、どうしたものか・・・。力不足で申し訳ありません。強者の回答をお待ちください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
A1セルに入力したら、入力時間...
-
参照先セルに値が入っていない...
-
IF関数で0より大きい数値が入力...
-
Excelでセルに入力されたカラー...
-
Excelで同じセルに箇条書きをし...
-
エクセルで既に入力してある文...
-
Excelでロト6の数字を決めたい
-
自分のEXCELに株価を自動的に取...
-
入力したところまでを自動的に...
-
【Excel】セル内の時間帯が特定...
-
バーコードが読み取れない原因...
-
エクセルで複数の条件で掛け算...
-
お世話になります。 Excel VBA...
-
エクセルの数式がかぶって、選...
-
エクセルで時間の判定をしてい...
-
excel 関数にて文字を0として認...
-
Excel:文字と数字の組合せ、次...
-
ExcelでA1に「年」B2に「干支」...
-
空白でないセルの値を返す方法...
-
値を入力後、自動的にアクティ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
A1セルに入力したら、入力時間...
-
Excelで同じセルに箇条書きをし...
-
参照先セルに値が入っていない...
-
IF関数で0より大きい数値が入力...
-
Excel:文字と数字の組合せ、次...
-
エクセルで既に入力してある文...
-
値を入力後、自動的にアクティ...
-
エクセルの数式がかぶって、選...
-
エクセルで時間の判定をしてい...
-
空白でないセルの値を返す方法...
-
Excelでセルに入力されたカラー...
-
yyyy/mm/ddからyyyy/mmへの変換
-
入力したところまでを自動的に...
-
excel 関数にて文字を0として認...
-
バーコードが読み取れない原因...
-
エクセルで複数の条件で掛け算...
-
ExcelVBAでセルを編集状態にす...
-
エクセルで、特定のセルの内容...
-
【vba】指定範囲の中に任意の文...
-
エクセルで10分ごとの時刻の...
おすすめ情報