VBA

【ExcelVBA】指定日時以外は開けないブック ~残業させないぞ②~

上司
上司
もりさん、聞いておくれ。

例の部下の残業時間が以前より増えているんだ。いったいどうなってるんだね?

もり
もり
ええ?定時外は実行できないマクロを作ったのに・・・

ちょっと本人に事情を聞いてみますね。

前回のあらすじ

とある会社に「残業したい部下」がいた。困り果てた上司が、この部下をなんとか定時で帰らせようと「もり」に相談を持ちかける。

【ExcelVBA】指定日時以外の実行を禁止するマクロ ~残業させないぞ①~

もりが「定時外は実行できないマクロ」を作るも、逆効果。

残業したい部下
残業したい部下
ふーん、マクロが動かないなら手作業でやればいいな

おっ、ますます残業代稼げちゃうぞ(ぐふふ)

もり
もり
コラーっ!早く帰りなさーい!

もり、再発防止策を考えます

上司
上司
おい、もりさん。マクロが使えなくても、ブックが開けたら意味ないだろ。

ちゃんと対策をしておくれ

もり
もり
たしかに・・・そうですね(ん?なんで私が怒られるパターン?)

定時外はブックを開けないようにしちゃうわよ!

イベントプロシージャWorkbook_Openを使う!

Workbook_Openとは、ブックが開かれた時に自動で起動するイベントプロシージャです。

標準モジュールではなく、「ThisWorkbook」に記述します。

イベントプロシージャはThisWorkBookに記述する

ブックを開くと、マクロが実行されてmsgboxが登場します。

もり
もり
このイベントプロシージャを利用するよ!

Workbook_Openでブックを閉じる!

イベントプロシージャWorkbook_Openはブックが開かれた時に起動します。

そこで、「Workbook_Openプロシージャ」に「ブックを閉じる処理」を記述します。

ユーザがブックを開く
→Workbook_Openが起動する
→Workbook_Openに記述されている処理によって、ブックが閉じられる

もり
もり
自分で書いてて思うだけど、こんなマクロ作って誰得なんだろうね?

ThisWorkbook.Closeでブックを閉じる

※このコードを書いてブックを保存&閉じてしまうと、二度とそのブックを開けなくなるのでご注意ください。

動作がこちら!

残業したい部下
残業したい部下
むむっ・・・開けないぞ

Application.QuitでExcelを終了する

Excelアプリケーションを強制終了する方法もあります。

※このコードを書いてブックを保存&閉じてしまうと、二度とそのブックを開けなくなるのでご注意ください。

動作がこちら!

残業したい部下
残業したい部下
なんだこれは!むごいな

指定の日時以外はブックを開けないようにするマクロ

イベントプロシージャWorkbook_Openに「指定時間外の場合はブックを閉じる処理」を記述すればOKですね!

これで、定時外にブックを開いても、自動で閉じてしまうマクロの完成です!

メッセージダイアログ右上の×印で閉じても、同様にブックが閉じられてしまいます。

残業したい部下、あきらめない

残業したい部下
残業したい部下
おい、こんなマクロ作って、おまえ暇なのか?

その腕、もっと世間様の役に立つ仕事に使ったらどうだ?

もり
もり
あんたを帰らせるために作ってるんでしょーが!!(怒)

 

この部下、まだ何か考えているようです。

 

残業したい部下
残業したい部下
そうか。「定時後だと開けない」ということは、

「定時になる前に」ブックを開いておけばいいんだな!

もり
もり
コラーっ!早く帰りなさーい!

 

(次回へ続く)