我有一个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
答案 0 :(得分:2)
您可以使用Left
和Top
属性操纵相对于其容器的位置。
所以在这种情况下,要将它们叠加在一起,你可以这样做:
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