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