VBA - Come creare un form utente in un modulo di classe
- Prerequisiti
- Il codice
- Il modulo di classe
- La funzione chiamante
Prerequisiti
Passare a Opzioni di Excel > Gestione attendibilità > Impostazioni macro e assicurarsi che la seguente opzione sia abilitata: accesso sicuro al modello di oggetto del progetto VBA .Il codice richiede inoltre i riferimenti riportati di seguito, ovvero la libreria di oggetti di Microsoft Forms 2.0 e l' estensibilità di Microsoft Visual Basic 5.3 . È possibile abilitarli facendo clic sul menu Strumenti dell'editor VBA e quindi su Riferimenti .
Il codice
In questo esempio, creeremo un userform contenente due pulsanti. Facendo clic su questo pulsante, la loro didascalia verrà visualizzata nel codice della funzione chiamante.Il modulo di classe
Crea un modulo di classe nel tuo progetto VBA, chiamalo come PremierExemple (proprietà ClassName) e inserisci questo codice:Opzione esplicita'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!
'Abilita i seguenti riferimenti (Strumenti> Riferimenti)
'Libreria oggetti di Microsoft Forms 2.0
'Microsoft Visual Basic per l'estensibilità delle applicazioni 5.3
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!
Forma utente pubblica maform come oggetto '
Public WithEvents Bouton As Pulsante MSForms.CommandButton '
Dico pubblico come oggetto 'Objet Dictionnary = Raccolta oggetti
Private Nom As String 'Nom => crea o cancella userform
Private Sub Class_Initialize ()
'creare classe
Imposta Dico = CreateObject ("Scripting.dictionary")
End Sub
Valore di funzione pubblica ()
'Il metodo Value de notre Classe consente la creazione della forma utente
'e restituisce un valore
NewUsf "Mon premier UserForm" 'creazione di userform
NewBouton "toto", "TOTO", 120, 30, 5, 5 'crea il pulsante TOTO
NewBouton "titi", "TITI", 120, 30, 5, 35 'crea il pulsante TITI
maForm.Show 'mostra userform
On Error GoTo fin
Valore = maForm.Tag 'assegna il valore contenuto nel Tag della userform alla nostra funzione.
Scarica maForm
Esci dalla funzione
fIN:
Fine Funzione
Sottotitoli privati NewUsf (monCaption As String)
'Creazione di userform
Imposta maForm = ThisWorkbook.VBProject.VBComponents.Add (3)
Nom = maForm.Name
VBA.UserForms.Add (Nom)
Imposta maForm = UserForms (UserForms.Count - 1)
Con maForm
.Caption = monCaption
. Larghezza = 150
. Altezza = 100
Fine con
End Sub
Public Sub NewBouton (Name As String, Caption As String, Width As Double, Height As Double, Left As Double, Top As Double)
'Creazione di un pulsante di controllo
Dim obj
Imposta Obj = maForm.Controls.Add ("forms.CommandButton.1")
Se Obj = True, quindi Esci da Sub
Dim cls Come nuovo PremierExemple
Imposta cls.maForm = maForm
Imposta cls.Bouton = Obj
Con cls.Bouton
. Nome = Nome
.Caption = Didascalia
.Move a sinistra, in alto, in larghezza, in altezza
Fine con
Dico.Add Name, cls
Imposta cls = Nothing
End Sub
Private Sub Bouton_Click ()
'procedura evento per il clic del pulsante
maForm.Tag = Bouton.Caption
maForm.Hide
End Sub
Private Sub Class_Terminate ()
'cancellazione della classe
Dim VBComp As VBComponent
Imposta Dico = Nothing 'cancella tutte le istanze della nostra classe => tutti i pulsanti
Se Nom "" Then "se è il userform (l'unica istanza con la proprietà" Nom "riempita)
Impostare la ricerca VBComp = ThisWorkbook.VBProject.VBComponents (Nom)
ThisWorkbook.VBProject.VBComponents.Rimuovi l'eliminazione di VBComp
Finisci se
End Sub
La funzione chiamante
La procedura per la funzione di chiamata è notevolmente semplificata ... grazie al modulo di classe, hai accesso a un userform e un metodo Value. Viene restituito in un modo semplice, utilizzando il seguente codice di chiamata:Sottotest ()Dim MyForm Come nuovo PremierExemple
MsgBox MyForm.Value
Imposta MyForm = Nothing
End Sub