版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、VBA中的控件數組2009年2月28日 評論 發(fā)表評論 大家都知道,和VB不一樣,VBA中不能直接創(chuàng)建控件數組。然而可以使用WithEvents來模擬相同的功能。我們需要一個類來處理控件的事件,而每一個控件需要一個類實例。對于不同控件的類實例,我們可以使用一個對象數組或者集合來實現。這里使用按鈕控件做為例子來介紹怎樣在窗體和工作表中創(chuàng)建控件數組。創(chuàng)建類創(chuàng)建控件數組之前,我們需要一個類來處理控件的事件。在VBE窗口中,單擊菜單“插入”->“類模塊”,在屬性窗口中將類的名稱改為“cCB”。在類模塊中添加下面這一行:Private WithEvents m_CB As MSForms.Comm
2、andButton這樣你就可以從代碼欄的頂部左邊下拉列表中選擇m_CB并選擇右邊下拉列表中相應的事件。完整的代碼如下:Private WithEvents m_CB As MSForms.CommandButton' 初始化,將控件綁定到類Public Sub Init(ctl As MSForms.CommandButtonSet m_CB = ctlEnd Sub' 控件的Click事件Private Sub m_CB_Click(MsgBox "你點擊了:" & m_CB.CaptionEnd Sub' 注銷類Private Sub C
3、lass_Terminate(Set m_CB = NothingEnd Sub窗體中的控件數組然后創(chuàng)建一個窗體,在窗體中添加兩個CommandButton,將這兩個按鈕控件分別命名為cmd1和cmd2,然后在窗體中的初始化事件中添加代碼如下:Private ctlCB(1 To 2 As cCB' 以對象數組保存類的實例Private Sub UserForm_Initialize(Set ctlCB(1 = New cCB' 將按鈕cmd1賦給類的實例ctlCB(1.Init cmd1Set ctlCB(2 = New cCBctlCB(2.Init cmd2End Sub
4、這里使用對象數組ctlCB(1 to 2來保存類實例。每當使用Set語句創(chuàng)建一個類實例,然后使用類的Init方法將按鈕控件賦給這個實例。也可以使用集合來保存這個類的實例。代碼如下:Private colCB As New CollectionPrivate ctlCB As cCB 以集合保存類的實例Private Sub UserForm_Initialize(Set ctlCB = New cCB' 將按鈕cmd1賦給類的實例ctlCB.Init cmd1' 將類的實例加入到集合中colCB.Add ctlCBSet ctlCB = New cCBctlCB.Init cm
5、d2colCB.Add ctlCBEnd Sub點擊按鈕,將彈出對應的消息框。上面的例子是將手動添加的控件添加到控件數組中。也可以動態(tài)創(chuàng)建控件數組。創(chuàng)建一個新的窗體,然后在窗體的初始化事件中使用Controls集合的Add方法添加CommandButton控件,再將創(chuàng)建好的控件賦給類實例。完整代碼如下:Private ctlCB(1 To 3 As cCBPrivate Sub UserForm_Initialize(Dim nCtr As MSForms.CommandButtonFor i = 1 To 3' 添加按鈕控件Set nCtr = Me.Controls.Add(&qu
6、ot;Forms.CommandButton.1", "cmdTest" & i' 設置按鈕控件標題和位置With nCtr.Caption = "CommandButton_" & i.Move 10, 10 + (i - 1 * 40, 80, 30End With' 創(chuàng)建cCB類實例Set ctlCB(i = New cCB' 將控件賦給類實例ctlCB(i.Init nCtrNext iEnd Sub工作表中的控件數組同樣,在工作表中也可以創(chuàng)建控件數組(但和窗體有些不同)。在工作表中分別創(chuàng)建一個L
7、abel控件和三個CommandButton控件,如下圖:然后在Label控件的Click事件中添加如下代碼:Dim cmdCtl( As cCB' 標簽控件的Click事件Private Sub Label1_Click(Dim cmd As OLEObject ' 所有OLE對象Dim i As Integer' 重新定義數組ReDim cmdCtl(1 To Sheet2.OLEObjects.Count As cCBi = 1' 循環(huán)所有的OLE對象For Each cmd In Sheet2.OLEObjects' 只有CommandButto
8、n控件才可以加入到控件數組If gID = "Forms.CommandButton.1" ThenSet cmdCtl(i = New cCBcmdCtl(i.Init cmd.Objecti = i + 1End IfNextMsgBox "已經將工作表中所有CommandButton控件建成控件數組!", vbInformationEnd Sub值得注意的是使用類cCB的Init方法時,不能直接使用cmd變量,因為cmd變量是OLEObject類型。需要使用cmd變量的Object屬性返回MSForms.CommandButton變量
9、。然而在工作表中對于動態(tài)創(chuàng)建的控件使用同樣的方法創(chuàng)建控件數組時,動態(tài)創(chuàng)建的控件并不響應類實例的事件。代碼如下:Dim cmdCtl(1 To 5 As cCB' 標簽控件的Click事件Private Sub Label1_Click(Dim i As IntegerDim cmd As OLEObject For i = 1 To 5Set cmd = Sheet3.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _Left:=Cells(i * 3 + 3, 2.Left, Top:=Cells(i * 3 + 3, 2.Top, Width:=Cells(1, 1.Width * 2, Height:=Cells(1, 1.Height * 1.5Set cmdCtl(i = New cCBcmdCtl(i.Init
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)銷售外包服務協(xié)議2024年版版B版
- 2025年草花產品進出口代理服務合同3篇
- 二零二五年度孤兒領養(yǎng)及家庭支持保障協(xié)議2篇
- 2024餐飲加盟合作協(xié)議書
- 二零二五年度銀行業(yè)存款居間代理傭金支付協(xié)議2篇
- 中醫(yī)調理失眠
- 2024石材荒料購銷及石材雕刻工藝傳承合同2篇
- 貴州省遵義市(2024年-2025年小學六年級語文)統(tǒng)編版課后作業(yè)(下學期)試卷及答案
- 福建省三明市(2024年-2025年小學六年級語文)部編版競賽題((上下)學期)試卷及答案
- 2024房產買賣合同補充協(xié)議2篇
- 關于心理健康教育情況的調研報告
- 內側蒂直線短瘢痕法治療乳房肥大癥的臨床研究
- 天一大聯考2024屆物理高一上期末學業(yè)水平測試試題含解析
- 整改回復書樣板后邊附帶圖片
- 空氣能施工方案
- 常見藻類圖譜(史上最全版本)
- 硫酸裝置操作規(guī)程
- 2.1特種設備安全法、容規(guī)、管規(guī)等法律法規(guī)培訓
- Python數據分析案例實戰(zhàn)PPT完整全套教學課件
- 慢性腎病高磷血癥
- 廣告牌計算程序
評論
0/150
提交評論