事件程序:事件娃惯,操作也。事件程序肥败,因操作而觸發(fā)自動運行程序趾浅。
編寫位置:工作表和工作表的代碼區(qū)
1、Change 事件
當用戶更改工作表中的單元格馒稍,或外部鏈接引起單元格的更改時產(chǎn)生此事件皿哨。
語法
Private Sub Worksheet_Change(ByVal Target As Range)
Target 更改的區(qū)域】昵可以是多個單元格仗颈。本質(zhì)上Target是工作表中的活動變量佛舱,代表著更改的區(qū)域
說明
1、重新計算引起的單元格更改不觸發(fā)本事件挨决∏胱妫可使用 Calculate 事件俘獲工作表重新計算操作。
2脖祈、Change事件肆捕,只要單元格有編輯的動作,無論單元格是否發(fā)生變化盖高,都會觸發(fā)Change事件慎陵。
示例
本示例將更改的單元格的顏色設(shè)為藍色。
Private Sub Worksheet_Change(ByVal Target as Range)
Target.Font.ColorIndex = 5
End Sub
2喻奥、屏蔽和恢復(fù)事件觸發(fā)開關(guān)
EnableEvents 屬性
如果對指定對象啟用事件席纽,則該值為 True。Boolean 類型撞蚕,可讀寫润梯。
示例
本示例在保存文件之前禁用事件,以使 BeforeSave 事件不能觸發(fā)。
Application.EnableEvents = False
ActiveWorkbook.Save
Application.EnableEvents = True
3纺铭、Activate 事件
激活一個工作簿寇钉、工作表、圖表或嵌入圖表時產(chǎn)生此事件舶赔。
Private Sub object_Activate()
object Chart扫倡、Workbook、或者 Worksheet顿痪。有關(guān)對 Chart 對象使用事件的詳細信息镊辕,請參閱 Chart 對象事件的用法。
說明
切換兩個顯示同一個工作簿的窗口時蚁袭,將產(chǎn)生 WindowActivate 事件征懈,但不產(chǎn)生工作簿的 Activate 事件。
新建窗口時不產(chǎn)生本事件揩悄。
示例
當激活工作表時卖哎,本示例對 A1:A10 區(qū)域進行排序。
Private Sub Worksheet_Activate()
Range("a1:a10").Sort Key1:=Range("a1"), Order:=xlAscending
End Sub
4删性、工作簿對象事件一覽表
當工作簿更改亏娜、工作簿中的任何工作表更改、加載宏更改或數(shù)據(jù)透視表更改時蹬挺,將引發(fā)工作簿事件维贺。工作簿上的事件在默認情況下是可用的。
Activate
激活工作薄時
AddinInstall
當工作簿作為加載宏安裝時
AddinUninstall
工作簿作為加載宏卸載時
BeforeClose
關(guān)閉工作薄前
BeforePrint
打印工作薄(或其中任何內(nèi)容)之前
BeforeSave
保存工作薄前
Deactivate
工作簿從活動狀態(tài)轉(zhuǎn)為非活動狀態(tài)時
NewSheet
在工作簿中新建工作表時
Open
打開工作簿時
PivotTableCloseConnection
在數(shù)據(jù)透視表關(guān)閉與其數(shù)據(jù)源的連接之后
PivotTableOpenConnection
在數(shù)據(jù)透視表打開與其數(shù)據(jù)源的連接之后
SheetActivate
激活任何一張表時
SheetBeforeDoubleClick
雙擊任何工作表時
SheetBeforeRightClick
鼠標右鍵單擊任一工作表時
SheetCalculate
工作表重新計算時
SheetChange
更改工作表中的單元格時
SheetDeactivate
任一工作表由活動狀態(tài)轉(zhuǎn)為非活動狀態(tài)時
SheetFollowHyperlink
單擊 Microsoft Excel 中的任意超鏈接時
SheetPivotTableUpdate
數(shù)據(jù)透視表的工作表更新之后
SheetSelectionChange
工作簿中的數(shù)據(jù)透視表更新之后
WindowActivate
工作簿的窗口激活時
WindowDeactivate
工作簿的窗口變?yōu)榉腔顒訝顟B(tài)時
WindowResize
工作簿窗口調(diào)整大小時
5巴帮、工作表(Worksheet) 對象事件一覽表
工作表上的事件在默認情況下是可用的溯泣。
Activate
激活工作表時
Deactivate
工作表從活動狀態(tài)轉(zhuǎn)為非活動狀態(tài)時
BeforeDoubleClick
雙擊工作表前
BeforeRightClick
右鍵單擊工作表時
Calculate
對工作表進行重新計算之后
Change
更改工作表中的單元格,或外部鏈接引起單元格時
FollowHyperlink
單擊工作表上的任意超鏈接時
PivotTableUpdate
在工作簿中的數(shù)據(jù)透視表更新之后
SelectionChange
工作表上的選定區(qū)域發(fā)生改變時
6榕茧、Excel程序事件程序
代碼位置:ThisWorkbook或類模塊中
適用范圍:所有打開的excel文件
在對 Application 對象使用事件之前垃沦,必須新建一個類模塊并聲明一個帶有事件的 Application 類型對象。例如用押,假定新建了一個 EventClassModule 類模塊肢簿,在該模塊中包含下列代碼。
Public WithEvents App As Application
在對新對象帶事件聲明完之后蜻拨,該對象將顯示在類模塊的“對象”下拉列表框中池充,并可以為此新對象編寫事件過程(在“對象”框中選取新對象時,“過程”下拉列表框中會自動顯示該對象的有效事件)缎讼。
在運行過程之前纵菌,必須將類模塊中聲明的對象與 Application 對象連接起來⌒莸樱可在任意的模塊中用下列代碼完成這一操作咱圆。
Dim X As New EventClassModule
Sub InitializeApp()
Set X.App = Application
End Sub
在運行 InitializeApp 過程之后笛辟,類模塊中的 App 對象將指向 Microsoft Excel Application 對象,并且當事件發(fā)生時將執(zhí)行類模塊中的事件過程序苏。
如果想要將excel程序的事件程序運行在全部打開的excel文件中手幢,需要新建一個工作簿open事件程序,然后將excel程序?qū)ο笞兞抠x值給事件變量忱详,如上文中的App,代碼如下:
Private Sub Workbook_Open()
Set App = Excel.Application
End Sub
然后將含有該代碼的工作簿另存為加載項围来,位置任意;
最后再進行加載宏步驟匈睁,此時所有打開的excel文件都會執(zhí)行excel程序的時間程序监透。