VBA - Як створити UserForm в модулі класу

Створіть UserForm, що містить динамічну кількість елементів керування, і переконайтеся, що вони викликані деякими подіями. Щоб досягти цього результату, ми будемо використовувати модуль UserForm і клас, і призначити будь-який елемент керування, динамічно створений в userform, модулю класу. Нарешті, метою цього підручника є також отримання єдиного модуля і зробити функцію виклику якомога простішою (обмежена 2-3 рядками коду).

  • Передумови
  • Код
    • Модуль класу
  • Функція виклику

Передумови

Перейдіть до " Параметри Excel" > "Керування довірою" > " Налаштування макросів" і переконайтеся, що ввімкнено наступний параметр: Довіряти доступу до моделі об'єкта проекту VBA .

Код також вимагає наведених нижче посилань, а саме бібліотеки об'єктів Microsoft Forms 2.0 і Microsoft Visual Basic для розширень додатків 5.3 . Ви можете увімкнути їх, натиснувши на меню Інструменти редактора VBA, а потім на посилання .

Код

У цьому прикладі ми створимо форму користувача, що містить дві кнопки. Після натискання цих кнопок, їх підпис буде відображено в коді функції виклику.

Модуль класу

Створіть модуль класу у вашому проекті VBA, назвіть його як PremierExemple (властивість ClassName) і вставте цей код:

 Опція Явна

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

'Увімкніть наступні посилання (Інструменти> Посилання)

Бібліотека об'єктів Microsoft Forms 2.0

Microsoft Visual Basic для розширення програм 5.3

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

Публікація користувача у форматі maForm As Object

Загальнодоступна кнопка Bouton As MSForms.CommandButton

Публічний Dico як об'єкт Objet Dictionnary = Колекція об'єктів

Private Nom As String 'Nom => створення або видалення форми користувача

Приватний Sub Class_Initialize ()

'Створити клас

Встановити Dico = CreateObject ("Scripting.dictionary")

End Sub

Значення загальнодоступної функції ()

'Метод Value de notre Classe дозволяє створювати форму користувача

'і повертає значення

NewUsf "Mon premier UserForm" "створення userform

NewBouton "toto", "TOTO", 120, 30, 5, 5 'створюють кнопку TOTO

NewBouton "titi", "TITI", 120, 30, 5, 35 'створюють кнопку TITI

відображення користувальницької форми maForm.Show

Під час помилки GoTo fin

Value = maForm.Tag 'привласнити функцію, що міститься в тезі userform.

Вивантажити maForm

Функція виходу

плавник:

Функція End

Приватний Sub NewUsf (monCaption As String)

'Створення userform

Встановити maForm = ThisWorkbook.VBProject.VBComponents.Add (3)

Nom = maForm.Name

VBA.UserForms.Add (Nom)

Встановити maForm = UserForms (UserForms.Count - 1)

З maForm

.Caption = monCaption

Ширина = 150

.Height = 100

Завершити

End Sub

Публічний Sub NewBouton (ім'я як рядок, підпис як рядок, ширина як подвійна, висота як подвійна, ліва як подвійна, верхня як подвійна)

'Створення кнопки керування

Dim Obj

Встановити Obj = maForm.Controls.Add ("forms.CommandButton.1")

Якщо Obj = True, тоді вийдіть з Sub

Dim Cls Як новий PremierExemple

Встановіть cls.maForm = maForm

Встановити cls.Bouton = Obj

З cls.Bouton

.Name = Ім'я

.Caption = Підпис

Перемістіться вліво, зверху, шириною, висотою

Завершити

Назва Dico.Add, cls

Set cls = Ніщо

End Sub

Приватний Sub Bouton_Click ()

Процедура події для натискання кнопки

maForm.Tag = Bouton.Caption

Сховати

End Sub

Приватний Sub Class_Terminate ()

'клас видалення

Dim VBComp As VBComponent

Встановити Dico = Нічого 'видалити всі екземпляри нашого класу => всі кнопки

Якщо Nom "" Тоді ", якщо це userform (унікальний екземпляр з властивістю" Nom "заповнений)

Встановити VBComp = ThisWorkbook.VBProject.VBComponents (Nom) 'пошук

ThisWorkbook.VBProject.VBComponents.Remove VBComp 'delete

End If

End Sub

Функція виклику

Процедура для функції виклику значно спрощена ... завдяки модулю класу, ви маєте доступ до методу userform і Value. Вона повертається простим способом, використовуючи нижній код виклику:

 Sub-тест ()

Dim MyForm As New PremierExemple

MsgBox MyForm.Value

Встановити MyForm = Ніщо

End Sub

Попередня Стаття Наступна Стаття

Кращі Поради