Excel VBA 程式設計教學:事件(Events)

文章推薦指數: 80 %
投票人數:10人

這裡介紹Excel VBA 事件功能的使用方式,並提供基本的範例程式碼。

當使用者在Excel 中進行某些特定的操作時,就會觸發所謂的事件(events),例如當 ... Blogger舊站 關於 Facebook Flickr 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 物聯網 網站架設 程式設計 統計 素食 特價優惠 宗教 ExcelVBA程式設計教學:事件(Events) 2017/07/29 8則留言 這裡介紹ExcelVBA事件功能的使用方式,並提供基本的範例程式碼。

當使用者在Excel中進行某些特定的操作時,就會觸發所謂的事件(events),例如當使用者選擇一張工作表時,就會觸發工作表選擇的事件,而像點選儲存格或儲存檔案等動作也都會觸發對應的事件。

程式設計者可以靠著各種事件的的觸發來設計可以自動執行的VBA程式,例如在選擇工作表時,自動執行某些VBA程式等。

以下介紹如何在ExcelVBA中使用事件。

事件處理子程序 我們可以針對不同的事件撰寫對應的處理子程序,也就是設定當事件發生時該執行的VBA程式,事件的處理子程序跟一般自訂的子程序差不多,只是事件的處理子程序有比較特殊的名稱,在對應的事件被觸發時,就會連帶自動執行。

Step1 在工具列中點選「VisualBasic」,開啟VisualBasic編輯器,或是直接使用快速鍵Alt+F11開啟。

開啟VisualBasic編輯器 Step2 如果要處理活頁簿的事件,就要把事件處理子程序寫在活頁簿中,若是要處理單張工作表的事件,就放在對應的工作表中。

這裡我們以活頁簿事件來作為示範,點擊兩下活頁簿,開啟程式碼編輯視窗。

程式碼編輯視窗 Step3 選擇活頁簿(Workbook)。

選擇活頁簿 Step4 這時候程式碼編輯視窗內會出現一個預設的Workbook_Open處理子程序,這個就是對應到活頁簿開啟事件(openevent)的處理子程序,寫在這裡的程式碼就會在活頁簿開啟時自動執行。

在右上角的下拉式選單中可以選擇其他的事件,建立不同事件的處理子程序。

這個例子我們先以Workbook_Open處理子程序做為示範。

選擇事件 Step5 在Workbook_Open子程序中,填入當活頁簿開啟時所要執行的程式碼,這裡我以一行簡單的MsgBox輸出訊息作為示範。

MsgBox"Hello,Event." Open事件程式碼 Step6 編輯好VBA程式碼之後,接著將Excel活頁簿存檔。

為了使Excel活頁簿中的VBA程式碼可以正常執行,在儲存時要選擇以「啟用巨集的活頁簿」來儲存。

Excel儲存為「啟用巨集的活頁簿」 Step7 存檔之後,先將Excel檔案關閉,再重新打開,而開啟時Workbook_Open處理子程序中的VBA程式就會自動被執行,所以就會看到我們剛剛寫的提示訊息。

開啟Excel活頁簿 常用事件 這裡示範幾種Excel中常用的事件用法。

儲存格變更事件 當任何的Excel儲存格內容有變動時,就會觸發活頁簿的SheetChange事件,我們可以用Workbook_SheetChange來處理: PrivateSubWorkbook_SheetChange(ByValShAsObject,ByValTargetAsRange) MsgBox"儲存格("&Target.Row&","&Target.Column_ &")更新為"&Target.Value EndSub 活頁簿的儲存格變更事件 設定 Workbook_SheetChange 這個事件處理子程序之後,接下來只要有任何的儲存格內容有變動,就會顯示這樣的訊息。

活頁簿的儲存格變更事件 活頁簿的Workbook_SheetChange會接收任何工作表所觸發的SheetChange事件,如果要判斷是哪一張工作表所產生的事件,可以從Workbook_SheetChange子程序的第一個傳入參數來判斷。

如果只要處理特定工作表中的儲存格變更事件,也可以把事件處理子程序寫在對應的工作表中,而工作表的儲存格變更事件是以Worksheet_Change來處理的,使用方式大同小異: PrivateSubWorksheet_Change(ByValTargetAsRange) MsgBox"儲存格("&Target.Row&","&Target.Column_ &")更新為"&Target.Value EndSub 工作表的儲存格變更事件 選擇儲存格事件 只要當工作表中選擇的儲存格範圍有改變時(用滑鼠或鍵盤等方式),就會觸發SelectionChange這個工作表的儲存格選擇變更事件,這個事件可以使用工作表的Worksheet_SelectionChange子程序來處理。

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) MsgBox"選擇儲存格("&Target.Row&","&Target.Column&")" EndSub 工作表的選擇儲存格事件 建立了這個工作表的選擇儲存格事件處理子程序之後,只要當工作表中選擇的儲存格範圍有改變,就會自動顯示目前選擇的儲存格資訊。

工作表的選擇儲存格事件 點擊兩下儲存格事件 若使用滑鼠在Excel儲存格中連續點擊兩下,就會觸發DoubleClick事件,此事件可用Worksheet_BeforeDoubleClick來處理。

PrivateSubWorksheet_BeforeDoubleClick(ByValTargetAsRange,CancelAsBoolean) If(Target.Font.Color=vbBlack)Then '把黑色文字改為紅色 Target.Font.Color=vbRed Else '把紅色文字改為黑色 Target.Font.Color=vbBlack EndIf '關閉Excel預設動作 Cancel=True EndSub Worksheet_BeforeDoubleClick第一個傳入參數是點擊的儲存格,而第二個參數Cancel是一個布林值,代表是否要將Excel預設的動作關閉。

這個例子是設計讓使用者在點擊儲存格之後,可讓儲存格的文字顏色在黑色與紅色之間切換,在預設的狀況下,當使用者連續點擊兩次儲存格時,會讓儲存格轉為編輯模式(就是出現游標,可以輸入文字的狀態),若不要讓儲存格轉為編輯模式,可將Cancel設為True,這樣Excel就只會執行我們的VBA程式碼,而不會讓儲存格轉為編輯模式。

點擊兩下儲存格事件 執行之後,我們只要在儲存格上面點兩下,它的文字就會變成紅色,再點兩下的話又會變回黑色。

點擊兩下儲存格事件 應用範例 我們可以將任何的VBA程式碼放進各種事件的處理子程序中,這樣就可以讓ExcelVBA程式自動處理各式各樣的問題,以下是一些簡單的應用範例。

標示選擇的儲存格 這個範例是透過改變背景顏色的方式,將目前作用中的儲存格位置標示出來,清楚顯示儲存格的行與列。

PrivateSubWorksheet_SelectionChange(ByValTargetAsRange) DimrowNumberValueAsInteger,columnNumberValueAsInteger DimiAsInteger,jAsInteger '清除所有儲存格的背景顏色 Cells.Interior.ColorIndex=0 '取得目前作用中的儲存格 rowNumberValue=ActiveCell.Row columnNumberValue=ActiveCell.Column '以背景顏色標示儲存格 Fori=1TorowNumberValue Cells(i,columnNumberValue).Interior.ColorIndex=37 Nexti Forj=1TocolumnNumberValue Cells(rowNumberValue,j).Interior.ColorIndex=37 Nextj EndSub 標示選擇的儲存格 這樣在點選儲存格之後,就會自動以背景顏色標示儲存格的位置。

標示選擇的儲存格 更多關於VBA的教學文章,請參考VBA程式設計。

參考資料:ExcelEasy、tutorialspoint、ExcelFunctions.net Windows,程式設計 ExcelOfficeVBA G.T.Wang 個人使用Linux經驗長達十餘年,樂於分享各種自由軟體技術與實作文章。

8留言 新增留言→ Eric 非常詳細的教學,期待看到更新的文章,感謝!! 2017/10/19 回覆 Bing 期待15~19的後續內容,受益匪淺 2017/12/01 回覆 G.T.Wang 由於最近剛好在忙著研究其他的技術,比較沒時間寫這部分,過一陣子應該會再找時間繼續把他寫完。

🙂 2017/12/02 回覆 沈建國 1.請問於我有textbox1~10,我要如何利用fornext來使他看不見 2.如何於vba利用類似vlookup的功能查sheet的內容?謝謝您 2018/03/04 回覆 Skyland Thanksbro,yourarticleshelpmealot Thankyouverymuch 2018/06/21 回覆 Kan 嘗試學習VBA便出錯,導致不能顯示正常見面版面,請賜教如何解決。

2020/05/31 回覆 Kan Excel點選「開發人員」再選「VisualBasic」便會出現見面畫面(左方有些選項、右方灰色),我不知按錯甚麼鍵,導致只見灰色區而不見選擇項,請賜教如何恢復過來。

2020/05/31 回覆 穆 可按檢視>專案總管 2020/10/11 回覆 LeaveaReply取消回覆 留言* Name* Email* Website 搜尋 分類Arduino(5) BeagleBoneBlack(1) DIY(54) Linux(317) macOS(33) Octave(15) Perl(12) R(47) Windows(98) WordPress(16) 個人(15) 免費(35) 兒童(30) 實用工具(85) 手機(13) 技巧(45) 有趣(99) 樹莓派(57) 物聯網(55) 玄學(11) 生活(209) 程式設計(137) 統計學(8) 網頁空間(36) 網頁開發(128) 虛擬化(7) 農業(42) 遊戲(9) 開箱(132) 雲端(4) 宗教 如何戒邪淫、遠離婚外情 戒淫寶典:《壽康寶鑑》白話有聲書 公益 智邦公益網 社團法人新竹縣愛心物資集發協會 家扶基金會 台灣世界展望會 igiving公益網 ©2022G.T.Wang



請為這篇文章評分?