Board logo

標題: [轉貼] 自訂Applicatoin事件/監控所有活頁簿/做成增益集 [打印本頁]

作者: Hsieh    時間: 2010-5-1 22:47     標題: 自訂Applicatoin事件/監控所有活頁簿/做成增益集

本帖最後由 Hsieh 於 2010-5-10 15:45 編輯

這個另存備份檔的例子,
是利用 Workbook_BeforeSave 事件 --
http://gb.twbts.com/index.php/topic,1661.0.html

如果有許多檔案都要存備份,難道每個檔都要照作一次嗎??
也許不少人知道有一勞永逸的辦法:
自訂一個可以監控所有活頁簿的Application事件,再做成增益集。

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

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

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

當然,你可在第 4、5 步驟選擇其他事件並編寫你想要的程式,享受輕鬆操控所有活頁簿的快感~

看倌也許覺得:怎麼這樣麻煩阿??
如同上述的Application物件以及之前舉過一些例子的控制項群組物件等等,Office有許多物件和其事件不是預設的,而事件的程式碼又必須依附物件模組,所以必須自訂物件模組。這些並非常用功能,但VBA仍然保留了自訂與延伸的空間給使用者 --
而且只要學會應用,可發揮很大的效益。
作者: HUNGCHILIN    時間: 2010-5-2 17:03

Hsieh 兄
這idea不錯學習
作者: 沙拉油    時間: 2010-5-11 23:27

四年前寫過一個類似的東西,把「儲存資訊」寫在『摘要資訊』裡面,拿出來現醜一下
Excel 2007 及 Excel 2010 應該不能執行吧?!我猜的!因為我還在用 Excel 2003
http://blog.xuite.net/saladoil/excel/7055499
作者: PD961A    時間: 2010-5-13 12:12

四年前寫過一個類似的東西,把「儲存資訊」寫在『摘要資訊』裡面,拿出來現醜一下
Excel 2007 及 Excel 20 ...
沙拉油 發表於 2010-5-11 23:27


請問版主
我有去您說的路徑下載這個檔案測試用
我的是2003可以使用
但是想請問檔案本身設計是直接執行內容嗎?
因為我下載完後..開啟檔案是直接跳到可以儲存副本的畫面選項
使用完後..EXCEL檔案名稱旁邊會有(有設定副本)顯示..
可是因為不知道是自動執行所以重複開3次檔案....
現在工具列上面跑出"設定副本"的圖案--(一共有4個圖案)
請問要如何刪掉那幾個圖案??
我下載的是這個檔案[attach]357[/attach]
謝謝您!
作者: 沙拉油    時間: 2010-5-13 22:51

「增益集」是要透過執行工具 >> 增益集,然後按瀏覽來載入的,不建議直接開啟增益集檔案。

刪除自定義的按鈕可以執行工具 >> 自訂
出現自訂對話方塊後,將工具列上不要的按鈕或功能表上不要的指令拉進自訂對話方塊就會消失的。

作者: PD961A    時間: 2010-5-17 13:19

本帖最後由 PD961A 於 2010-5-17 13:27 編輯

請問沙拉油版主:
您這個程式 " copies_test_001.zip (21.42 KB)" 用於開啟唯讀檔案
它一樣可以執行..只是畫面無法儲存在指定的資料夾中
會顯示請另存新檔的路徑(要重新手動輸入路徑)
請問該如何設定?
謝謝!!
作者: 沙拉油    時間: 2010-5-18 00:20

那個增益集的目的是要讓你「儲存檔案」時,順便在指定的資料夾內儲存一個相同的備份檔
如果你原檔案是以唯讀的方式開啟,那麼不管有沒有那個增益集的存在,你本就無法儲存你以唯讀開啟的檔案對吧?
你要儲存你以唯讀的方式開啟的檔案就只能另存新檔不是嗎?
這方面不是那個增益集的設定值,是作業系統本來就不允許你儲存你以唯讀開啟的檔案吧?!
作者: PD961A    時間: 2010-5-18 08:57

回復 9# 沙拉油


    謝謝沙拉油版主
問這問題...您的解答是一般EXCEL基礎概念..本來就應該要知道

不好意思!
會這樣詢問您的程式
是因為每天開SEVER下資料夾的唯讀檔後..都必須再另存新檔(一天要開3次)
所以向您請益
是否有更好的方式..可以直接儲存檔到指定資料夾中

造成您的困擾
不好意思!!請見諒!
謝謝!!!
作者: 沙拉油    時間: 2010-5-18 22:58

任何有意義的對答都算是一種資訊,也許對電腦高手已經沒有什麼幫助,但是對一些初學者也許還是有用的,這應該不算是「本來就應該要知道」的。

至於您的「每天開SEVER下資料夾的唯讀檔....(一天要開3次)」這個疑問
我想那個增益集是幫不上你的忙的,也許你可以考慮自己寫個巨集來處理您的問題
當然,如果你要修那個增益集來達到你的目的,那麼我是一點都不反對的
該增益集我只寫過一次就沒再修改過,若有興趣想改就改,想增進它能力就去增進能力,我有提供密碼的。
作者: ohsw    時間: 2011-2-23 18:31

各位大大:
用自訂Applicatoin事件/監控所有活頁簿/做成增益集,能做[檔案備份]外,還有哪些能應用???
作者: Hsieh    時間: 2011-2-23 18:48

回復 10# ohsw


    本文的重點是學習利用工作簿的事件,來做類別的應用
從整個基本架構,讓您了解如何建立物件類別,然後利用這個物件類別的共同特性執行類似動作
所以,除了監控活頁簿事件來儲存文件副本外,你可利用這些觀念來架構你所需的任何物件所擁有的共同行為
就看你如何去運用了
作者: ohsw    時間: 2011-2-24 12:31

謝謝!

我是想知道,各位大大過去曾經應用的例子。
作者: handsometrowa    時間: 2013-8-16 10:26

回復 1# Hsieh


    這篇文章已經多年了,但是可否請問H大,
關於物件類別模組  這個東西的定義與使用
有沒有比較可以學習的地方,小弟沒有學過VB
一開始接觸程式就是碰VBA,在看書的過程當中對於物件類別模組的應用與架設真的不太了解

另外也看到您之前的文章
用物件類別模組架設簡單的計算機這個範例
http://forum.twbts.com/viewthrea ... %AB%A5%F3%C3%FE%A7O
說真的應該從何下手閱讀程式碼呢@@?
作者: mhl9mhl9    時間: 2017-5-20 05:04

回復 1# Hsieh
按照版主思路,我做了個文件,該文件不允許插入"sheet".而不影響其他文件正常可以插入新頁[attach]27200[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)