VBA - Ako vytvoriť UserForm v module triedy

Vytvorte UserForm obsahujúci dynamický počet ovládacích prvkov a uistite sa, že sú spúšťané určitými udalosťami. Na dosiahnutie tohto výsledku budeme používať modul UserForm a modul triedy a priradiť akýkoľvek modul dynamicky vytvorený v userforme modulu triedy. Cieľom tohto tutoriálu je tiež získať jeden modul a čo najviac zjednodušiť funkciu volania (obmedzená na 2-3 riadky kódu).

  • predpoklady
  • Kód
    • Modul triedy
  • Funkcia volania

predpoklady

Prejdite na položku Možnosti programu Excel > Správa dôveryhodnosti > Nastavenia makra a skontrolujte, či je zapnutá nasledujúca možnosť: Dôverný prístup k modelu objektu objektu VBA .

Kód tiež vyžaduje nižšie uvedené odkazy, konkrétne Microsoft Forms 2.0 Object Library a Microsoft Visual Basic for Applications Extensibility 5.3 . Môžete ich povoliť kliknutím na ponuku Nástroje editora VBA a potom na položku Referencie .

Kód

V tomto príklade vytvoríme používateľský formulár obsahujúci dve tlačidlá. Po kliknutí na toto tlačidlo sa ich kód zobrazí v kóde volajúcej funkcie.

Modul triedy

Vytvorte modul triedy v projekte VBA, pomenujte ho ako PremierExemple (vlastnosť ClassName) a vložte tento kód:

 Možnosť Explicit

, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

'Povoliť nasledujúce odkazy (Nástroje> Odkazy)

Objektová knižnica Microsoft Forms 2.0

'Microsoft Visual Basic pre rozšírenie aplikácií 5.3

, !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

Verejný formulár ako objekt 'Userform

Verejné WithEvents Bouton Ako MSForms.CommandButton 'Tlačidlo

Verejné Dico ako objekt Objet Dictionnary = Zber objektov

Private Nom As String 'Nom => vytvoriť alebo odstrániť userform

Private Sub Class_Initialize ()

'vytvoriť triedu

Nastaviť Dico = CreateObject ("Scripting.dictionary")

End Sub

Hodnota verejnej funkcie ()

Metóda Value de notre Classe umožňuje vytvorenie užívateľského formulára

'a vráti hodnotu

NewUsf "Mon premier UserForm" "vytvorenie userform

NewBouton "toto", "TOTO", 120, 30, 5, 5 'vytvorte tlačidlo TOTO

NewBouton "titi", "TITI", 120, 30, 5, 35 'vytvoriť tlačidlo TITI

maForm.Show 'zobraziť userform

On Error GoTo fin

Value = maForm.Tag 'priradiť hodnotu obsiahnutú v tagu userformu našej funkcii.

Uvoľnite maForm

Ukončiť funkciu

fin:

Funkcia konca

Súkromné ​​Sub NewUsf (monCaption As String)

Vytvorenie užívateľského formulára

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

Nom = maForm.Name

VBA.UserForms.Add (Nom)

Nastaviť maForm = UserForms (UserForms.Count - 1)

S maForm

.Caption = monCaption

.Width = 150

.Height = 100

Koniec s

End Sub

Verejné Sub NewBouton (názov ako reťazec, titulok ako reťazec, šírka ako dvojitý, výška ako dvojitý, ľavý ako dvojitý, začiatok ako dvojitý)

'Vytvorenie ovládacieho tlačidla

Dim Obj

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

Ak Obj = True Potom Exit Sub

Dim cls Ako nový PremierExemple

Nastavte cls.maForm = maForm

Set cls.Bouton = Obj

S cls.Bouton

.Name = Meno

.Caption = Caption

.Posunúť doľava, hore, šírku, výšku

Koniec s

Dico.Add Name, cls

Set cls = Nič

End Sub

Kliknúť na súkromnú podkapitolu ()

'procedúra udalosti pre kliknutie na tlačidlo

maForm.Tag = Bouton.Caption

maForm.Hide

End Sub

Private Sub Class_Terminate ()

'vymazanie triedy

Dim VBComp Ako VBComponent

Set Dico = Nothing 'zmaže všetky inštancie našej triedy => všetky tlačidlá

Ak Nom "" Potom, ak je to userform (jedinečná inštancia s vlastnosťou "Nom" vyplnená)

Nastaviť vyhľadávanie VBComp = ThisWorkbook.VBProject.VBComponents (Nom)

ThisWorkbook.VBProject.VBComponents.Remove VBComp 'odstrániť

Koniec Ak

End Sub

Funkcia volania

Postup volania funkcie je značne zjednodušený ... vďaka modulu triedy máte prístup k užívateľskému formuláru a metóde Value. Vráti sa jednoduchým spôsobom pomocou nižšie uvedeného volacieho kódu:

 Subtest ()

Dim MyForm Ako nový PremierExemple

MsgBox MyForm.Value

Nastavte MyForm = Nothing

End Sub

Predchádzajúci Článok Nasledujúci Článok

Najlepšie Tipy