【分享成果,隨喜正能量】生活百般滋味,你要笑著面對,善待自己,順其自然,生活才能處處是驚喜,事事有回應(yīng)。人活一世,不要把什么都看得那么重,最怕什么都想計較,卻又什么都抓不牢,盼不來的只能放下,留不住的學(xué)會放手。若人走情涼,就守心自暖;若聚散難免,便獨享浮世清歡。一切順其自然,不回頭,不將就。。
《VBA中類的解讀及應(yīng)用》教程是我推出的第五套教程,目前已經(jīng)是第一版修訂了。這套教程定位于最高級,是學(xué)完初級,中級后的教程。
類,是非常抽象的,更具研究的價值。隨著我們學(xué)習(xí)、應(yīng)用VBA的深入,有必要理解這些抽象的理論知識。對象,類,過程,方法,屬性,事件,接口,接口如何實現(xiàn)等等。掌握了這些理論,不僅對于VBA這種寄生語言的實質(zhì)有所深入的理解,也對自然界的很多事物將同樣有所感悟。目前,這套教程程序文件已經(jīng)通過32位,64位兩種office系統(tǒng)測試。
這套教程共兩冊,八十四講,今后一段時間會給大家陸續(xù)推出修訂后的教程內(nèi)容。今日的內(nèi)容是:VBA對事件的監(jiān)聽
第四十講 使用WithEvents定義響應(yīng)事件的對象
大家好,我們繼續(xù)VBA類的學(xué)習(xí),在這套教程中,大家會逐步認識到很多事物的本質(zhì)東西,在上一講中我們提到事件的定義時指出,事件是對象的響應(yīng)。這里的對象是指接收方或者稱之為事件監(jiān)聽者。事件的整個過程對象:事件的發(fā)起方,或者稱之為事件源(Event Source),可以為按鈕對象;事件的響應(yīng)方,或者稱之為事件監(jiān)聽者(Event Sink),可以為窗體或者其他的對象。在上一講也著重地指出:事件的監(jiān)聽方可以為多個對象。我們在這一講就來測試一下。
1 WithEvents關(guān)鍵字的意義
這一講中我們要向大家介紹VBA中的一個關(guān)鍵字:WithEvents(字面意思是攜帶事件)。這個關(guān)鍵字是什么意思呢?就是要引出我們將利用這個事件的對象。當(dāng)然這個對象只能在類模塊和窗體模塊中有效,為什么呢?對于窗體是一個對象,這一點很容易理解;而類也可以看做是一個對象的。其實WithEvents定義的對象又何嘗不是虛擬的呢?這一點只能理解吧。
好了我們先定義下面的一個窗體:
2 監(jiān)聽事件的代碼
這個窗體中我們有兩個按鈕:按鈕1和按鈕2;一個標簽;我們要在按鈕1按下的時候窗體和標簽同時監(jiān)聽到這個事件,同時有不同的反應(yīng)。從而說明一個事件會由多個對象監(jiān)聽到。好了,我們看下面的代碼:
Private WithEvents myCmd As CommandButton
Private Sub CommandButton1_Click()
MsgBox "你好,我是窗體"
End Sub
Private Sub CommandButton2_Click()
Label1.Caption = ""
End Sub
Private Sub myCmd_Click()
Label1.Caption = "您好,歡迎學(xué)習(xí)VBA"
End Sub
Private Sub UserForm_Initialize()
Set myCmd = UserForm1.CommandButton1
Label1.Caption = ""
End Sub
Private Sub UserForm_Terminate()
Set myCmd = Nothing
End Sub
代碼截圖:
3 事件監(jiān)聽過程的分析
代碼解析:
1) 在這個過程中我們定義了一個myCmd對象,用于響應(yīng)CommandButton1_Click,即CommandButton1的單擊事件。
2) 在窗體的加載時Set myCmd = UserForm1.CommandButton1 令myCmd對象指向CommandButton1.
3) 當(dāng)CommandButton1的單擊事件發(fā)生時:窗體的監(jiān)聽到后彈出對話框,“你好,我是窗體”
對象myCmd監(jiān)聽到后修改了標簽的文本內(nèi)容“您好,歡迎學(xué)習(xí)VBA”
下面看一下代碼的測試:
也許有的朋友說,老師,為什么要引入一個如此虛擬的對象mycmd 呢?把代碼直接寫入單擊事件不就行了嗎?各位學(xué)員,不要有這種想法,這套教程側(cè)重的是理論,不是實現(xiàn)的手段。這里講的是對于事件的監(jiān)聽,在理論學(xué)習(xí)階段大家要理解這個過程。
對于事件的理解,希望大家能把握。
今日內(nèi)容回向:
1 如何理解事件的監(jiān)聽?
2 一個事件的響應(yīng)必須是一個對象嗎?
本講內(nèi)容參考程序文件:VBA-CLASS(39-40).xlsm
我20多年的VBA實踐經(jīng)驗,全部濃縮在下面的各個教程中:
【分享成果,隨喜正能量】凡事不必苛求,來了就來了;凡事不必計較,過了就過了;遇事不要皺眉,笑了就笑了;結(jié)果不要強求,做了就對了;生活就是一種簡單,心靜了就平和了。