在读取 excel 工作表中的所有非空行后,我试图在 UserForm 上创建多个复选框。这意味着这些复选框必须在运行时创建。我还想在用户窗体上放置一个命令按钮。我想要的是,一旦用户按下此命令按钮,代码应该能够向子例程发送有关选中哪些复选框及其名称的信息。
谁能帮我解决问题。
与其尝试在用户窗体上动态创建复选框(我什至不确定是否可能),不如考虑使用 ListStyle 为 fmListStyleOption 并使用 fmMultiSelectMulti 打开 MultiSelect 的列表框
使用 AddItem 方法填充列表框
For i = 0 to 9
Me.lbxDivisions.AddItem
Me.lbxDivisions.List(i) = "Checkbox " & format(i)
Next i
并确定通过 Selected 属性检查哪些项目:
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
您可以以编程方式将表单控件(复选框、列表框等)添加到用户表单。从表单的代码模块中,
Me.Controls.Add "Forms.CheckBox.1", "CheckBox1", True)
从任何其他代码模块,只需按名称引用表单,而不是Me
,例如,
MyUserForm.Controls.Add "Forms.CheckBox.1", "CheckBox1", True)
我个人倾向于使用更动态的控件(如列表框或组合框),除非您的任务绝对需要您使用复选框。使用动态控件,您需要管理它们的大小、相对于其他控件的位置、调整用户窗体的大小(如有必要)等,尽管可以为这些控件添加事件处理(参见此处),但这确实是有限的(例如,如果您希望添加 10 个复选框,每个复选框执行不同的操作,则需要预先编写 10 个复选框子例程。如果您创建 11 个复选框但只预先编写了 10 个例程,则最后一个复选框不会t 做任何事情。在设计表单时创建所有复选框会更容易,然后以编程方式将它们设置为Visible=True
或Visible=False
根据情况需要。
因此,我倾向于使用动态控件,如列表框或组合框,但如果必须,可以在运行时添加复选框等表单控件。