|
複数のブックで同じ内容のイベントを利用したい場合、それぞれのブックにその内容を記述していてはすっきりしません。この場合、Workbook オブジェクトの上位にある Application オブジェクトが利用できますが、このモジュールは標準では用意されていません。クラスモジュールを自分で作成する必要があります。 このサンプルでは、ブックの保存時にブックのサイズとその増減を表示できるようにします。' Class1 ' というオブジェクト名でクラスモジュールを挿入し(新規の挿入であれば標準でこの名前です)、以下を記述します。 Public WithEvents App As Application Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, _ ByVal SaveAsUI As Boolean, Cancel As Boolean) WbFullName = Wb.FullName If InStr(1, WbFullName, ".xls", 1) = 0 Then Exit Sub ' 新規のブックであれば終了 BeforeFileLen = FileLen(Wb.FullName) Application.OnTime Now + TimeValue("00:00:01"), "ShowFileLen" End Sub 以下を標準モジュール内に記述します。 Public X As New Class1 Public WbFullName As String Public BeforeFileLen As Single Sub InitializeApp() Set X.App = Application End Sub Sub ShowFileLen() Dim AfterFileLen As Single Dim Difference As Single Dim PlusMinus As String AfterFileLen = FileLen(WbFullName) Difference = AfterFileLen - BeforeFileLen If Difference > 0 Then PlusMinus = "+" ElseIf Difference = 0 Then PlusMinus = "±" End If MsgBox WbFullName & " : " & ConvertBite(AfterFileLen) & _ "(" & PlusMinus & ConvertBite(Difference) & ")", vbInformation End Sub Function ConvertBite(FLen As Single) As String If FLen < 1048576 Then ConvertBite = Format(FLen / 1024, "#,##0.0") & "KB" Else ConvertBite = Format(FLen / 1048576, "#,##0.00") & "MB" End If End Function InitializeApp を Workbook_Open イベント内に記述し、ファイルの種類を ' Microsoft Excel アドイン (*.xla)' で XLStart フォルダに保存すれば完成です。 ちなみに同じイベントの場合、Workbookのイベントが終了してから、Applicationのイベントが実行されます。 |