Workbook_Open 自動的に閉じる

Workbook_Open 自動的に閉じる
Workbook_Open 自動的に閉じる

イベントマクロ 13回

指定時間が経過したら自動的にブックを閉じる

今回のイベントマクロは、Workbook_Open イベントを使って、開いたブックを、指定時間が経過したら閉じるといものです。
使うメソッドはApplicationオブジェクトのOnTimeメソッドです。
これは自分だけが使うブックで練習用に作ってみてください。

OnTimeメソッド

OnTimeメソッドは、Applicationのメソッドです。

OnTimeメソッドの構文
 Application.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

OnTimeメソッドの引数

引数名 説明
EarliestTime プロシージャを実行する時刻を指定します。
Procedure 実行するプロシージャ名を指定します。
LatestTime (省略可能)プロシージャを実行できる最も遅い時刻を指定します。
たとえば 、LatestTime が EarliestTime + 30 に設定され、Microsoft Excel が Ready、Copy、Cut、または Findモードに設定されていない場合、別のプロシージャが実行されているため、Excel は最初のプロシージャが完了するまで 30 秒待機します。 30 Excel準備完了モードではない場合、プロシージャは実行されません。 この引数を省略すると、Excelが実行されるまで待機します。
Schedule (省略可能)新しい OnTime プロシージャを設定するには、True を指定。
直前のプロシージャの設定を解除するには、False を指定します。既定値は True です.

時間が経過したら自動的にブックを閉じる

1. 時間を指定するために、ブックを開いた時の時間をNowで取得します。それに指定した時間をプラスした時間、それが指定時間となります。

Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("00:00:30"), _
    "CloseBook", Now + TimeValue("00:01:00")
End Sub

第1引数には Now + TimeValue("00:00:30") と指定し、第二引数で実行するプロシージャ名を指定しています。CloseBookという標準モジュールに書いたマクロです。
さらに第3引数に、実行できる最も遅い時間として、Now + TimeValue("00:01:00")と指定しています。第
4引数は省略しています。


Workbook_Open 自動的に閉じる-1

2. そしてこれは時間になったら実行するマクロです。標準モジュールに記述しておきます。

Sub CloseBook()
    If ThisWorkbook.Saved = False Then _
        ThisWorkbook.Save
    ThisWorkbook.Close
End Sub

Workbook_Open 自動的に閉じる-2

時間が経過したら休憩を促す

3. 夢中になって仕事をしすぎてしまうことのないように、1時間経過したら、休憩を促すようにするマクロにしてみます。

Private Sub Workbook_Open()
    Application.OnTime Now + TimeValue("01:00:00"), _
    "Takeabreak", Now + TimeValue("01:02:00")
End Sub
Sub Takeabreak()
    MsgBox "もう1時間も働いています。休憩の時間です。"
End Sub

Workbook_Open 自動的に閉じる-3

つぎはブックが閉じる前に処理を実行するBeforeCloseイベン卜を紹介します。

こちらもおすすめ