VBA 动态复选框定位

VBA dynamic checkboxes positioning

我有一个 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

您可以使用 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

您可能想尝试一下,但这应该可以帮助您入门。

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

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