VBA類模組應用方法介紹,這一點很重要VBA中類模組是一個很重要的難點,如果沒有深入研究,通常不會涉及到,但是,想要提高程式設計方面的能力,類模組的應用,必須要學會。當然了,既然是難
2021-08-08 03:05:46
VBA類模組應用方法介紹,這一點很重要
VBA中類模組是一個很重要的難點,如果沒有深入研究,通常不會涉及到,但是,想要提高程式設計方面的能力,類模組的應用,必須要學會。
當然了,既然是難點就並不容易學會。
本節介紹一個方法,如何實現單選按鈕選擇之後的一些操作。
也就是說通過類模組來實現OptionButton控制項的Click事件。
當單擊選擇按鈕之後,將把選擇內容顯示在右側窗體中。
這個示例,可實現單項選擇功能,應用十分廣泛。
預設窗體如上圖所示,什麼都沒有選擇,當選擇之後如下圖所示。
重點看一下類模組內容,其程式碼有點複雜,比較難理解,但是其理論就是建立一個事件過程。
如下圖所示:
類模組(Opts)程式碼:
Option Explicit
Public WithEvents OptObj As MSForms.OptionButton'定義按鈕物件
Public WithEvents ForObj As MSForms.UserForm'定義窗體物件
Private Sub OptObj_Click()
Dim id As Long, i As Integer
id = VBA.Mid(OptObj.Name, 13, VBA.CInt(VBA.Len(OptObj.Name) - 12))
If ForObj.Controls("OptionButton" & id).Value = True Then
ForObj.Controls("TextBox1").Value = ForObj.Controls("Label" & id).Caption
End If
For i = 1 To getCount(ForObj)
If i <> id Then
ForObj.Controls("OptionButton" & i).Enabled = False
ForObj.Controls("Label" & i).Enabled = False
End If
Next i
End Sub
上述程式碼要在一個類模組中,名稱為:Opts,模組名很關鍵,一定要和主窗體中定義的一樣,不然不能使用。後面程式碼可以看到如何使用。
窗體程式碼:
Option Explicit
Dim Opt() As Opts
Dim Forx() As Opts
Private Sub UserForm_Initialize()
Dim x As Integer
Dim xOpt As Object
x = 1
For Each xOpt In Me.Controls
If TypeName(xOpt) = "OptionButton" Then
ReDim Preserve Opt(x)
ReDim Preserve Forx(x)
Set Opt(x) = New Opts
Set Forx(x) = New Opts
Set Forx(x).ForObj = Me
Set Forx(x).OptObj = xOpt
x = x + 1
End If
Next xOpt
End Sub
上述程式碼將物件名建立為陣列形式,由於選擇項條數可能存在不確定性,所以陣列方式更加靈活。
也就是說,不管有多少個選項,此內容是不需要更改的 ,可以任意新增OptionButton控制項,而無需考慮為其定義類。
相關文章
VBA類模組應用方法介紹,這一點很重要VBA中類模組是一個很重要的難點,如果沒有深入研究,通常不會涉及到,但是,想要提高程式設計方面的能力,類模組的應用,必須要學會。當然了,既然是難
2021-08-08 03:05:46
如何一句話擊垮一名設計師?你這…有色差啊 很多設計師聽到這句話表示:代入感太強,已經開始崩潰了…所以設計師對於螢幕有非常高的要求也就在情理之中了。同時設計師可能還會
2021-08-08 03:05:36
最近女朋友想要換手機,手持的iPhone 12摔壞了,正好下放給父母使用,近幾年聽說華為很強的,於是想要買一款華為旗艦感受,作為科技博主的浩南,率先肯定是推薦最新的華為P50Pro,於是我
2021-08-08 03:05:30
【手機中國新聞】8月11日晚,三星Galaxy新品釋出會將正式舉辦,作為此次釋出會的焦點——三星Z Fold3和Z Flip3兩款摺疊屏產品可謂是備受關注。畢竟三星作為摺疊屏產品的領先品
2021-08-08 03:05:24
類載入過程類載入機制:Java虛擬機器把描述類的資料從Class檔案載入到記憶體,並對資料進行校驗、轉換解析和初始化,最 終形成可以被虛擬機器直接使用的Java類型在Class檔案中述
2021-08-08 03:05:12
一條未經證實的訊息就讓整個顯示卡市場再次被點燃,這一點讓所有準備裝機的玩家都始料未及。說好的八月大貨,八月顯示卡價格大跳水,還能等到麼?反正我是不敢妄加斷言,一切還是都交
2021-08-08 03:04:46