VBA中的控件數(shù)組_第1頁
VBA中的控件數(shù)組_第2頁
VBA中的控件數(shù)組_第3頁
VBA中的控件數(shù)組_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論