



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VBA 中的控件數(shù)組2009 年 2 月 28 日評(píng)論 發(fā)表評(píng)論大家都知道,和 VB 不一樣, VBA 中不能直接創(chuàng)建控件數(shù)組。然而可以使用 WithEvents 來 模擬相同的功能。 我們需要一個(gè)類來處理控件的事件, 而每一個(gè)控件需要一個(gè)類實(shí)例。 對(duì)于 不同控件的類實(shí)例,我們可以使用一個(gè)對(duì)象數(shù)組或者集合來實(shí)現(xiàn)。這里使用按鈕控件做為例子來介紹怎樣在窗體和工作表中創(chuàng)建控件數(shù)組。創(chuàng)建類 創(chuàng)建控件數(shù)組之前,我們需要一個(gè)類來處理控件的事件。在 VBE 窗口中,單擊菜單 “插入 ”->“類模塊 ”,在屬性窗口中將類的名稱改為 “ cCB”。 在類模塊中添加下面這一行:m_CB 并選擇右邊下拉列表中
2、相應(yīng)的事Private WithEvents m_CB As MSForms.CommandButtonPrivateWithEvents m_CB As MSForms.CommandButton' 初始化,將控件綁定到類Public Sub Init(ctl As MSForms.CommandButton)Set m_CB= ctlEnd Sub' 控件的 Click 事件PrivateSub m_CB_Click()MsgBox "你點(diǎn)擊了: " & m_CB.CaptionEnd Sub' 注銷類PrivateSub Class_T
3、erminate()Set m_CB= NothingEnd Sub這樣你就可以從代碼欄的頂部左邊下拉列表中選擇 件。完整的代碼如下:窗體中的控件數(shù)組然后創(chuàng)建一個(gè)窗體,在窗體中添加兩個(gè) CommandButton ,將這兩個(gè)按鈕控件分別命名為 cmd1 和 cmd2 ,然后在窗體中的初始化事件中添加代碼如下:Private ctlCB(1 To 2) As cCB' 以對(duì)象數(shù)組保存類的實(shí)例Private Sub UserForm_Initialize()Set ctlCB(1) =New cCB' 將按鈕 cmd1 賦給類的實(shí)例ctlCB(1).Init cmd1Set ctl
4、CB(2) =New cCBctlCB(2).Init cmd2 End Sub這里使用對(duì)象數(shù)組 ctlCB(1 to 2) 來保存類實(shí)例。每當(dāng)使用 Set 語句創(chuàng)建一個(gè)類實(shí)例,然后使 用類的 Init 方法將按鈕控件賦給這個(gè)實(shí)例。也可以使用集合來保存這個(gè)類的實(shí)例。代碼如下:Private colCB As New Collection Private ctlCB As cCB , 以集合保存類的實(shí)例Private Sub UserForm_Initialize() Set ctlCB =New cCB' 將按鈕 cmd1 賦給類的實(shí)例ctlCB.Init cmd1' 將類的實(shí)
5、例加入到集合中 colCB.Add ctlCBSet ctlCB =New cCBctlCB.Init cmd2 colCB.Add ctlCB End Sub點(diǎn)擊按鈕,將彈出對(duì)應(yīng)的消息框。CoinnaiiiBu ttonlCommaiidJiuttcn上面的例子是將手動(dòng)添加的控件添加到控件數(shù)組中。也可以動(dòng)態(tài)創(chuàng)建控件數(shù)組。創(chuàng)建一個(gè)新的窗體,然后在窗體的初始化事件中使用Controls集合的Add方法添加Comma ndButt on 控件,再將創(chuàng)建好的控件賦給類實(shí)例。完整代碼如下:Private ctlCB(1 To 3) As cCBPrivate Sub UserFormn itializ
6、e()Dim n Ctr As MSForms.Comma ndButtonFor i = 1 To 3添加按鈕控件Set nCtr = Me.Controls.Add("Forms.CommandButton.1", "cmdTest" & i)'設(shè)置按鈕控件標(biāo)題和位置With nCtr.Capti on = "Comma ndButt on_" & i.Move 10, 10 + (i - 1) * 40, 80, 30End With'創(chuàng)建cCB類實(shí)例Set ctlCB(i) = New cCB&
7、#39;將控件賦給類實(shí)例ctlCB(i)nit nCtrNext iEnd Sub工作表中的控件數(shù)組同樣,在工作表中也可以創(chuàng)建控件數(shù)組(但和窗體有些不同)。在工作表中分別創(chuàng)建一個(gè)Label控件和三個(gè) CommandButton 控件,如下圖:然后在Label控件的Click事件中添加如下代碼:Dim cmdCtlO As cCB'標(biāo)簽控件的Click 事件Private Sub Label1_Click()Dim cmd As OLEObject'所有 OLE 對(duì)象Dim i As Integer'重新定義數(shù)組ReDim cmdCtl(1 To Sheet2.OLEOb
8、jects.Cou nt)As cCBi = 1'循環(huán)所有的OLE對(duì)象For Each cmd In Sheet2.OLEObjects'只有CommandButton控件才可以加入到控件數(shù)組If gID = "Forms.CommandButton.1"ThenSet cmdCtl(i) = New cCBcmdCtl(i).I nit cmd.Objecti = i + 1End IfNextMsgBox " 已經(jīng)將工作表中所有 CommandButton 控件建成控件數(shù)組! ", vbInformationEnd Su
9、b值得注意的是使用類 cCB 的 Init 方法時(shí),不能直接使用 cmd 變量,因?yàn)?cmd 變量是OLEObject 類型。需要使用 cmd 變量的 Object 屬性返回 MSForms.CommandButton 變量。 然而在工作表中對(duì)于動(dòng)態(tài)創(chuàng)建的控件使用同樣的方法創(chuàng)建控件數(shù)組時(shí), 動(dòng)態(tài)創(chuàng)建的控件并不 響應(yīng)類實(shí)例的事件。代碼如下:Dim cmdCtl(1 To 5) As cCB' 標(biāo)簽控件的 Click 事件Private Sub Label1_Click()Dim i As IntegerDim cmd As OLEObjectFor 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.5)Set cmdCtl(i) =New cCBcmdCtl(i).Init cm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專項(xiàng)5 標(biāo)點(diǎn)(原卷版)
- 河北省石家莊市新樂一中2024-2025學(xué)年高一下學(xué)期第一次月考生物試題(原卷版+解析版)
- 商品陳列大全
- 2025年初中魯科版(五四學(xué)制)八年級(jí)上冊(cè)第四章第二節(jié)《探究凸透鏡成像規(guī)律》說課稿
- 【國(guó)金證券】人形機(jī)器人行業(yè)研究:人形機(jī)器人從理想走進(jìn)現(xiàn)實(shí)
- 英語護(hù)士應(yīng)聘簡(jiǎn)歷
- 2025年廣東省初中學(xué)業(yè)水平考試模擬英語試題(原卷版+解析版)
- 《會(huì)計(jì)信息系統(tǒng)應(yīng)用》課件 學(xué)習(xí)情境2 系統(tǒng)管理和基礎(chǔ)設(shè)置
- 二零二五年度北京市電子產(chǎn)品寄存與智能監(jiān)控服務(wù)協(xié)議
- 二零二五年度辦公空間互換及增值服務(wù)合作協(xié)議
- GB/T 22310-2023道路車輛制動(dòng)襯片盤式制動(dòng)襯塊受熱膨脹量試驗(yàn)方法
- 中國(guó)古代突騎研究
- 網(wǎng)絡(luò)運(yùn)維從入門到精通29個(gè)實(shí)踐項(xiàng)目詳解
- 2023瓷磚店和裝修公司合作協(xié)議完整版
- JCT2112-2012 塑料防護(hù)排水板
- 第14章歐姆定律復(fù)習(xí)說課稿 2022-2023學(xué)年蘇科版九年級(jí)物理上冊(cè)
- 《思維導(dǎo)圖學(xué)習(xí)法》課件
- 化妝品功效評(píng)價(jià)
- 【眼科學(xué)基礎(chǔ)】眼科癥狀學(xué)
- 中性鹽霧試驗(yàn)報(bào)告
- 4.與食品經(jīng)營(yíng)相適應(yīng)的主要設(shè)備設(shè)施布局操作流程等文件
評(píng)論
0/150
提交評(píng)論