如何用vba在工作表中创建添加表单控件、窗体控件、 ActiveX控件?

如下图所示

在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
       

发表评论