mail mail

Использование классов для элементов управления на форме

Скриншот формы VBA с программно созданными элементами управления

В прикреплённом файле - пример макроса для автоматического создания на форме элементов управления.

Благодаря использованию модуля класса, всем создаваемым элементам управления (в данном случае это CheckBox-ы) назначается один и тот же обработчик событий.

Для проверки запустите форму нажатием кнопки на листе Excel, и пощелкайте на чекбоксах на разных вкладках формы.

Код модуля класса:

Public WithEvents CheckBox As MSForms.CheckBox

Public MPname As String
Public MPindex As Integer
Public Index As Integer

Sub CheckBox_Change()
    msg = "Изменено состояние чекбокса номер  " & Me.Index & vbNewLine & vbNewLine
    msg = msg & "на вкладке  " & Me.MPname & "   (индекс вкладки = " & Me.MPindex & ")" _
          & vbNewLine & vbNewLine & vbNewLine
    msg = msg & "Новое состояние:  " & Me.CheckBox.Value
    MsgBox msg, vbInformation, "Вы изменили состояние чекбокса!"
End Sub

При запуске формы на неё добавляются элементы управления:

Dim MyCheckBox As chb, coll As Collection

Private Sub UserForm_Initialize()
    Set coll = New Collection
    For m = 0 To Me.MultiPage1.Pages.Count - 1
        mn = F.MultiPage1(m).Caption
        For i = 1 To 7
            Set MyCheckBox = New chb
            Set MyCheckBox.CheckBox = F.MultiPage1(m).Controls.Add("forms.CheckBox.1")
            With MyCheckBox
                With .CheckBox
                    .AutoSize = True: .Left = 30: .Top = 20 + i * 20: .WordWrap = False
                    .Caption = "Это чекбокс номер  " & i & "  на вкладке " & mn
                End With
                .MPindex = m: .Index = i: .MPname = mn
            End With
            coll.Add MyCheckBox
        Next i
    Next m
End Sub

ВложениеРазмер
CheckBox_Class.xls47.5 КБ

Комментарии

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
2 + 7 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.