2014-09-02 72 views
1

我希望用户选择要在哪些工作表上创建新的文本行。但是他可以选择的纸张数量可能会随时间变化,我不想对纸张名称进行硬编码。根据参数创建用户窗体中的复选框

下面是一个例子(“O”表示复选框)什么,我的目标是尽:

o 01.2013 
o 07.2013 
o 01.2014 
o 07.2014 

我创建了一个空框的窗体把我的复选框,并添加以下代码位用户表单:

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,但它也没有起作用。

回答

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 
+1

完美的作品!谢谢 – Tom 2014-09-02 12:27:29

相关问题