2016-12-06 69 views
0

如何將多個複選框添加到userForm框架?這似乎是一個微不足道的事情,但我的代碼只是爲數組中的最後一項生成複選框。動態添加複選框到框架上vba

Private Sub btnGenerate_Click() 
Dim i As Long 
Dim lic As licence 
Dim temp As Variant 
Dim desc As String 
Dim chkbox As MSForms.CheckBox 
Dim str As String 

For Each lic In licenceCollection 
    temp = lic.getClause 
Next lic 

For i = LBound(temp) To UBound(temp) 
    'Debug.Print temp(i) 
    desc = "Future-Sampling " & i 
    'Utility.createCheckBoxes temp(i), desc 
    Set chkbox = licenceForm.resultFrame.Controls.Add("Forms.Checkbox.1", desc) 
    chkbox.Caption = temp(i) 
    chkbox.Value = desc 
    chkbox.Width = "450" 
    chkbox.Height = "50" 
    chkbox.WordWrap = True 
    chkbox.Value = False 
    chkbox.GroupName = "Future Sampling" 
Next 
End Sub 

這裏的任何建議非常感謝。提前致謝。

+0

您需要在最後一個接着我... – Rdster

+0

@Rdster「下一步」 +變量用來只爲保留的範圍值i循環。 – holmicz

+1

@holmicz - 它與範圍無關。 'Next'和'Next i'之間沒有任何功能上的區別。這完全是一個偏好和編碼風格的問題。 – Comintern

回答

0

我認爲問題在於,您在相同的位置添加組件,因此它是重疊的,您只能看到最後一個,不是嗎?如果我沒有記錯,您需要調整lefttop座標。

1

它們都被創建得很好,但是隻能看到最後一個的原因是它們在添加時都默認堆疊在默認位置。你需要將它們與.Top.Left性質定位:

Dim xPos As Long 
For i = LBound(temp) To UBound(temp) 
    desc = "Future-Sampling " & i 
    Set chkbox = Me.Controls.Add("Forms.Checkbox.1", desc) 
    With chkbox 
     .Top = xPos 
     .Caption = temp(i) 
     .Value = desc 
     .Width = 450 
     .Height = 24 
     .WordWrap = True 
     .Value = False 
     .GroupName = "Future Sampling" 
     xPos = xPos + 24 
    End With 
Next 
0

感謝所有,似乎這樣的伎倆!我從來沒有想通這個續

以下修改後的代碼片段,

 For i = LBound(temp) To UBound(temp) 
       desc = "Future-Sampling " & i 
       Set chkbox = Me.resultFrame.Controls.Add("Forms.Checkbox.1", desc) 
       With chkbox 
        .Top = xPos 
        .Caption = temp(i) 
        .Value = desc 
        .Width = 450 
        .Height = 24 
        .WordWrap = True 
        .Value = False 
        .GroupName = "Future Sampling" 
        xPos = xPos + 24 
       End With 


     Next i 
+1

然後接受@Comintern的回答! – user3598756