国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Xcel事件
第15單 Excel事件
15.1 了解事件
事件是一個對象可以辯認的動作,像單擊鼠標或按下某鍵等,并且可以編寫某些代碼針對此動作做出響應。用戶做動作或程序代碼的結果都可能導致事件的發(fā)生,事件還可由系統(tǒng)引發(fā)。在VBA中,可以激發(fā)事件的用戶動作包括切換工作表、選擇單元格和單擊鼠標等幾十種。當事件發(fā)生時,將執(zhí)行包含在事件過程中的代碼。如果用戶沒有定義某事件所調用的過程,那么當發(fā)生該事件時,就不會產(chǎn)生任何反應。
15.1.1事件分類
Excel提供了非常多的事件,主要可以分為以下幾類。
1、工作簿事件
工作簿事件發(fā)生在特定的工作簿中,如Open(打開工作簿)、BeforeClose(關閉工作簿之前)和SheetActivate(激活任何一張表)等。工作簿事件的代碼必須在ThisWork對象代碼模塊中編寫。
2、工作表事件
工作表事件發(fā)生在特定的工作表中,如Activate(激活工作表)、Change(更改工作表中的單元格)和SelectionChange(工作表上的選定區(qū)域發(fā)生改變)等。工作表帶今年年底代碼必須在對應工作表的代碼模塊中編寫。
3、窗體、控件事件
新建的用戶窗體及窗體上的控件也可響應很多事件,如Click(單擊)、Change(控件內容更改)等,這類事件的代碼必須編寫在相應的用戶窗體代碼模塊中。
4、圖表事件
圖表事件針對某個特殊的圖表產(chǎn)生,例如Select(選中了圖表中的某個對象)和SeriesChange(改變了系列中的某個數(shù)據(jù)點的值)。
5.不與對象關聯(lián)的事件
這類事件只有兩個,分別是OnTime和OnKey,根據(jù)時間和按鈕來產(chǎn)生兩個事件。
15.1.2 編寫事件程序
如果要對某個事件進行響應,就必須編寫對應的事件處理程序,并將這些程序放置在規(guī)定的位置上,并且每個事件處理程序都必須使用系統(tǒng)事先定義好的名稱。例如,需要對工作簿的Open事件編寫處理代碼,其操作步驟如下。
步驟1 在Excel環(huán)境下按Alt+F11組合鍵打開VisualBasic編輯器。
步驟2 在左側的“工程資源管理器”窗口中列出了當前工程項目中的Excel對象,雙擊其中的“ThisWorkbook”對象,將在右側打開代碼編輯器。
步驟3 在代碼窗口左側對象下拉列表框中選擇對象。
步驟4 選擇好對象“Workbook”后,在代碼窗口右側的事件下拉列表框中可看到出該對象的事件列表。
步驟5 選擇好對象和事件后,系統(tǒng)自動生成事件過程的外部結構。在事件過程結構中編寫響應該事件的代碼即可。
15.2 工作簿事件
當工作簿更改、工作簿中的任何工作表更改、加載宏更改或數(shù)據(jù)透視表更改時,都將引發(fā)工作簿事件。合理地使用各個事件可以避免一些意料不到的錯誤,以及提高代碼的可讀性,同時也可以提高代碼的執(zhí)行效率。
15.2.1 工作簿事件簡介
若要查看工作簿的事件過程,可以雙擊“工程資源管理器”窗口中的“ThisWorkbook”對象,打開“代碼編輯器”窗口,在“過程”下拉列表框內選擇事件名稱。Excel 2007的工作簿事件如表15-1所示。
表15-1 工作簿事件及其觸發(fā)時間
事件
觸發(fā)時間
Activate 激活工作簿時
AddinInstall 當工作簿作為加載宏安裝時
AfterXmlExport 保存或導出工作簿中的XML數(shù)據(jù)之后
AfterXmlImport 在刷新現(xiàn)有的XML數(shù)據(jù)連接或將新的XML數(shù)據(jù)導入到指定的工作簿之后
BeforeClose 關閉工作薄前
BeforPrint 打印工作?。ɑ蚱渲腥魏蝺热荩┲?div style="height:15px;">
BeforeSave 保存工作簿前
BeforeXmlExport 保存或導出指定工作簿中的XML數(shù)據(jù)之前
BeforeXmlImport 在刷新現(xiàn)有的XML數(shù)據(jù)連接或將新的XML數(shù)據(jù)導入到指定的Excel工作簿之前
Deactivate 工作簿從活動狀態(tài)轉為非活動狀態(tài)時
NewSheet 在工作簿中新建工作表時
Open 打開工作簿時
PivotTableCloseConnection 在數(shù)據(jù)透視表關閉與其數(shù)據(jù)源的連接之后
PivotTableOpenConnection 在數(shù)據(jù)透視表打開與其數(shù)據(jù)源的連接之后
RowsetComplete 在OLAP數(shù)據(jù)透視表上深化記錄集或調用行集操作時
SheetActivate 激活任何一張工作表時
SheetBeforeDoubleClick 雙擊任何工作表時
SheetBeforeRightClick 在任一工作表上單擊右鍵時
SheetCalculate 工作表重新計算時
SheetChange 更改工作表中的單元格時
SheetDeactivate 任一工作表由活動狀態(tài)轉為非活動狀態(tài)時
SheetFollowHyperlink 單擊MicrosoftExcel中的任意超鏈接時
SheetPivotTableUpdate 數(shù)據(jù)透視表的工作表更新之后
SheetSelectionChange 工作簿中的數(shù)據(jù)透視表更新之后
Sync 本地副本與服務器上的副本進行同步時
WindowActivate 工作簿的窗口激活時
WindowDeactivate 工作簿的窗口變?yōu)榉腔顒訝顟B(tài)時
WindowResize 工作簿窗口調整大小時
表中可以看出,Excel工作簿事件非常多,但有一部分事件幾乎很難用到。
工作簿事件代碼必須位于“ThisWorkbook”對象的代碼模塊中,如果放于其他代碼模塊中,將不會被執(zhí)行。
15.2.2 Open事件
打開工作簿時,將產(chǎn)生此事件。Workbook_Open事件只在工作簿打開時產(chǎn)生,在下一次打開之前不再發(fā)生此事件。此事件中可以寫入一些只需執(zhí)行一次的代碼,比如如果需要在每次打開文件時在“Sheet1”工作表的A列記錄文件打開的時間,則應該使用此事件,代碼如下:
Private Sub Workbook_Open()
Worksheets("Sheet1").Range("A1048576").End(xlUp).Offset(1,0).Value = VBA.Now
End Sub
對系統(tǒng)設置進行修改的代碼不應編寫在這個事件過程中,而應寫入Workbook_Activate事件中,Workbook_Activate事件緊隨在Workbook_Open事件后面發(fā)生。
注意:Workbook_Open事件代碼有可能不被執(zhí)行,例如在打開工作簿時用戶按住“Shift”鍵可跳過該事件代碼。
15.2.3 BeforeClose事件
在關閉工作簿之前,先產(chǎn)生此事件。如果該工作簿已經(jīng)更改過,則本事件在詢問用戶是否保存更改之前產(chǎn)生。其事件處理代碼格式如下:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
當事件產(chǎn)生時,參數(shù)Cancel為False。如果該事件將Cancel設為True,則停止對工作簿的關閉操作,工作簿仍處于打開狀態(tài)。
一般情況下,只應在該事件中加上以下功能,而不應將對系統(tǒng)的設置或者恢復代碼放在此處。
1)不顯示是否保存修改對話框而保存工作簿的任何更改。
2)放棄保存工作簿的任何更改,直接退出,代碼如下:
Private Sub Workbook_BeforeClose(Cancel as Boolean)
Me.Saved = True
End Sub
3)程序中設置標志變量,控制用戶直接按窗口上的“關閉”按鈕退出系統(tǒng)。只有通過代碼設置標志變量為對應值時才允許退出系統(tǒng),具體代碼如下:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If bFlag=False then Cancel=True                  'bFlag為標志變量
End Sub
15.2.4 Activate事件
激活一個工作簿時將產(chǎn)生該事件。所謂工作簿激活,包括以下兩種情況:
1)工作簿打開時,在Open事件之后發(fā)生該事件;
2)從另一工作簿切換到本工作簿時,發(fā)生該事件。
工作簿的Open事件有可能被用戶跳過,所以應該將系統(tǒng)設置之類的初始化代碼放在Activate事件中。
下例通過工作簿的Activate事件完成調用自定義菜單、隱藏工具欄等設置,其代碼如下:
Private Sub Workbook_Activate()
Application.ScreenUpdatin = False                      '關閉屏幕更新
Application.Cursor = xlDefault                         '設置光標為默認圖標
Application.Caption = "學生成績管理系統(tǒng)"               '設置應用程序標題
Application.Caption = ""
Application.CommandBars("Toolbar list").Enabled = False  '屏蔽右鍵工具欄
Application.CommandBars("Standard").Visible = False     '隱藏標準工具欄
Application.CommandBars("Formatting").Visible = False     '隱藏格式工具欄
Application.DisplayFormulaBar = False                     ’隱藏編輯欄
Application.DisplayStatusBar= True                       '顯示狀態(tài)欄
ActiveWindow.DisplayWorkbookTabs= False                    ’隱藏工作表標簽
HideBar                                                    '調用子過程,隱藏工具欄
MyBar_Menu                                                 ’調用子過程,顯示自定義菜單
Sheets("主界面").ScrollArea = "A1:M38"                     '設置主界面的滾動區(qū)域
Application.ScreenUpdatin = True                          '打開屏幕更新
End Sub
15.2.5 Deactivate事件
當工作簿從活動狀態(tài)轉為非活動狀態(tài)時產(chǎn)生此事件。以下情況將產(chǎn)生該事件:
●工作簿從活動狀態(tài)轉為非活動狀態(tài)時;
●關閉工作簿時,在Workbook_BeforClose事件之后發(fā)生此事件。
一些恢復系統(tǒng)設置之類的代碼可放在此事件中。例如對上例中Activate事件所做設置進行清理,恢復Excel初始設置,具體代碼如下:
Private Sub Workbook_Deactivate()
Application.Caption = “Microsoft Excel”    '設置應用程序的標題為默認值
MyBarDelete                                  ’刪除自定義菜單
ShowBar                                      ’顯示各工具欄
Application.CommandBars("Toolbar list").Enabled = True   '顯示默認工具欄
Me.save                                                  ’保存工作簿
End Sub
15.2.6 SheetActivate事件
激活任何一張表時產(chǎn)生此事件。例如,下面的代碼將顯示被激活工作表的名稱:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name
End Sub
如果激活工作簿中的任何一張工作表,那么將活動單元格定位到A1單元格的代碼如下:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name
End Sub
如果激活工作簿中的任何一張工作表,那么將活動單元格定位到A1單元格的代碼如下:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
On Error Resume Next
Range("A1").Select
End Sub
當打開一張圖表時,執(zhí)行Range("A1").Select語句時將會出現(xiàn)錯誤提示,為了防止錯誤提示出現(xiàn),在過程最前面使用On Error語句。
15.2.7 NewSheet事件
在工作簿中新建工作表時產(chǎn)生此事件,其事件處理代碼格式如下:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
例如,在Excel中新建工作表時默認取名為Sheet后面加上一個數(shù)字,使用以下代碼可以為新建的工作表生成中文名稱。
Private Sub Workbook_NewSheet(ByVal Sh As Object)
n = Worksheets.Count
If TypeName(Sh) = "Worksheet" Then
Sh.Name = "工作表" & n
End If
End Sub
程序通過Worksheets.Count獲取當前工作表的數(shù)量,然后判斷新建表的類型。如果是工作表,則對新建的工作表進行命名。
15.2.8 BeforeSave事件
保存工作簿之前產(chǎn)生此事件,其事件處理代碼格式如下:
Private Sub Workbook_BeforSave(ByVal SaveAsUi As Boolean,Cancel As Boolean)
事件過程中有兩個參數(shù),如果顯示“另存為”對話框,則參數(shù)SaveAsUi為True。參數(shù)Cancel的值當事件產(chǎn)生時為False,如果該事件過程將本參數(shù)設為True,則該過程執(zhí)行結束之后不保存工作簿,針對該事件的兩個參數(shù),該事件一般可以完成以下功能:
●禁止文件另存,但可對原文件的修改進行保存;
●禁止保存修改,使保存與另存為功能都失效。
例如,以下代碼在保存工作簿之前詢問用戶是否保存文件。在保存工作簿之前產(chǎn)生此事件,那么只要在該事件寫入一行代碼就完全可以禁止文件被另存,而且連另存為對話框也不顯示。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)
If SaveAsUI = True Then Cancel=True                          '禁止另存為
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,Cancel As Boolean)
Cancel = True                                                   ’禁止保存修改
End Sub
在禁止保存修改時應配合在BeforeClose事件中寫入代碼才能達到完美效果。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Me.Saved=True
End Sub
15.2.9 BeforePrint事件
當進行打印或者打印預覽時,在打印或打印預覽實際發(fā)生之前將產(chǎn)生BeforePrint事件。該事件處理代碼格式如下:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
當事件發(fā)生時參數(shù)Cancel為False,如果該事件過程將此參數(shù)設置為True,則該過程完成后將不打印工作簿。例如,以下代碼在打印之前對活動工作簿的所有工作表重新計算。
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim wk As Worksheet
For Each wk in Worksheets
wk.Calculate
Next
End Sub
15.3 工作表事件
在Excel應用程序中,要控制用戶在工作表中的操作,就需要為工作表事件編寫代碼。工作表事件是開發(fā)Excel應用程序時使用最多的。
15.3.1 工作表事件簡介
若要查看工作表的事件過程,可以雙擊“工程資源管理器”窗口中的一個工作表對象(例如“Sheet1”),打開“代碼編輯器”窗口,在“過程”下拉列表框內選擇事件名稱。Excel2007的工作表事件如表15-2所示。
表15-2 工作表事件及其激發(fā)時間
事件 激發(fā)時間
Activate 激活工作表時
BeforeDoubleClick 雙擊工作表前
BeforeRightClick 在工作表上單擊右鍵時
Calculate 對工作表重新進行計算之后
Change 更改工作表中的單元格,或外部鏈接引起單元格變化時
Deactivate 工作表從活動狀態(tài)轉為非活動狀態(tài)時
FollowHyperlink 單擊工作表上的任意超鏈接時
PivotTableUpdate 在工作簿中的數(shù)據(jù)透視表更新之后
SelectionChange 工作表上的選定區(qū)域發(fā)生改變時
工作表事件發(fā)生在工作表被激活、用戶修改,以及更新工作表上的單元格或數(shù)據(jù)透視表時。例如,以下代碼將在工作表重新計算后將A列到H列的大小調整到合適狀態(tài):
Private Sub Worksheet_Calculate()
Columns("A:H").AutoFit
End Sub
注意:在一個工作簿中,一般都有多張工作表。工作表事件必須編寫在對應的工作表對象中。操作該工作表時才會執(zhí)行對應的事件代碼。例如在“Sheet1”工作表的代碼模塊中編寫的事件代碼不會在操作“Sheet2”工作表時執(zhí)行。
15.3.2 Activate事件
激活工作表、圖表工作表或嵌入式圖表時發(fā)生此事件。例如,以下代碼將在工作表被激活時對區(qū)域A1:A20進行排序。
Private Sub Worksheet_Activate()
Range("a1:a20").Sort Key1:=Range("a1"),Order:=xlAscending
End Sub
15.3.3 BeroreRightClick事件
在工作表上單擊鼠標右鍵時發(fā)生此事件,此事件先于默認的單擊右鍵操作。該事件的代碼格式如下:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range,Cancel As Boolean)
其中的參數(shù)含義如下:
●Target表示一個Range對象,為單擊右鍵發(fā)生時最靠近鼠標指針的單元格.
●Cancel事件發(fā)生時為False.如果事件過程將此參數(shù)設為True,則在完成此過程后,不執(zhí)行默認的單擊右鍵操作.
注意:當指針在形狀或命令欄(工具欄或菜單欄)上時,單擊右鍵不觸發(fā)此事件。
BeforeRightClick事件可用于取代默認的右鍵快捷菜單操作,或對默認操作進行一些小改動。例如,以下代碼捕獲了單擊右鍵事件,并在單元格區(qū)域“B1:B10”的快捷菜單中添加了新的菜單項。
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range,Cancel As Boolean)
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Excel VBA解讀(92):Workbook對象的Open事件和BeforeClose事件
Excel 工作簿、工作表事件例子
Excel VBA(03)各種事件
VBA實戰(zhàn)技巧:快速返回最后一次編輯的單元格
學習VBA,報表做到飛 第五章 事件篇 5.5 Workbook_BeforePrint事件
Excel|如何使用VBA在工作簿文件名稱后添加保存時間的后綴?|時間
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服