2014-09-02 2 views
1

Я хочу, чтобы пользователь выбирал, на каких листе он хочет создать новую строку текста. Но количество листов, которые он может выбрать, может меняться со временем, и я не хочу жестко указывать имя листа.Создание флажков в пользовательской форме в зависимости от параметров

Вот пример («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, но он не работает.

ответ

2

Ваши флажки есть, вы просто не можете их видеть, потому что они наложены друг на друга. У вас была правильная идея с изменением значения «Top».

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

Смежные вопросы