如下图所示
在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
发表评论