Présentation.
La semaine dernière, nous avons essayé un exemple pour passer un objet de classe de base, via le Set Procédure de propriété, pour faire partie de l'objet en mémoire. L'objet passé devient une extension ou un objet enfant de l'objet principal en mémoire. Dans notre programme précédent, le passage de l'objet enfant à l'objet cible était effectué lors de la phase d'instanciation de notre programme de test. Nous avons attribué des valeurs aux propriétés d'objet passées dans la dernière partie du programme. L'exemple suivant est légèrement différent.
Pour ceux qui souhaitent parcourir les articles précédents sur le module de classe MS-Access, les liens sont indiqués ci-dessous :
- Module de classe MS-Access et VBA
- Tableaux d'objets de classe MS-Access VBA
- Classe de base MS-Access et objets dérivés
- Classe de base VBA et objet dérivé 2
Cette fois, nous allons ouvrir les deux objets (ClsArea - la classe de base, ClsVolume2 - la classe cible) séparément dans notre programme de test. Attribuez des valeurs dans les propriétés de la classe de base ClsArea, avant de les transmettre à l'objet cible de la classe ClsVolume2. N'oubliez pas que la classe Volume2 n'a qu'une seule propriété, la p_Height Propriété et sa méthode Volume() a besoin de la Longueur et Largeur Valeurs de la classe de base ClsArea pour calculer le volume.
- Copiez et collez l'exemple de code de test suivant dans un module standard.
La procédure 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
Vérification du code VBA.
Dans le premier Dim déclaration, CA est défini comme ClsArea Object et Vol en tant qu'objet ClsVolume2. Les deux instructions suivantes instancient les deux objets en mémoire.
Les trois instructions suivantes attribuent des valeurs aux propriétés de l'objet de classe ClsArea.
L'arrêt L'instruction donne une pause dans l'exécution du code afin que nous puissions vérifier les valeurs de la propriété de l'objet dans la fenêtre Locals.
Le Set Vol.CArea =CA L'instruction attribue l'autorité de certification d'objet de classe ClsArea, en tant qu'objet enfant dans le Vol (ClsVolume2) Objet.
À l'étape suivante, dblHeight La propriété de ClsVolume2 Class Object est affectée de la valeur 10.
Les instructions suivantes avant l'instruction Stop impriment les valeurs de la mémoire dans la fenêtre de débogage.
Les deux prochains Set Les instructions suppriment les objets de la mémoire avant de terminer le programme.
Afficher la fenêtre Locals.
- Sélectionnez Fenêtre Locales Option du menu Affichage.
- Cliquez quelque part au milieu du code et appuyez sur F5 pour exécuter le code jusqu'à ce que le programme s'arrête au Stop déclaration. Vous pouvez également appuyer sur F8 pour exécuter le code une étape à la fois pour inspecter la fenêtre Locals pour les modifications, à chaque étape.
- Cliquez sur [+] Symbole pour développer et afficher à la fois les propriétés et les valeurs des objets.
- Vérifiez la zone CA et p_Area Référence d'objet dans la Valeur colonne du Vol Objet. La valeur qui s'y trouve s'affiche comme Rien car nous n'avons pas encore transmis l'objet CA à l'objet Vol.
- Si vous avez terminé de visualiser le contenu de la fenêtre Locals, exécutez le code jusqu'au prochain Stop déclaration. Maintenant, la CArea Obtenir la procédure de propriété et p_Area Les objets sont assignés avec l'objet de classe ClsArea.
Nous allons essayer un autre exemple de variante de ces deux classes ClsArea et ClsVolume2.
Nouveau module de classe ClsVolume3.
1. Insérez un nouveau module de classe et changez son nom Valeur de propriété en ClsVolume3 .
2. Copiez et collez le code VBA suivant dans le module de 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
Vérifiez le code depuis le début :p_Height déclaré propriété privée. La p_Area Propriété de la classe ClsVolume3 déclarée comme Public Objet ClsArea. Cela signifie p_Area apparaîtra comme une propriété de la classe ClsVolume3 avec ses propres propriétés affichables pour un Get/Let direct opérations dans le programme utilisateur du module standard. Même si l'objet de classe ClsArea a été déclaré comme propriété publique de la classe ClsVolume3, ses propriétés sont encapsulées dans la classe ClsArea elle-même.
Vérifiez la Class_Initialize() et Class_Terminate() Sous-routines. L'objet ClsArea est instancié dans le code Class_Initialize() et supprime l'objet de la mémoire dans le code Class_Terminate(), lorsque le programme utilisateur se termine.
Le programme de test.
L'exemple de code VBA de test est donné ci-dessous.
Copiez et collez le code dans le module 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
Affichez la fenêtre Locals (Affichage -> Fenêtre Locals), si elle n'est pas déjà ouverte.
Cliquez quelque part au milieu du code et appuyez sur F8 pour exécuter le code VBA une ligne à la fois et regarder la fenêtre locale pour suivre ce qui se passe à chaque étape.
Toutes les variantes ci-dessus de la classe ClsVolume ont été écrites avec moins de code, à l'exception du premier exemple de la classe ClsVolume.
Travailler avec l'objet Recordset.
La semaine prochaine, nous travaillerons avec un objet intégré DAO.Recordset et créez un module de classe à :
- Calculer et mettre à jour un Champ,
- Trier les données,
- Imprimer les données triées dans la fenêtre de débogage,
- et créer un clone de la table avec des données triées.
C'est beaucoup d'action la semaine prochaine.
Liste de tous les liens sur ce sujet.
- Module de classe MS-Access et VBA
- Tableaux d'objets de classe MS-Access VBA
- Classe de base MS-Access et objets dérivés
- Classe de base VBA et objets dérivés-2
- Classe de base et variantes d'objets dérivés
- Ensemble d'enregistrements et module de classe MS-Access
- Accéder au module de classe et aux classes wrapper
- Transformation des fonctionnalités de la classe wrapper
- Ms-Access et les bases des objets de collection
- Module de classe MS-Access et objet de collection
- Enregistrements de table dans l'objet et le formulaire de collection
- Principes de base des objets de dictionnaire
- Principes de base des objets de dictionnaire -2
- Tri des clés d'objet et des éléments du dictionnaire
- Afficher les enregistrements du dictionnaire au formulaire
- Ajouter des objets de classe en tant qu'éléments de dictionnaire
- Mettre à jour l'élément du dictionnaire d'objets de classe sur le formulaire