我想使用VBA在表单上动态添加单选按钮。
我尝试编写此代码,但它与“类型不匹配”
崩溃Dim optionBtn As OptionButton
Set optionBtn = UserForm1.Controls.Add("Forms.OptionButton.1", "name", True)
optionBtn.Left = 10
optionBtn.Top = 10
optionBtn.Width = 30
optionBtn.Group = "q1"
我也试过这样做:
Dim optionBtn As Control
Set optionBtn = UserForm1.Controls.Add("Forms.OptionButton.1", "name", True)
optionBtn.Left = 10
optionBtn.Top = 10
optionBtn.Width = 30
optionBtn.Group = "q1"
但我得到一个Control,而不是OptionButton - 如何将它转换为OptionButton? (对不起,我是VB的新手)
答案 0 :(得分:2)
我能够使用它(Excel 2003):
Dim lbl As Variant
Set lbl = UserForm1.Controls.Add("Forms.Label.1", "lblFoo", True)
lbl.Caption = "bar"
更新以反映您从Label到OptionButton的更改
同样,关键是使用Variant类型为您将返回的控件分配给的变量:
Dim opt As Variant
Set opt = UserForm1.Controls.Add("Forms.OptionButton.1", "radioFoo", True)
opt.Caption = "Bar"
请记住,自动完成功能不适用于定义为变体的变量。但是,您仍然可以通过手动键入这些变量的属性和方法来引用它们。
答案 1 :(得分:1)
实际上,我认为你的问题在于你将optionBtn命名为对象按钮。它需要被命名为MSForms选项按钮。由于Variant可以是一个对象,因此在使用变体时它将起作用。
我使用了以下内容并且工作正常。
Dim TempForm As Object
Dim newOptionButton as MSForms.OptionButton
Dim sUserformName as string
Dim i as integer
Dim x as integer
Dim y as integer
' other junk removed for example sake...
sUserformName = sheet1.cells(1,1)
' create form
Set TempForm = ThisWorkbook.VBProject.VBComponents.Add(3)
With TempForm
.Properties("Caption") = sUserformName
.Properties("Width") = 450
.Properties("Height") = 300
End With
for i = 3 to sheet1.range("A65536").End(XlUp).Row
sDefault = sheet1.cells(i,5)
iGN = sheet1.cells(i,6)
' additional code removed... for sake of example... the code would add labels, text boxes, etc...
Set newOptionButton = TempForm.designer.Controls.Add("Forms.optionbutton.1")
With newOptionButton
.Caption = sDefault
.GroupName = "Group" & iGN
.Top = 20 + (20 * x)
.Left = y
.Height = 16
.Font.Size = 8
.Font.Name = "Ariel"
End With
'此处代码根据用户(excel模板)指向下一个控件的位置更改x和y。
下一个
祝你好运....答案 2 :(得分:0)
标记的代码应该有效,但我通常更喜欢手动创建项目,然后根据需要显示/隐藏它。
答案 3 :(得分:0)
您需要将对象定义为msforms库中的选项按钮。
Dim optionBtn As MSForms.OptionButton
Set optionBtn = UserForm1.Controls.Add("Forms.OptionButton.1", "name", True)