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
您可以使用 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
您可能想尝试一下,但这应该可以帮助您入门。
我认为一个问题是您如何分配复选框。尝试使用复选框而不是 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
我有一个 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
您可以使用 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
您可能想尝试一下,但这应该可以帮助您入门。
我认为一个问题是您如何分配复选框。尝试使用复选框而不是 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