Excel VBA 程式設計教學:事件(Events)
文章推薦指數: 80 %
這裡介紹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
延伸文章資訊
- 1EXCEL巨集實用範例 - 計中首頁
範例一:計算ID不重複的資料有幾筆,需先根據ID排序,Range("A" & I)是表示A欄的第I列儲存格,茲將程式碼說明如下, '符號表示之後的文字是註解,作為 ...
- 2Excel VBA經典程式碼:一行抵萬行「偷懶程式碼」應用大全(下)
書名:Excel VBA經典程式碼:一行抵萬行「偷懶程式碼」應用大全(下),語言:繁體中文,ISBN:9789864344543,頁數:496,出版社:博碩,作者:Excel Home, ...
- 3Excel 建立VBA 巨集程式教學與範例 - Office 指南
填入巨集的名稱(自己取一個名字),然後按下「建立」。 建立巨集. Step 4 接著就會顯示VBA 的程式碼編輯器,在編輯器 ...
- 4EXCEL 錄製巨集與VBA-1 1 搭配範例
2. 巨集與VBA:巨集是一程式,紀錄一連串的操作步驟,而這. 些程式的程式碼是由VBA 程式語言所撰寫。 3. 巨集工具列:開發人員/程式碼. 4. 錄製巨集【開發人員/程式碼/ ...
- 5Excel VBA 程式設計教學:事件(Events)
這裡介紹Excel VBA 事件功能的使用方式,並提供基本的範例程式碼。 當使用者在Excel 中進行某些特定的操作時,就會觸發所謂的事件(events),例如當 ...