Introduzione.
La scorsa settimana abbiamo provato un esempio per passare un oggetto di classe base, attraverso il Set Property Procedura, per entrare a far parte dell'Oggetto in memoria. L'oggetto passato diventa un'estensione o un oggetto figlio dell'oggetto principale in memoria. Nel nostro programma precedente il passaggio dell'Oggetto figlio all'Oggetto di destinazione veniva eseguito nella fase di istanziazione del nostro programma di test. Abbiamo assegnato valori alle proprietà oggetto passate nella parte successiva del programma. L'esempio successivo è leggermente diverso.
Per coloro che desiderano esaminare i precedenti articoli sul modulo MS-Access Class, i collegamenti sono riportati di seguito:
- Modulo di classe MS-Access e VBA
- Matrici di oggetti di classe VBA MS-Access
- Classe base MS-Access e oggetti derivati
- Classe base VBA e oggetto derivato-2
Questa volta apriremo entrambi gli oggetti (ClsArea – la classe base, ClsVolume2 – la classe target) separatamente nel nostro programma di test. Assegnare valori nelle proprietà ClsArea della classe base, prima di passarli all'oggetto Class ClsVolume2 di destinazione. Ricorda che la classe Volume2 ha una sola proprietà, la p_Height Proprietà e relativo metodo Volume() ha bisogno della Lunghezza e Larghezza Valori della Classe Base ClsArea per calcolare il Volume.
- Copia e incolla il seguente codice di prova di esempio in un modulo standard.
La procedura SetNewVol2_2.
Public Sub SetNewVol2_2() 'Method 2/2 Dim CA As ClsArea Dim Vol As ClsVolume2 Set CA = New ClsArea Set Vol = New ClsVolume2 CA.strDesc = "Bed Room" CA.dblLength = 90 CA.dblWidth = 10 Stop 'Here ClsArea class Object CA is passed to the ‘Property procedure Set CArea of ClsVolume2 object Vol Set Vol.CArea = CA 'Pass ClsArea obj to ClsVolume2 Vol.dblHeight = 10 'assign height to ClsVolume2 Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" With Vol.CArea Debug.Print .strDesc, .dblLength, .dblWidth, .Area(), Vol.dblHeight, Vol.Volume() End With Stop Set CA = Nothing Set Vol = Nothing End Sub
Revisione del codice VBA.
Nel primo Dim dichiarazione, CA è definito come ClsArea Object e Vol come Oggetto ClsVolume2. Le due istruzioni successive istanziano entrambi gli oggetti in memoria.
Le tre istruzioni successive assegnano valori alle proprietà di ClsArea Class Object.
La Ferma fornisce una pausa nell'esecuzione del codice in modo da poter verificare i valori della proprietà dell'oggetto nella finestra Locals.
Il Imposta Vol.CArea =CA assegna la ClsArea Class Object CA, come oggetto figlio nel Vol (ClsVolume2) Oggetto.
Nel passaggio successivo dblHeight La proprietà dell'oggetto classe ClsVolume2 è assegnata con il valore 10.
Le istruzioni successive prima dell'istruzione Stop stampano i valori dalla memoria nella finestra di debug.
I prossimi due Set Le istruzioni rimuove gli oggetti dalla memoria, prima di terminare il programma.
Visualizza la finestra Locals.
- Seleziona Finestra Locali Opzione dal menu Visualizza.
- Fai clic da qualche parte nel mezzo del codice e premi F5 per eseguire il codice finché il programma non si ferma allo Stop dichiarazione. In alternativa, puoi premere F8 per eseguire il codice un passaggio alla volta per esaminare la finestra Locals per le modifiche, a ogni passaggio.
- Fai clic su [+] Simbolo per espandere e visualizzare sia le proprietà che i valori degli oggetti.
- Controlla l'Carea e p_Area Riferimento all'oggetto nel Valore colonna del Vol Oggetto. Il valore è visualizzato come Niente perché non abbiamo ancora passato l'oggetto CA all'oggetto Vol.
- Se hai finito di visualizzare i contenuti della finestra Locals, esegui il codice fino al prossimo Stop dichiarazione. Ora, l'CArea Ottieni procedura proprietà e p_Area Gli oggetti vengono assegnati con l'oggetto classe ClsArea.
Proveremo un altro esempio di variante di entrambe queste due classi ClsArea e ClsVolume2.
Nuovo modulo di classe ClsVolume3.
1. Inserisci un nuovo modulo di classe e cambia il suo nome Property Value in ClsVolume3 .
2. Copia e incolla il seguente codice VBA nel modulo di classe ClsVolume3:
Option Compare Database Option Explicit 'Method three Private p_Height As Double Public p_Area As ClsArea Public Property Get dblHeight() As Double dblHeight = p_Height End Property Public Property Let dblHeight(ByVal dblNewValue As Double) p_Height = dblNewValue End Property Public Function Volume() As Double Volume = p_Area.dblLength * p_Area.dblWidth * Me.dblHeight End Function Private Sub Class_Initialize() Set p_Area = New ClsArea End Sub Private Sub Class_Terminate() Set p_Area = Nothing End Sub
Controlla il codice dall'inizio:p_Height dichiarata proprietà privata. L'p_Area Proprietà della classe ClsVolume3 dichiarata Pubblica Oggetto ClsArea. Ciò significa p_Area apparirà come una proprietà della classe ClsVolume3 con le proprie proprietà visualizzabili per Get/Let diretto operazioni nel Programma Utente nel Modulo Standard. Anche se l'oggetto classe ClsArea è stato dichiarato come proprietà pubblica della classe ClsVolume3, le sue proprietà sono incapsulate nella classe ClsArea stessa.
Controlla Class_Initialize() e Class_Terminate() Sottoprogrammi. L'oggetto ClsArea viene istanziato nel codice Class_Initialize() e rimuove l'oggetto dalla memoria nel codice Class_Terminate(), al termine del programma utente.
Il programma di test.
Il codice di prova VBA di esempio è riportato di seguito.
Copia e incolla il codice nel modulo standard.
Public Sub SNewVol3() 'Here ClsArea class is declared as a Public Property of ClsVolume3 Dim volm As ClsVolume3 Set volm = New ClsVolume3 volm.p_Area.strDesc = "Bed Room" volm.p_Area.dblLength = 15 'assign length volm.p_Area.dblWidth = 10 'assign width in clsArea volm.dblHeight = 10 'assign height to ClsVolume2 Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" With volm.p_Area Debug.Print .strDesc, .dblLength, .dblWidth, .Area, volm.dblHeight, volm.Volume End With Set volm = Nothing End Sub
Visualizza la finestra Locals (Visualizza -> Finestra Locals), se non è già aperta.
Fai clic da qualche parte nel mezzo del codice e premi F8 per eseguire il codice VBA una riga alla volta e guardare la finestra locale per tenere traccia di ciò che accade ad ogni passaggio.
Tutte le varianti di cui sopra della classe ClsVolume sono state scritte con meno codice, ad eccezione del primo esempio di classe ClsVolume.
Lavorare con l'oggetto Recordset.
La prossima settimana lavoreremo con un oggetto integrato DAO.Recordset e crea un modulo di classe a:
- Calcola e aggiorna un campo,
- Ordina i dati,
- Stampa i dati ordinati nella finestra di debug
- e crea un clone della tabella con dati ordinati.
C'è molta azione la prossima settimana.
Elenco di tutti i collegamenti su questo argomento.
- Modulo di classe MS-Access e VBA
- Matrici di oggetti di classe VBA MS-Access
- Classe base MS-Access e oggetti derivati
- Classe base VBA e oggetti derivati-2
- Classe base e varianti di oggetti derivati
- Recordset Ms-Access e modulo di classe
- Accedi al modulo di classe e alle classi wrapper
- Trasformazione della funzionalità della classe wrapper
- Nozioni di base su Ms-Access e Collection Object
- Modulo di classe Ms-Access e oggetto Collection
- Record di tabella nell'oggetto e nella forma della raccolta
- Nozioni di base sugli oggetti del dizionario
- Nozioni di base sugli oggetti del dizionario-2
- Ordinamento delle chiavi e degli elementi degli oggetti del dizionario
- Visualizza record dal dizionario al modulo
- Aggiungi oggetti classe come elementi del dizionario
- Aggiorna l'elemento del dizionario degli oggetti della classe nel modulo