例の部下の残業時間が以前より増えているんだ。いったいどうなってるんだね?
ちょっと本人に事情を聞いてみますね。
Contents
前回のあらすじ
とある会社に「残業したい部下」がいた。困り果てた上司が、この部下をなんとか定時で帰らせようと「もり」に相談を持ちかける。
【ExcelVBA】指定日時以外の実行を禁止するマクロ ~残業させないぞ①~
もりが「定時外は実行できないマクロ」を作るも、逆効果。
おっ、ますます残業代稼げちゃうぞ(ぐふふ)
もり、再発防止策を考えます
ちゃんと対策をしておくれ
定時外はブックを開けないようにしちゃうわよ!
イベントプロシージャWorkbook_Openを使う!
Workbook_Openとは、ブックが開かれた時に自動で起動するイベントプロシージャです。
標準モジュールではなく、「ThisWorkbook」に記述します。
1 2 3 4 5 |
Private Sub Workbook_Open() MsgBox "ファイルが開かれました!" End Sub |
ブックを開くと、マクロが実行されてmsgboxが登場します。
Workbook_Openでブックを閉じる!
イベントプロシージャWorkbook_Openはブックが開かれた時に起動します。
そこで、「Workbook_Openプロシージャ」に「ブックを閉じる処理」を記述します。
ユーザがブックを開く
→Workbook_Openが起動する
→Workbook_Openに記述されている処理によって、ブックが閉じられる
ThisWorkbook.Closeでブックを閉じる
※このコードを書いてブックを保存&閉じてしまうと、二度とそのブックを開けなくなるのでご注意ください。
1 2 3 4 5 6 7 |
Private Sub Workbook_Open() '確認メッセージを表示しない Application.DisplayAlerts = False ThisWorkbook.Close End Sub |
動作がこちら!
Application.QuitでExcelを終了する
Excelアプリケーションを強制終了する方法もあります。
※このコードを書いてブックを保存&閉じてしまうと、二度とそのブックを開けなくなるのでご注意ください。
1 2 3 4 5 6 |
Private Sub Workbook_Open() Application.DisplayAlerts = False Application.Quit End Sub |
動作がこちら!
指定の日時以外はブックを開けないようにするマクロ
イベントプロシージャWorkbook_Openに「指定時間外の場合はブックを閉じる処理」を記述すればOKですね!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Private Sub Workbook_Open() Dim TodaysDay As Long TodaysDay = Weekday(Date) '今日の曜日を取得 Dim CurrentTime As Date CurrentTime = Time '現在時刻を取得 Dim OpeningTime As Date, FinishingTime As Date OpeningTime = "9:00:00" '始業時刻の設定 FinishingTime = "18:00:00" '終業時刻の設定 If CurrentTime < OpeningTime Or CurrentTime > FinishingTime Or _ TodaysDay = vbSaturday Or TodaysDay = vbSunday Then Application.DisplayAlerts = False '確認メッセージを表示しない MsgBox "定時外のためこのブックは開けません", vbCritical, "早く帰りましょう" If Workbooks.Count = 1 Then 'このブックのみを開いてる場合、Excelを終了 Application.Quit Else '他のブックを開いてる場合、このブックのみを閉じる ThisWorkbook.Close End If End If End Sub |
これで、定時外にブックを開いても、自動で閉じてしまうマクロの完成です!
メッセージダイアログ右上の×印で閉じても、同様にブックが閉じられてしまいます。
残業したい部下、あきらめない
その腕、もっと世間様の役に立つ仕事に使ったらどうだ?
この部下、まだ何か考えているようです。
「定時になる前に」ブックを開いておけばいいんだな!
(次回へ続く)