在工作表中动态添加组合框
下面的示例将在Excel工作表中动态添加多个组合框,组合框的内容可以在程序中进行定义。
首先,在VBE中插入一个类模块,并命名为“clsCtrlArr”,其代码如下:
Option Explicit
Public WithEvents ctl As ComboBox
Private Sub ctl_Change()
Cancel = True
MsgBox ctl.Name
End Sub
然后,新建一个模块,在其中输入下面的代码:
Option Explicit
Public cmbArea() As New clsCtrlArrSub InsertMyComboBox()
Dim MyRange As String, MyComboBox
MyRange = ActiveCell.Address(0, 0)
Set MyComboBox = ActiveSheet.OLEObjects.Add(ClassType:=”Forms.ComboBox.1″, _
Left:=Range(MyRange).Left, Top:=Range(MyRange).Top, _
Width:=Range(MyRange).Width + 2, Height:=Range(MyRange).Height + 2).Object
ActiveSheet.Shapes(”ComboBox1″).Name = “cmb” & MyRange
Range(MyRange).Offset(2).Activate
Application.OnTime Now + TimeValue(”00:00:01″), “AreaShape”
End Sub
Private Sub AreaShape()
Dim sh As Shape, i As Long
i = 0
For Each sh In ActiveSheet.Shapes
If Left(sh.Name, 3) = “cmb” Then
ReDim Preserve cmbArea(i)
Set cmbArea(i).ctl = sh.OLEFormat.Object.Object
i = i + 1
End If
Next
cmbFill
End Sub
Private Sub cmbFill()
Dim sp
For Each sp In cmbArea()
With sp.ctl
.Clear
.FontSize = 8
.AddItem “First”
.AddItem “Second”
.AddItem “Third”
End With
Next
End Sub
运行过程InsertMyComboBox,则会1秒后在当前单元格下方第二个单元中插入一个组合框,其内容为过程cmbArea所定义的内容。且组合框的大小与单元格的大小一致。
如果运行程序后,出现编译错误,则可以先在工作表中手动插入一个组合框,再运行程序,然后删除刚才插入的组合框,此时,程序运行就正常了。

发表评论