如下图所示

在excel的“开发工具”选项卡下的“控件”组中可以插入表单控件和ActiveX控件。
表单控件又称为窗体控件,不能响应事件。
ActiveX控件可以响应事件。
在VBA中凡是插入到excel中的对象,不管是表单控件、窗体控件还是 ActiveX控件 都属于Shape 对象。
不同的Shape 对象有不同的Type类型属性,比如表单控件的Type类型属性为msoFormControl(值为8),ActiveX控件的Type类型属性为msoOLEControlObject(值为12)。其它更多的类型,可以查看MsoShapeType枚举常量。
如果要用vba添加表单控件(窗体控件),可以使用Shapes集合对象的AddFormControl 方法,对于创建添加的表单控件(窗体控件),如果要设置它的各种属性,比如它的”数据源区域”、“单元格链接”等,可以使用Shape对象的ControlFormat属性返回对应控件的各种属性设置。
以下代码演示了如何向工作表中添加列表框窗体控件,同时添加列表框窗体控件的项目,以及链接单元格:
Sub QQ1722187970()
Dim oListBox As Shape
'先删除之前的表单控件
For Each oListBox In Sheet1.Shapes
If oListBox.Type = msoFormControl Then
oListBox.Delete
End If
Next
'添加表单控件
Set oListBox = Sheet1.Shapes.AddFormControl(xlListBox, 0, 0, 100, 100)
'设置表单控件的属性
With oListBox.ControlFormat
.AddItem "1"
.AddItem "2"
.LinkedCell = "e1"
End With
End Sub
如果要删除某个特定类型的窗体控件,比如只删除列表框窗体控件,可以使用使用Shape对象的FormControlType属性进行判断。
如果要用vba创建添加ActiveX控件,可以使用Shapes集合对象的AddOLEObject方法,或者使用OLEObjects集合对象的Add方法创建添加ActiveX控件。如果要设置它的各种属性,激活进入编辑状态,可以使用Shape对象的OLEFormat属性进行设置。
如下代码将添加ListBox ActiveX控件:
Sub QQ1722187970()
Dim oListBox As Shape
'先删除之前的控件
For Each oListBox In Sheet1.Shapes
If oListBox.Type = msoOLEControlObject Or oListBox.Type = msoFormControl Then
oListBox.Delete
End If
Next
'添加ActiveX控件
Set oListBox = Sheet1.Shapes.AddOLEObject(ClassType:="Forms.ListBox.1", Left:=10, Top:=10, Width:=100, Height:=200)
'设置ActiveX控件的属性
With oListBox.OLEFormat
Debug.Print .progID
.Verb xlVerbOpen
End With
End Sub


发表评论