Dynamic 如何传递在用户窗体上运行时创建的复选框的值(真/假)

Dynamic 如何传递在用户窗体上运行时创建的复选框的值(真/假),dynamic,excel,checkbox,vba,Dynamic,Excel,Checkbox,Vba,在读取excel工作表中的所有非空行之后,我试图在UserForm上创建一些复选框。这意味着必须在运行时创建这些复选框。我还想在UserForm上添加一个CommandButton。我想要的是,一旦用户按下这个CommandButton,代码应该能够向子例程发送关于选中哪些复选框以及它们的名称的信息 可以帮助我解决问题吗?< /p> ,而不是试图在用户窗体上动态创建复选框(我甚至不确定是可能的)考虑使用具有fMistListSype选项的列表样式的列表框,并使用FMuleSultMultOut/

在读取excel工作表中的所有非空行之后,我试图在UserForm上创建一些复选框。这意味着必须在运行时创建这些复选框。我还想在UserForm上添加一个CommandButton。我想要的是,一旦用户按下这个CommandButton,代码应该能够向子例程发送关于选中哪些复选框以及它们的名称的信息


可以帮助我解决问题吗?< /p> ,而不是试图在用户窗体上动态创建复选框(我甚至不确定是可能的)考虑使用具有fMistListSype选项的列表样式的列表框,并使用FMuleSultMultOut/P>MultSe选项打开。 使用AddItem方法填充列表框

For i = 0 to 9
  Me.lbxDivisions.AddItem
  Me.lbxDivisions.List(i) = "Checkbox " & format(i)
Next i
并确定通过选定属性检查哪些项目:

For i = 0 To lbxDivisions.ListCount - 1
  If lbxDivisions.Selected(i) Then
    MsgBox "Item " & Format(i) & " is selected and has value " & lbxDivisions.List(i)
  End If
Next i

您可以通过编程方式将表单控件(复选框、列表框等)添加到userforms。从表单的代码模块中

Me.Controls.Add“Forms.CheckBox.1”,“CheckBox1”,True)

从任何其他代码模块中,只需按名称引用表单,而不是
Me
,例如

MyUserForm.Controls.Add“Forms.CheckBox.1”,“CheckBox1”,True)

就我个人而言,我倾向于使用更动态的控件(如列表框或组合框),除非您的任务绝对要求您使用复选框。使用动态控件时,您需要管理它们的大小、相对于其他控件的位置、调整用户窗体的大小(如果需要)等等,尽管可以将事件处理添加到这些控件(),但这确实是有限的(例如,如果您希望添加10个复选框,每个复选框执行不同的操作,则需要预写10个复选框子例程。如果您创建11个复选框,但只创建10个预写例程,则最后一个复选框不会执行任何操作。在设计表单时,只创建所有复选框,然后以编程方式设置根据情况需要,m到
Visible=True
Visible=False


因此,我倾向于使用动态控件,如列表框或组合框,但如果必须的话,可以在运行时添加窗体控件,如复选框。

到目前为止您尝试了什么,以及您遇到了什么问题?发布您当前的代码(即使它不起作用)总是会给你带来更多的帮助。现在你所拥有的只是一个需求。你可以动态添加表单控件)
Me.controls.add“Forms.CheckBox.1”、“CheckBox1”,True
),但这是一个PITA,我肯定会避免它,支持你的建议。使用动态控件(如ListBox)总比尝试在内存中管理临时控件要好。谢谢@David,知道动态方式是可能的真是太好了!如果列表框方法不适用于op,那么这是否值得作为一个单独的答案?