【发布时间】:2020-08-12 08:57:08
【问题描述】:
我正在创建一个用户表单,它有 1 个组合框 (1)、2 个文本框(2 和 3)和 11 个复选框(AK),如图所示。所有控件的第一个实例都将出现,但是当用户单击 Add Class 时,必须创建一组新的所有控件,并且 Remove Class 应该删除特定行。
我已经设法获得了一个实例的需求,但是我无法弄清楚我该如何做 N 次,并且用户窗体的大小也在扩大。
Private Sub cmdAddClass()
Dim cCheckBox As Control, r As Long, r1 As Range
Set r1 = Sheets("Sheet1").Range("A2:A12")
Set cComboBox = Me.Controls.Add("Forms.ComboBox.1")
With cComboBox
.Height=25.5
.Width=102
.Top=50
.Left =6
End With
Set cTextBox = Me.Controls.Add("Forms.TextBox.1")
With cTextBox
.Height=25.5
.Width=54
.Top=50
.Left =114
End With
For r = 1 To WorksheetFunction.CountA(r1)
If r1(r) <> vbNullString Then
Set cCheckBox = Me.Controls.Add("Forms.CheckBox.1", "Checkbox" & r, True)
With cCheckBox
.Width = 21
.Height = 11
.Top = 50
If r = 1 Then
.Left = 270
ElseIf r = 2 Then
.Left = 348
ElseIf r = 3 Then
.Left = 420
ElseIf r = 4 Then
.Left = 492
ElseIf r = 5 Then
.Left = 564
ElseIf r = 6 Then
.Left = 636
ElseIf r = 7 Then
.Left = 701.95
ElseIf r = 8 Then
.Left = 780
ElseIf r = 9 Then
.Left = 876
ElseIf r = 10 Then
.Left = 966
Else
.Left = 1050
End If
End With
End If
Next r
End Sub
【问题讨论】:
-
这里有几个提示可以帮助您入门。首先,计算每次按下按钮时 .Top 的值。其次,您不应该在添加控件时扩大表单的大小。相反,您想要实现滚动。第三,您需要在添加和删除控件时重新定位按钮。
-
您希望添加多少
N次新行? -
@AlexP 也许在 10-15 左右
-
@BrianMStafford 你能指导我如何计算 .Top 吗?
-
@Cody 不是硬编码的 Top of 50,而是有一个模块级或静态变量来跟踪 Top。每次按下按钮时,都会在顶部添加一个数字,以保持控件的正确间隔。你应该添加什么数字?我不知道,继续调整它直到你喜欢表格的样子。