№0002. Excel VBA-[Excelブックを閉じる時に、Excelマクロを自動的に実行する。]
Excelブックを閉じる時にいつも定型処理がある場合は、Excelマクロを使用すると便利です。
Workbook_BeforeClose()プロシージャ
Excelブックを閉じようとすると、Microsoft ExcelではWorkbook_BeforeCloseイベントが発生します。
今回は、Workbook_BeforeClose()プロシージャに、次の処理を実装した例を掲載します。
なお、Workbook_BeforeClose()プロシージャは、Microsoft Excel ObjectsのThisWorkbookモジュール内に記述します。
- ブックを閉じる時に、必ず任意のワークシートの任意のセルを選択する。
- ブックを閉じようとする日付をログとして、任意のセルに記録する。
- ブックを閉じようとする時刻をログとして、任意のセルに記録する。
- ブックを閉じようとしたユーザー名をログとして、任意のセルに記録する。
- 警告メッセージの出力を抑止する。
- #Ifディレクティブを使用して、デバッグモードと本番モードで動作を変更する。
《ソースコード》
Option Explicit #Const RELEASE_VERSION = 1 ' 本番環境の場合は = 1 Private Sub Workbook_BeforeClose(Cancel As Boolean) ' ブックを閉じる時にマクロを自動実行 Dim strSheetName As String ' ワークシート名を格納する文字型変数 Dim strCellAddress As String ' セルアドレスを格納する文字型変数 strSheetName = "Sheet1" strCellAddress = "A1:A1" With ThisWorkbook.Sheets(strSheetName) .Select ' ブックを開いた時に、必ず任意のワークシートを開く。 .Range("B1:B1").Value = Date ' 指定のセルに、現在日付を格納する。 .Range("B1:B1").NumberFormatLocal = "[$-411]ge.m.d;@" ' 日付セルの書式を、"H13.3.14"にする。 .Range("C1:C1").Value = Time ' 指定のセルに、現在時刻を格納する。 .Range("C1:C1").NumberFormatLocal = "h:mm" ' 時刻セルの書式を、"h:mm"にする。 .Range("D1:D1").Value = Application.UserName ' 指定のセルに、ユーザー名(前回保存者)を格納する。 .Range(strCellAddress).Select ' 必ず任意のセルを指定する。 End With #If RELEASE_VERSION Then ' VBA非デバッグ時 Application.DisplayAlerts = False ' 警告メッセージの出力を抑止する。 ThisWorkbook.Save ' Excelブックを上書き保存する。 #End If End Sub
update:2008.06.20
Copyright (C) 2008 S.IKE