VBA - Kaip sukurti „UserForm“ klasės modulyje

Sukurkite „UserForm“, kuriame yra dinamiškas valdiklių skaičius, ir įsitikinkite, kad juos sukelia tam tikri įvykiai. Kad pasiektume šį rezultatą, naudosime „UserForm“ ir klasės modulį ir priskirsime bet kokį valdikliui dinamiškai sukurtą valdiklį į klasės modulį. Galiausiai šio vadovo tikslas yra gauti vieną modulį ir padaryti jį kuo paprastesnę (apribota 2-3 kodų eilutėmis).

  • Būtinos sąlygos
  • Kodas
    • Klasės modulis
  • Skambinimo funkcija

Būtinos sąlygos

Eikite į „ Excel“ parinktis > „ Trust Management“ > „ Macro Settings“ ir įsitikinkite, kad įjungta ši parinktis: pasitikėkite prieiga prie „VBA“ projekto objekto modelio .

Kodas taip pat reikalauja toliau pateiktų nuorodų, būtent „ Microsoft Forms 2.0“ objekto bibliotekos ir „ Microsoft Visual Basic“ programų išplėtimui 5.3 . Juos galite įgalinti spustelėję VBA redaktoriaus meniu Įrankiai ir tada - Nuorodos .

Kodas

Šiame pavyzdyje sukursime naudotojo formą, kurioje yra du mygtukai. Paspaudus šiuos mygtukus, jų antraštė bus rodoma skambinimo funkcijos kode.

Klasės modulis

Sukurkite klasės modulį VBA projekte, pavadinkite jį kaip „ PremierExemple“ („ ClassName“ nuosavybė) ir įterpkite šį kodą:

 Galimybė aiški

„!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

„Įgalinti šias nuorodas (Įrankiai> Nuorodos)

„Microsoft Forms 2.0 Object Library“

„Microsoft Visual Basic“ taikomųjų programų išplėtimui 5.3

„!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

Viešasis „maForm“ kaip objekto „naudotojo“ formos

Visuomenė su „Bouton“ kaip „MSForms.CommandButton“ mygtukas

Viešasis „Dico As Object“ Objet Dictionnary = Objektų rinkimas

Privatus Nom. Kaip eilutė „Nom => sukurti arba ištrinti naudotojo formą

Privatus pogrupis_Initialize ()

sukurti klasę

Nustatyti Dico = CreateObject („Scripting.dictionary“)

Pabaiga

Viešosios funkcijos vertė ()

„Value de notre Classe“ metodas leidžia sukurti vartotojo formą

ir grąžina vertę

„NewUsf“ „Mon premier UserForm“ „sukuria naudotojo formą

„NewBouton“ „toto“, „TOTO“, 120, 30, 5, 5 'sukuria mygtuką TOTO

„NewBouton“ „titi“, „TITI“, 120, 30, 5, 35 'sukuria TITI mygtuką

„maForm.Show“ rodoma vartotojo forma

Apie klaidą GoTo fin

„Value = maForm.Tag“ priskiria reikšmę, esančią „Userform“ žymoje, mūsų funkcijai.

Išimkite maForm

Išjunkite funkciją

fin:

Pabaigos funkcija

Privatus sub NewUsf (monCaption kaip eilutė)

„Naudotojo kūrimas

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

Nom = maForm.Name

VBA.UserForms.Add (Nom)

Nustatyti maForm = UserForms (UserForms.Count - 1)

Su maForm

.Caption = monCaption

. Plotis = 150

.Height = 100

Baigti su

Pabaiga

Viešasis „NewBouton“ (pavadinimas kaip eilutė, antraštė kaip eilutė, plotis kaip dvigubas, aukštis kaip dvigubas, kairysis kaip dvivietis, viršutinis kaip dvigubas)

„Valdymo mygtuko sukūrimas

Dim Obj

Nustatyti Obj = maForm.Controls.Add („formas.CommandButton.1“)

Jei Obj = Tiesa, tada išeiti iš sub

„Dim cls“ kaip „New PremierExemple“

Nustatyti cls.maForm = maForm

Nustatyti cls.Bouton = Obj

Su cls.Bouton

.Name = Vardas

.Caption = antraštė

.Perkelti į kairę, viršų, plotį, aukštį

Baigti su

Dico.Add Name, cls

Set cls = Nieko

Pabaiga

Privatus Sub Bouton_Click ()

„mygtuko paspaudimo įvykių procedūra“

maForm.Tag = Bouton.Caption

paslėpti

Pabaiga

Privatus poklasis_pasirašykite ()

klasės ištrynimas

„Dim VBComp As VBComponent“

Nustatyti Dico = Nieko „ištrinkite visus mūsų klasės => visų mygtukų atvejus

Jei Nom "" Tada ", jei tai yra naudotojo forma (unikalus egzempliorius, turintis užpildytą" Nom "nuosavybę)

Nustatykite VBComp = ThisWorkbook.VBProject.VBComponents (Nom) paiešką

ŠisWorkbook.VBProject.VBComponents.Remove VBComp 'ištrinti

Baigti Jei

Pabaiga

Skambinimo funkcija

Skambinimo funkcijos procedūra labai supaprastinta ... dėka klasės modulio, turite prieigą prie naudotojo ir vertės metodo. Jis grąžinamas paprastu būdu, naudojant žemiau nurodytą skambinimo kodą:

 Sub bandymas ()

„MyForm“ kaip naujas „PremierExemple“

MsgBox MyForm.Value

Nustatyti MyForm = Nieko

Pabaiga

Ankstesnis Straipsnis Kitas Straipsnis

Geriausi Patarimai