VBA - Як створити UserForm в модулі класу
- Передумови
- Код
- Модуль класу
- Функція виклику
Передумови
Перейдіть до " Параметри 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