№02. Excel VBA-[Excelブックを閉じる時に、Excelマクロを自動的に実行する | GTZ&RSのブログ

GTZ&RSのブログ

GT-Z&RSでは、コンピュータ関連情報や地域情報を中心に発信しています。

№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