VBA - Jak vytvořit UserForm v modulu třídy

Vytvořte UserForm obsahující dynamický počet ovládacích prvků a ujistěte se, že jsou spouštěny určitými událostmi. K dosažení tohoto výsledku budeme používat modul UserForm a modul třídy a přiřadit libovolný ovládací prvek dynamicky vytvořený v userformu modulu třídy. Cílem tohoto tutoriálu je také získání jediného modulu a co nejjednodušší funkce volání (omezeno na 2-3 řádky kódu).

  • Předpoklady
  • Kód
    • Modul třídy
  • Funkce volání

Předpoklady

Přejděte do Možnosti aplikace Excel > Správa důvěryhodnosti > Nastavení maker a zkontrolujte, zda je povolena následující možnost: Důvěryhodný přístup k modelu objektu objektu VBA .

Kód také vyžaduje níže uvedené odkazy, konkrétně knihovnu objektů Microsoft Forms 2.0 a Microsoft Visual Basic for Applications Extensibility 5.3 . Můžete je povolit klepnutím na nabídku Nástroje editoru VBA a potom na odkazy .

Kód

V tomto příkladu vytvoříme userform obsahující dvě tlačítka. Po kliknutí na toto tlačítko se jejich popisek zobrazí v kódu volající funkce.

Modul třídy

Vytvořte modul třídy v projektu VBA, pojmenujte jej jako PremierExemple (vlastnost ClassName) a vložte tento kód:

 Možnost Explicit

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

'Povolit následující odkazy (Nástroje> Odkazy)

Knihovna objektů Microsoft Forms 2.0

'Microsoft Visual Basic pro rozšiřitelnost aplikací 5.3

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

Veřejná forma jako objekt 'Userform

Veřejné WithEvents Bouton jako MSForms.CommandButton 'tlačítko

Veřejný dico jako objekt Objet Dictionnary = Sbírka objektů

Private Nom As String 'Nom => vytvořit nebo odstranit userform

Private Sub Class_Initialize ()

'vytvořit třídu

Nastavit Dico = CreateObject ("Scripting.dictionary")

End Sub

Hodnota veřejné funkce ()

Metoda Value de notre Classe umožňuje vytvoření uživatelského formuláře

'a vrátí hodnotu

NewUsf "Mon premier UserForm" "vytvoření userform

NewBouton "toto", "TOTO", 120, 30, 5, 5 'vytvoří tlačítko TOTO

NewBouton "titi", "TITI", 120, 30, 5, 35 'vytvoří tlačítko TITI

maForm.Show 'zobrazit userform

Zapnuto Chyba GoTo fin

Value = maForm.Tag 'přiřadit hodnotu obsaženou v tagu userformu naší funkci.

Uvolněte maForm

Funkce Konec

ploutev:

Funkce End

Soukromý Sub NewUsf (monCaption As String)

'Vytvoření uživatelského formuláře

Nastavit maForm = ThisWorkbook.VBProject.VBComponents.Add (3)

Nom = maForm.Name

VBA.UserForms.Add (Nom)

Nastavit maForm = UserForms (UserForms.Count - 1)

S maFormem

.Caption = monCaption

.Width = 150

.Height = 100

Konec s

End Sub

Public Sub NewBouton (název jako řetězec, titulek jako řetězec, šířka jako dvojitý, výška jako dvojitý, vlevo jako dvojitý, horní jako dvojitý)

'Vytvoření ovládacího tlačítka

Dim Obj

Nastavit Obj = maForm.Controls.Add ("forms.CommandButton.1")

Pokud Obj = True pak Exit Sub

Dim cls Jako nový PremierExemple

Nastavte cls.maForm = maForm

Nastavit cls.Bouton = Obj

S cls.Bouton

.Name = Jméno

.Caption = Titulek

.Vlevo, nahoru, šířka, výška

Konec s

Dico.Add Name, cls

Set cls = Nic

End Sub

Soukromý podřízený Bouton_Click ()

'procedura události pro kliknutí na tlačítko

maForm.Tag = Bouton.Caption

maForm.Hide

End Sub

Soukromý dílčí název třídy ()

vymazání třídy

Dim VBComp Jako VBComponent

Set Dico = Nothing 'odstraní všechny instance naší třídy => všechna tlačítka

Pokud Nom "" Potom, pokud je to userform (jedinečná instance s vyplněnou vlastností "Nom")

Nastavení VBComp = ThisWorkbook.VBProject.VBComponents (Nom) 'hledání

ThisWorkbook.VBProject.VBComponents.Remove VBComp 'odstranit

Konec Pokud

End Sub

Funkce volání

Procedura pro volání funkce je značně zjednodušena ... díky modulu třídy máte přístup k metodě userform a Value. Vrátí se jednoduchým způsobem pomocí níže uvedeného volacího kódu:

 Subtest ()

Dim MyForm jako nový PremierExemple

MsgBox MyForm.Value

Nastavit MyForm = Nothing

End Sub

Předchozí Článek Následující Článek

Nejlepší Tipy