我希望用户选择他想要创建新文本行的工作表。但他能够选择的纸张数量可能会随着时间的推移而变化,我不想对纸张进行硬编码。名。
以下是我打算做的一个例子(" o"代表复选框):
o 01.2013
o 07.2013
o 01.2014
o 07.2014
我创建了一个带有空框架的userform来放置我的复选框,并将这段代码添加到用户窗体中:
Private Tck(10) As MSForms.CheckBox
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim i As Long
i = 1
For Each ws In ActiveWorkbook.Worksheets
If Left(ws.Name, 3) = "T2M" Then
Set Tck(i) = Frame1.Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
Tck(i).Caption = Right(ws.Name, 7)
i=i+1
End If
Next
End Sub
但它只在最后一张纸上添加了一个复选框,用于验证if测试。
我尝试在两次迭代之间进行偏移,但我不能使用Tck(i)
来修改Tck(i).top
的位置。
我也从这个问题的答案中尝试了这个方法:Adding controls to a frame in an Excel userform with VBA但它也无法工作。
答案 0 :(得分:2)
你的复选框在那里,你只是看不到它们,因为它们叠加在一起。你有正确的想法改变'顶'值。
Public Sub addCheckboxes()
Dim ws As Worksheet
Dim i As Integer
Dim tck As MSForms.CheckBox
Dim offset As Integer: offset = 5
For i = 1 To Worksheets.Count
Set ws = Worksheets(i)
Set tck = Frame1.Controls.Add("Forms.Checkbox.1", "Checkbox" & i, True)
tck.Top = offset
offset = offset + 15
Next i
End Sub