《VBA中類的解讀及應用》教程【10165646】是我推出的第五套教程,目前已經是第一版修訂了。這套教程定位于最高級,是學完初級,中級后的教程。
類,是非常抽象的,更具研究的價值。隨著我們學習、應用VBA的深入,有必要理解這些抽象的理論知識。對象,類,過程,方法,屬性,事件,接口,接口如何實現等等。掌握了這些理論,不僅對于VBA這種寄生語言的實質有所深入的理解,也對自然界的很多事物將同樣有所感悟。目前,這套教程程序文件已經通過32位,64位兩種office系統測試。
這套教程共兩冊,八十四講,今后一段時間會給大家陸續推出修訂后的教程內容。今日的內容是:VBA中類的解讀及應用第十三講:限制復選選擇,窗體模塊的搭建
【分享成果,隨喜正能量】專注地做一件事,做到極致,勝過敷衍地做很多事。不求多,但求精,不求散,但求專。每個人的時間和精力都是有限的,專注于某個領域,沉得住氣,靜得下心,充分發揮自己的潛能,持續深耕,才能有所作為。。
第十三講 限制復選選擇(中)
大家好,我們今日繼續講解類與類模塊的知識,今日講解限制復選選擇第二部分,在上講中,我們講了這個問題類模塊的構建,我們在類模塊中搭建了一個mytadi的類,在這個類中,我們聲明了兩個相應類事件的對象,一個是xuanzhe類對象,一個是yemian 的類事件。同時在類中,我們還給出了xuanzhe類對象所響應的事件。
3 窗體模塊的搭建
我們這講講解如何把窗體的對象關聯到聲明了的響應類事件的對象.如果僅僅是WithEvents聲明了響應類事件的對象,不做關聯,真的沒有任何意義。只有關聯到了窗體對象,那么才可以在代碼中讓這些窗體對象步調一致,聽從指揮。
我們先搭建一個窗體,上面有5個選擇按鈕,分別為OptionButton1到OptionButton5,這5個選擇的CAPTION對應ABCDE,同時按鈕對應5個選擇項目,在窗體的最下邊增加一個重置的按鈕,在選擇錯誤的時候,可以重置。
我們看窗體的代碼:
Dim kuang() As New mydati
Private Sub CommandButton1_Click()
For i = 1 To 5
Controls("OptionButton" & i).Value = False
Controls("OptionButton" & i).Enabled = True
Next
End Sub
Private Sub UserForm_Initialize()
For Each myctl In Me.Controls
If TypeName(myctl) = "OptionButton" Then
m = m + 1
ReDim Preserve kuang(1 To m) '創建一個新的mydati類對象
Set kuang(m).xuanzhe = myctl '設置新類和OptionButton(i)控件創建關聯
Set kuang(m).yemian = Me '類窗體也和當前窗體建立關聯
End If
Next
End Sub
代碼截圖:
4 窗體模塊代碼的講解
1) 上述代碼首先聲明一個類:Dim kuang() As New mydati,這個類是我們在類模塊中已經命名了的,就是將類mydati 實例化為kuang().此處是一個動態數組。
2) Private Sub UserForm_Initialize()
For Each myctl In Me.Controls
If TypeName(myctl) = "OptionButton" Then
m = m + 1
ReDim Preserve kuang(1 To m) '創建一個新的mydati類對象
Set kuang(m).xuanzhe = myctl '設置新類和OptionButton(i)控件創建關鍵
Set kuang(m).yemian = Me '類窗體也和當前窗體建立關聯
End If
Next
End Sub
上述代碼是窗體的構建函數,在窗體的構建過程中,對每一個控件進行遍歷,如果是OptionButton類型的控件,那么我們就將這個控件和新類相關聯。我們主要的目的是讓類對象來響應事件。
3) 對于重置按鈕,但按下時會響應事件
For i = 1 To 5
Controls("OptionButton" & i).Value = False
Controls("OptionButton" & i).Enabled = True
Next
也就是說將每個OptionButton處于待選擇狀態。
為了能執行答題的界面,我們還要在公用模塊中寫入下面的代碼,讓答題時彈出答題界面.
今日內容回向:
1 類模塊的構建函數中做了什么工作?
2 如何把控件和類事件的聲明對象相關聯?
(待續)
本講內容參考程序文件:VBA-CLASS(1-28).xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中: