Creare gli oggetti VBA

Torna a Tutorials

VBA mette a disposizione dell'utente una serie di classi di oggetti che permettono varie personalizzazioni con l'inserimento di automatismi, nuove funzioni, interfacce grafiche ecc… Tutte le classi sono presenti nelle librerie di office e visibili nel visualizzatore oggetti, consultabile dal menù "Visualizza" della console VBA.
Inoltre VBA permette all'utente di definire delle nuove classi di oggetti e di crearle appositamente secondo le proprie esigenze. Tuttavia questo presuppone la conoscenza delle tecniche di programmazione orientata agli oggetti.
La programmazione orientata agli oggetti è un paradigma di programmazione, che prevede di raggruppare in un'unica entità, ovvero la classe, sia le strutture dati che le procedure che operano su di esse, creando per l'appunto un "oggetto" software dotato di proprietà (dati) e metodi (procedure) che operano sui dati dell'oggetto stesso.
Le classi sono uno strumento per costruire strutture dati che contengano non solo dei dati ma anche il codice per gestirli. I membri di una classe sono dati, chiamati attributi, e metodi, ovvero procedure, che operano su un oggetto.
Un oggetto è una istanza di una classe. Un oggetto occupa memoria, la sua classe definisce come sono organizzati i dati in questa memoria. Ogni oggetto possiede tutti gli attributi definiti nella classe, ed essi hanno un valore, che può mutare durante l'esecuzione del programma come quello di qualsiasi variabile.
Vediamo ora un esempio di creazione di una nuova classe di oggeti in VBA. Per la precisione creeremo una classe che contiene una sola proprietà "Messaggio" di tipo stringa, ed un metodo "Correggi" che modifica la proprietà "Messaggio" sostituendo la parola "fare" con i suoi sinonimi.
Innanzitutto generiamo un nuovo Modulo di Classe di nome CorrettoreDiscorsi.
'Definiamo la variabile in cui memorizzeremo 
'il valore della proprietà. 
'Privata perché possa essere usata solamente 
'all'interno della nostra classe.
Private mvarMessaggio As String

'Definizione in input della proprietà "Messaggio".
Public Property Let Messaggio(ByVal vDati As String)
    mvarMessaggio = vDati
End Property

'Definizione in output della proprietà "Messaggio".
Public Property Get Messaggio() As String
    Messaggio = mvarMessaggio
End Property

'Definizione del metodo che sostituisce la parola "fare".
Public Sub Correggi()
Dim NuovaStringa As String, StringaIniziale As String 
Dim StringaFinale As String
Dim Posizione As Integer, SceglineUno As Integer
NuovaStringa = ""
StringaFinale = ""
SceglineUno = CInt((4 * Rnd) + 1)
Select Case SceglineUno
Case 1
    NuovaStringa = "realizzare "
Case 2
    NuovaStringa = "compiere "
Case 3
    NuovaStringa = "creare "
Case 4
    NuovaStringa = "effettuare "
Case 5
    NuovaStringa = "attuare "
End Select
Posizione = InStr(mvarMessaggio, "fare")
If Posizione = 0 Then
    mvarMessaggio = "Dovete elaborare un discorso _ 
    che contenga la parola ""fare""!"
Else
    StringaIniziale = Left(mvarMessaggio, Posizione - 1)
    StringaFinale = Right(mvarMessaggio, Len(mvarMessaggio) _ 
    - (Posizione + 4))
    mvarMessaggio = StringaIniziale & NuovaStringa & StringaFinale
End If
End Sub
	
N.B.: Notare che abbiamo definito pubbliche sia la definizione della proprietà che del metodo, così potremo usarle all'interno di tutti i moduli del progetto.
    Per usare la classe appena definita, creiamo una nuova UserForm FrmOgg che contiene i controlli:
  • TxtInput casella di testo multiline.
  • LblOutput controllo etichetta
  • CmdCrea pulsante di comando.
  • CmdEsci pulsante di comando.
Di seguito il codice associato alla UserForm:
Private Sub CmdCrea_Click()
    'istanzio l'oggetto Discorso della classe 
    'appena creata CorrettoreDiscorsi
    Set Discorso = New CorrettoreDiscorsi
    'valorizzo la proprietà "Messaggio" in input
    Discorso.Messaggio = TxtInput.Text
    'uso il metodo
    Discorso.Correggi
    'la proprietà "Messaggio" in output valorizza la label della form
    LblOutput.Caption = Discorso.Messaggio
End Sub

Private Sub CmdEsci_Click()
    Unload Me
End Sub

Cognolato Studio © 2005