【教學】自訂可以監控所有活頁簿的Application事件 / 增益集



贊助商連結


leonchou
2005-10-17, 10:06 PM
http://www.pczone.com.tw/showthread.php?t=67851

因為我有多檔案都要做備份,有變法不必每開一個檔就要重作一次嗎...
自訂一個可以監控所有活頁簿的Application事件,再做成增益集。

開啟新活頁簿,按 Alt-F11 切換至程式編輯器。
插入 > 物件類別模組 (預設名稱為 Class1)。
此時會開啟一個空白的程式編輯區,請輸入以下程式碼:
Public WithEvents App As Application
註: App 是自訂名稱。這句意思是自訂一個含有事件的Application物件。
按下 Enter 後,編輯區左上方的物件選單中會多出一個 App 。
點選 App,則右上方的選單會列出這個Application物件可用的事件。
在可用事件中點選 WorkbookBeforeSave,則會在編輯區產生一個空的事件:
Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
乍看很像上面寫的 Workbook_BeforeSave 事件,差別就在於 Workbook_BeforeSave 只能監控程式所在活頁簿的存檔,而這個 App_WorkbookBeforeSave 可監控所有活頁簿的存檔動作。
現在可把另存備份的程式碼套入這個事件.. 但是要稍改一下:
Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Wb.SaveCopyAs "C:\TEMP\" & Wb.Name
End Sub
接著再於程式編輯器功能表 插入 > 模組,在新開出的編輯區輸入以下程式:
Public xlApp As New Class1 '宣告 xlApp 為上面自訂的物件模組

Sub Auto_Open() 'Auto_Open會在此檔開啟時自動執行
  Set xlApp.App = Application
  '把自訂模組的 App 設為(也可說連結到)Application物件
End Sub
OK,程式的部分到此為止;按 Alt-Q 離開程式編輯器。
將此檔案存為 增益集 (副檔名為 XLA),並且關閉。
點選功能表 工具 > 增益集... > 瀏覽... 載入剛才做好的增益集。
好了,你可隨意打開其他活頁簿、編輯然後儲存,試試自己做的成果。
當然,你可在第 4、5 步驟選擇其他事件並編寫你想要的程式,享受輕鬆操控所有活頁簿的快感~

你可能覺得:怎這麼麻煩阿??
如同上述的Application物件以及控制項群組物件等等,Office有許多物件和其事件不是預設的,而事件的程式碼又必須依附物件模組,所以必須自訂物件模組。這些並非常用功能,但VBA仍然保留了自訂與延伸的空間給使用者。
而且我寧願花時間寫教學,也不要給現成,讓問的人知其然不知所以然...
希望對大家有幫助!

贊助商連結


mixmaster
2005-10-17, 11:01 PM
http://www.pczone.com.tw/showthread.php?t=67851

自訂一個可以監控所有活頁簿的Application事件,再做成增益集。

開啟新活頁簿,按 Alt-F11 切換至程式編輯器。
插入 > 物件類別模組 (預設名稱為 Class1)。
此時會開啟一個空白的程式編輯區,請輸入以下程式碼:
Public WithEvents App As Application
註: App 是自訂名稱。這句意思是自訂一個含有事件的Application物件。
按下 Enter 後,編輯區左上方的物件選單中會多出一個 App 。
點選 App,則右上方的選單會列出這個Application物件可用的事件。
在可用事件中點選 WorkbookBeforeSave,則會在編輯區產生一個空的事件:
Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
乍看很像上面寫的 Workbook_BeforeSave 事件,差別就在於 Workbook_BeforeSave 只能監控程式所在活頁簿的存檔,而這個 App_WorkbookBeforeSave 可監控所有活頁簿的存檔動作。
現在可把另存備份的程式碼套入這個事件.. 但是要稍改一下:
Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Wb.SaveCopyAs "C:\TEMP\" & Wb.Name
End Sub
接著再於程式編輯器功能表 插入 > 模組,在新開出的編輯區輸入以下程式:
Public xlApp As New Class1 '宣告 xlApp 為上面自訂的物件模組

Sub Auto_Open() 'Auto_Open會在此檔開啟時自動執行
  Set xlApp.App = Application
  '把自訂模組的 App 設為(也可說連結到)Application物件
End Sub
OK,程式的部分到此為止;按 Alt-Q 離開程式編輯器。
將此檔案存為 增益集 (副檔名為 XLA),並且關閉。
點選功能表 工具 > 增益集... > 瀏覽... 載入剛才做好的增益集。
好了,你可隨意打開其他活頁簿、編輯然後儲存,試試自己做的成果。
當然,你可在第 4、5 步驟選擇其他事件並編寫你想要的程式,享受輕鬆操控所有活頁簿的快感~

你可能覺得:怎這麼麻煩阿??
如同上述的Application物件以及控制項群組物件等等,Office有許多物件和其事件不是預設的,而事件的程式碼又必須依附物件模組,所以必須自訂物件模組。這些並非常用功能,但VBA仍然保留了自訂與延伸的空間給使用者。
而且我寧願花時間寫教學,也不要給現成,讓問的人知其然不知所以然...
希望對大家有幫助!

太棒囉!你真是個好人... :jump2:
thanks!