百度知道_excel通吃吧 关注:18贴子:31
  • 0回复贴,共1

VBA中多checkbox控件仿Vb多控件的研究

只看楼主收藏回复

在VBA中,多个控件的操纵变得成了问题,举例说明一下,如图.
密密麻麻的60多个checkbox控件,在功能描述区还要能实现动态更新选择的checkbox对应的值,由于VBA没有控件数组,
不能用一个checkbox_click(i As Integer)过程来实现控制这60多个控件,只能一个个地编写相同的CheckBox1_Click(),
CheckBox2_Click(),……CheckBox61_Click()过程,这61个过程都一样,代码量相当巨大,而且不易排错.
经过清风与山菊花两位大侠的启发,我终于摸索出一种方式,即使用类来代替这个过程.
首先:在类模块class1中定义一个checkbox控件触发事件类,Public WithEvents MyCheck As MSForms.checkbox,
其次:在窗体中引用此类:Dim CheckGrp() As New class1并形成CheckGrp(i)控件数组(形成控件数组),再赋予事件.
For i = 1 To 61
Dim o As Control
Set o = Me.Controls("checkbox" & i)
With o
.Caption = Sheets("功能选择模块").Cells(i + 1, 2).Value
End With
ReDim Preserve CheckGrp(i)
Set CheckGrp(i).MyCheck = o
Next i
再次,为CheckGrp() 编写一个事件过程,
private Sub MyCheck_Click()
if MyCheck.Value=True then
Textbox1.Text= Sheets("功能选择模块").Cells(Mid(MyCheck.Name, 9) + 1, 3).Value
end if
end sub
Mid(MyCheck.Name, 9)表示取得ActiveCheckbox的的Index值,即表示是哪一个控件被激活.
这样,就完成了对全部checkbox控件的_click控制过程,而不用像这样:
private Sub Checkbox1_Click()
if Checkbox1.Value=True then
Textbox1.Text= Sheets("功能选择模块").Cells(1+ 1, 3).Value
end if
end sub
private Sub Checkbox2_Click()
if Checkbox1.Value=True then
Textbox1.Text= Sheets("功能选择模块").Cells(2+ 1, 3).Value
end if
end sub
.
.
.
.
.
private Sub Checkbox61_Click()
if Checkbox1.Value=True then
Textbox1.Text= Sheets("功能选择模块").Cells(61+ 1, 3).Value
end if
end sub


IP属地:山西1楼2014-04-14 21:57回复