根据参数在userform中创建复选框

时间:2014-09-02 11:36:47

标签: excel vba checkbox

我希望用户选择他想要创建新文本行的工作表。但他能够选择的纸张数量可能会随着时间的推移而变化,我不想对纸张进行硬编码。名。

以下是我打算做的一个例子(" 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但它也无法工作。

1 个答案:

答案 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