2009-02-19 2 views

ответ

14

Следующий код демонстрирует, как можно динамически заполнить кадр в UserForm с контрольной группой ...

В форме я использовал я имел контроль кадр с именем Frame1, поэтому в UserForm_Initialize вы звоните Frame1.Controls. Добавьте встроенный элемент управления в фрейм. Вы можете установить элемент управления, который возвращается в переменную управления WithEvents, которую вы определили в модуле кода UserForm, чтобы вы могли реагировать на события на любых элементах управления, которые вы хотите ...

Итак, с помощью этого метода вам необходимо предварительно записать любой код события, который вы хотите для каких-либо элементов управления, которые вы создаете ...

Также обратите внимание, что вы можете позиционировать и изменять размеры элементов управления, даже если свойства top, left, width и height необязательно появляются в intellisense ...

Private WithEvents Cmd As MSForms.CommandButton 
Private WithEvents Lbl As MSForms.Label 

Private Sub UserForm_Initialize() 
    Set Lbl = Frame1.Controls.Add("Forms.Label.1", "lbl1") 
    Lbl.Caption = "Foo" 
    Set Cmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmd1") 
End Sub 

Private Sub Cmd_Click() 
    Cmd.Top = Cmd.Top + 5 
End Sub 

Private Sub Lbl_Click() 
    Lbl.Top = Lbl.Top + 5 
End Sub 
+5

Почему '' 1 "' в конце имени класса в методе 'add'? – Triztian

+0

Я не знаю. Я знаю, что это не сработает без этого. –

+0

Мне бы очень хотелось знать, почему это должно быть «Forms.CommandButton.1» тоже – FinancialRadDeveloper

4

Мое изменение по теме выше. Это всего лишь для 4x4 кнопок. Создайте пользовательскую форму и добавьте ее в свой код. Те же самые понятия могут использоваться с вашими метками (или см. Предыдущий ответ):

Private cmdLots(20) As MSForms.CommandButton 

Private Sub UserForm_Initialize() 
For i = 1 To 4 
For j = 1 To 4 
    k = i + (4 * j) 
    Set cmdLots(k) = UserForm2.Controls.Add("Forms.CommandButton.1", "cmd1") 
    With cmdLots(k) 
     .Top = i * 25 
     .Left = (j * 80) - 50 
     .BackColor = RGB(50 * i, 50 * j, 0) 
     .Caption = "i= " & i & " j= " & j 
    End With 
Next j 
Next i 
End Sub 
+0

как использовать эти шестнадцать кнопок? – Qbik

+0

@ Qbik прочитал «WithEvents», и вы увидите. – Robino

+0

Также читайте http://stackoverflow.com/questions/10130300/how-do-we-know-the-sender-of-the-buttons-in-vba – Robino

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