2010-01-12 34 views
1

我想動態地添加一個窗體上的單選按鈕,使用VBA。我怎樣才能動態地添加一個單選按鈕在窗體上使用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" 

,但我得到了控制,而不是一個選項按鈕 - 怎麼能我把它投給了一個OptionButton? (對不起,我是新來的VB)

回答

2

我能得到它與該作品(Excel 2003中):

Dim lbl As Variant 

Set lbl = UserForm1.Controls.Add("Forms.Label.1", "lblFoo", True) 
lbl.Caption = "bar" 

更新,以反映從標籤到一個選項按鈕的變化

再次,關鍵是使用的變量,你是指派返回控制給Variant類型:

Dim opt As Variant 

Set opt = UserForm1.Controls.Add("Forms.OptionButton.1", "radioFoo", True) 
opt.Caption = "Bar" 

請記住,自動完成功能不適用於定義爲變體的變量。但是,您仍然可以通過手動輸入變量來引用這些變量的屬性和方法。

0

mark的代碼應該可以工作,但我通常更喜歡手動創建該項目,然後根據需要顯示/隱藏它。

+1

這一切都取決於你想要做什麼。我曾經遇到過顯示錶單的情況,這取決於電子表格中的信息。在這種情況下,創建動態控件幾乎是處理它的唯一方法。 – 2010-01-12 19:45:28

+0

我同意。如果我只需要取消隱藏,我就不得不始終創建它們......很難從問題中看出OP是從哪裏來的。 只要我們拋出選項......我還將使用多頁工具並隱藏選項卡來控制表單流。 – guitarthrower 2010-01-12 23:07:07

0

您需要將對象定義爲msforms庫中的optionbutton。

Dim optionBtn As MSForms.OptionButton 
Set optionBtn = UserForm1.Controls.Add("Forms.OptionButton.1", "name", True) 
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 

「這裏的代碼的變化x和y依賴於在用戶(Excel模板)指示的下一個控制。

下一個我

好運....

相關問題