如何使用VBA在表单上动态添加单选按钮

时间:2010-01-12 13:52:49

标签: excel-vba label vba excel

我想使用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的新手)

4 个答案:

答案 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)