Excel 我想用VBA声明和创建一个用户表单

Excel 我想用VBA声明和创建一个用户表单,excel,vba,Excel,Vba,我正试图在VBA中创建一个新的用户表单,其帮助如下: 但是我在dimc控件上遇到了愚蠢的错误: 未定义用户定义的类型 我的想法是在VBA上创建一个新的用户表单,并用复选框填充它(从一个数组,而不是链接中的范围) 当我使用现有的用户表单时,代码是有效的,但是我想与其他人共享我的代码,然后让他们手工创建一个名为UserForm1的新用户表单会有点困难——如果你知道我的意思的话 所以这里的主要问题是在宏中声明一个新的用户表单 我还想知道这对URL中的那些人是如何起作用的,因为这只是从2014年开始的

我正试图在VBA中创建一个新的用户表单,其帮助如下:

但是我在
dimc控件上遇到了愚蠢的错误:

未定义用户定义的类型

我的想法是在VBA上创建一个新的用户表单,并用复选框填充它(从一个数组,而不是链接中的范围)

当我使用现有的用户表单时,代码是有效的,但是我想与其他人共享我的代码,然后让他们手工创建一个名为UserForm1的新用户表单会有点困难——如果你知道我的意思的话

所以这里的主要问题是在宏中声明一个新的用户表单


我还想知道这对URL中的那些人是如何起作用的,因为这只是从2014年开始的,而且当时似乎起了作用。因此,我想知道是否有更新中断了某个库,或者这里有什么问题。

请分析这个简单的代码,我想它会对您有所帮助

Sub MyForm()

    Dim myFRM   As Object
    Dim myFRM2  As Object

    ' If Userform exists in workbook and its name is UserForm1
    Set myFRM = UserForm1

    ' If You want to create userform on the fly
    Set myFRM2 = ThisWorkbook.VBProject.VBComponents.Add(3)

    Dim c As Object
    ' or
    Dim d As MSForms.CheckBox

    Set c = myFRM2.Designer.Controls.Add("Forms.CheckBox.1", "Checkbox1", True)
    Set d = myFRM2.Designer.Controls.Add("Forms.CheckBox.1", "Checkbox2", True)

    VBA.UserForms.Add(myFRM2.name).Show
    ThisWorkbook.VBProject.VBComponents.Remove myFRM2

    Set c = myFRM.Controls.Add("Forms.CheckBox.1", "Checkbox1", True)
    Set d = myFRM.Controls.Add("Forms.CheckBox.1", "Checkbox2", True)

    myFRM.Show


End Sub

需要引用MS表单库,或使用后期绑定的
Dim SelectionControl作为对象
。此外,它看起来像是
SelectionForm
是一种
控件
类型,而不是用户表单。如果您的想法只是共享这个vba代码而不是依赖的表单对象,那么这可能不是实现它的好方法。最好是分发包含所有必需组件的XLSM文件或XLAM文件(外接程序)。我可以在宏中引用MS Forms library吗?用户表单是指弹出的任何窗口,可以有复选框,其中的值可以传递给数组。简单的答案是“我是否可以在宏中添加对MS Forms library的引用”是否。从技术上讲,它是肯定的,但您不能这样做,并使用早期绑定
作为控件
声明(如果使用条件编译,您可能也可以这样做…)。这就是为什么要分发XLSM for XLAM文件,而不是代码模块的纯文本版本。XLSM/XLAM文件格式将包含执行过程所需的所有内容(假设尝试运行宏的计算机上存在这些资源)。
Sub MyForm()

    Dim myFRM   As Object
    Dim myFRM2  As Object

    ' If Userform exists in workbook and its name is UserForm1
    Set myFRM = UserForm1

    ' If You want to create userform on the fly
    Set myFRM2 = ThisWorkbook.VBProject.VBComponents.Add(3)

    Dim c As Object
    ' or
    Dim d As MSForms.CheckBox

    Set c = myFRM2.Designer.Controls.Add("Forms.CheckBox.1", "Checkbox1", True)
    Set d = myFRM2.Designer.Controls.Add("Forms.CheckBox.1", "Checkbox2", True)

    VBA.UserForms.Add(myFRM2.name).Show
    ThisWorkbook.VBProject.VBComponents.Remove myFRM2

    Set c = myFRM.Controls.Add("Forms.CheckBox.1", "Checkbox1", True)
    Set d = myFRM.Controls.Add("Forms.CheckBox.1", "Checkbox2", True)

    myFRM.Show


End Sub