VBA动态复选框定位

时间:2015-01-05 19:06:01

标签: excel vba excel-vba checkbox userform

我有一个Excel VBA用户表单,我试图根据给定字典中的项目数添加一些复选框。

这样可行,但我的每个复选框都添加到左上角,彼此重叠。我怎样才能将它们放在最新的位置之下?

以下是我的相关代码:

With CreateObject("Scripting.Dictionary")
'Variable Checkboxes
Dim i As Long
Dim chkBox As MSForms.CheckBox
For i = 1 To .count - 1
    Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
    chkBox.Caption = .Keys()(i)
    chkBox.VALUE = False  
Next i

2 个答案:

答案 0 :(得分:2)

您可以使用LeftTop属性操纵相对于其容器的位置。

所以在这种情况下,要将它们叠加在一起,你可以这样做:

Const Spacing As Integer = 8 ' Gap between controls.
For i = 1 To .count - 1
    Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
    ' Position the new checkbox.
    ' This assumes all will be the same size.  
    chkBox.Top = (chkBox.Height + Spacing) * (i - 1)
    ...  
Next

你可能想稍微玩这个,但这应该会让你开始。

答案 1 :(得分:1)

我认为一个问题是你如何分配Checkbox。尝试使用Checkbox而不是MSForms.Checkbox。可能会出现更多选项,包括Top选项:

With CreateObject("Scripting.Dictionary")
'Variable Checkboxes
Dim i As Long
Dim chkBox As CheckBox
For i = 1 To .Count - 1
    Set chkBox = Me.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
    chkBox.Caption = .Keys()(i)
    chkBox.Value = False
    chkBox.Top = ...enter top location here...

Next i

End Sub