цитата из книги Уокенбаха "Профессиональное программирование в Excel"
Цитата:
Листинг 28.5. Генерация диалогового окна UserForm, содержащего 100 кнопок
Пример данного раздела демонстрирует преимущества использования объекта D e s i g n e r
при создании диалоговых окон UserForm. В этом случае код добавляет 100 элементов управ-
ления CommandButton (которые соответствующим образом расположены и выровнены), уста-
наачивает значение свойства C a p t i o n для каждого элемента управления CammandButto:] и
создает 100 процедур обработки событий (для каждого элемента управления CommandButton).
Код: Sub AddlOOButtons()
Dim UFvbc As Object 'VBComponent
Dim CMod As Object 'Модуль кода
Dim ctl As Control
Dim cb As CommandButton
Dim n As Integer, с As Integer, r As Integer
Dim code As String
Set UFvbc = ThisWorkbook.VBProject.VBComponents("UserForml")
' Удаление всех элементов управления
For Each ctl In UFvbc.Designer.Controls
UFvbc.Designer.Controls.Remove ctl.Name
Next ctl
' Удаление всего кода VBA
UFvbc.CodeModule.DeleteLines 1, UFvbc.CodeModule.CountOfLines
' Добавление 100 элементов управления CommandButton
n = 1
For r = 1 To 10
For с = 1 To 10
Set cb = UFvbc.Designer.Controls.Add("Forms.CommandButton.1")
With cb
.Width = 22
.Height =22
.Left = {c * 26) - 16
.Top = {r * 26) - 16
.Caption = л
End With
' Добавление кола процедуры обработки события
With UFvbc.CodeModule
code = ""
code = code & "Private Sub CommandButton" & n & "_Click" & vbCr
code = code & "Msgbox ""This is CommandButton" & n & " " " " & vbcr
code = code & "End Sub"
. I n s e r t L i n e s .CountOfLines + 1, code
End With
n = n + 1
Next с
Next r
' VBA.UserForms.Add("UserFonnl").Show
End Sub
Процедура AddlOOButtons требует наличия диалогового окна, которое называется UserFonnl. Процедура начинает работу с удаления всех элементов управления на этом диало-
говом окне. Затем удаляется весь код в модуле кода данного диалогового окна. Для этого ис-
пользуется метод DeleteLin.es объекта CodeModule. Далее добавляются элементы управле-
ния CoinmandButton и процедуры обработки события для этих элементов управления с помо-
щью двух циклов For-Next. Процедуры обработки событий очень просты. Ниже приведен
пример одной из них (процедура задана для элемента управления CommandButtonl).
Код: P r i v a t e Sub CommandButtonl_Click()
MsgBox "Это CommandButtonl"
End Sub