Introducción.
La semana pasada probamos un ejemplo para pasar un Objeto de Clase Base, a través del Conjunto Procedimiento de Propiedad, para formar parte del Objeto en memoria. El objeto pasado se convierte en una extensión o un objeto secundario del objeto principal en la memoria. En nuestro programa anterior, pasar el objeto secundario al objeto de destino se realizó en la fase de creación de instancias de nuestro programa de prueba. Hemos asignado valores a las propiedades del objeto pasadas en la última parte del programa. El siguiente ejemplo es ligeramente diferente.
Para aquellos que deseen leer los artículos anteriores sobre el módulo de clase de MS-Access, los enlaces se proporcionan a continuación:
- Módulo de clase MS-Access y VBA
- Matrices de objetos de clase VBA de MS-Access
- Clase base de MS-Access y objetos derivados
- Clase base de VBA y objeto derivado-2
Esta vez abriremos ambos Objetos (ClsArea – la clase base, ClsVolume2 – la Clase objetivo) por separado en nuestro programa de prueba. Asigne valores a las propiedades de ClsArea de la clase base, antes de pasarlos al objeto Class ClsVolume2 de destino. Recuerde que la clase Volume2 solo tiene una propiedad propia, la p_Height Propiedad y su Método Volume() necesita la longitud y Ancho Valores de la Clase Base ClsArea para calcular Volumen.
- Copie y pegue el siguiente código de prueba de muestra en un módulo estándar.
El procedimiento 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
Revisión del código VBA.
En el primer Dim declaración, CA se define como objeto ClsArea y Vol como objeto ClsVolume2. Las siguientes dos declaraciones instancian ambos objetos en la memoria.
Las siguientes tres declaraciones asignan valores a las propiedades del objeto de clase ClsArea.
La Parada La declaración da una pausa en la ejecución del código para que podamos verificar los valores de propiedad del objeto en la ventana Locales.
El Establecer Vol.CArea =CA instrucción asigna el objeto de clase ClsArea CA, como un objeto secundario en el Vol (ClsVolume2) Objeto.
En el siguiente paso dblHeight La propiedad del objeto de clase ClsVolume2 se asigna con el valor 10.
Las siguientes instrucciones antes de la instrucción Stop imprimen los valores de la memoria en la ventana de depuración.
Los siguientes dos Set Las declaraciones eliminan los objetos de la memoria antes de finalizar el programa.
Mostrar la ventana Locales.
- Seleccione ventana Locales Opción del menú Ver.
- Haga clic en algún lugar en medio del Código y presione F5 para ejecutar el código hasta que el programa se detenga en Stop declaración. Alternativamente, puede presionar F8 para ejecutar el código paso a paso para inspeccionar la ventana Locales en busca de cambios, en cada paso.
- Haga clic en [+] Símbolo para expandir y mostrar tanto las propiedades como los valores de los objetos.
- Compruebe el área CA y p_Área Referencia de objeto en el Valor columna del Vol Objeto
. El Valor allí se muestra como Nada porque aún no hemos pasado el Objeto CA al Objeto Vol. - Si ha terminado de ver el contenido de la ventana Locales, ejecute el código hasta la próxima Parada. declaración. Ahora, el área CA Obtener procedimiento de propiedad y p_Area Los objetos se asignan con el objeto de clase ClsArea.
Probaremos con otro ejemplo de variante de estas dos clases ClsArea y ClsVolume2.
Nuevo módulo de clase ClsVolume3.
1. Inserte un nuevo módulo de clase y cambie su nombre Property Value a ClsVolume3 .
2. Copie y pegue el siguiente código VBA en el módulo de clase 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
Revisa el Código desde el principio:p_Height declarado como Propiedad Privada. El p_Área Propiedad de la clase ClsVolume3 declarada como Public Objeto ClsArea. Eso significa p_Area aparecerá como una Propiedad de la Clase ClsVolume3 con sus propias propiedades visualizables para Get/Let directo operaciones en el programa de usuario en el módulo estándar. Aunque el objeto de clase ClsArea se ha declarado como propiedad pública de la clase ClsVolume3, sus propiedades están encapsuladas en la propia clase ClsArea.
Compruebe el Class_Initialize() y Class_Terminate() Subrutinas. El objeto ClsArea se instancia en el código Class_Initialize() y elimina el objeto de la memoria en el código Class_Terminate(), cuando finaliza el programa de usuario.
El Programa de Pruebas.
El ejemplo de código VBA de prueba se proporciona a continuación.
Copie y pegue el código en el Módulo estándar.
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
Muestre la ventana Locales (Ver -> Ventana Locales), si aún no está abierta.
Haga clic en algún lugar en medio del código y presione F8 para ejecutar el código VBA una línea a la vez y observar la ventana local para realizar un seguimiento de lo que sucede en cada paso.
Todas las variantes anteriores de ClsVolume Class se han escrito con menos código, excepto el primer ejemplo de ClsVolume Class.
Trabajar con el objeto Recordset.
La próxima semana trabajaremos con un DAO.Recordset de objeto integrado. y crea un módulo de clase a:
- Calcular y actualizar un Campo,
- Ordenar los datos,
- Imprima los datos ordenados en la ventana de depuración,
- y crea un clon de la tabla con datos ordenados.
Eso es mucha acción la próxima semana.
Lista de todos los enlaces sobre este tema.
- Módulo de clase MS-Access y VBA
- Matrices de objetos de clase VBA de MS-Access
- Clase base de MS-Access y objetos derivados
- Clase base de VBA y objetos derivados-2
- Variantes de clase base y objeto derivado
- Conjunto de registros y módulo de clase Ms-Access
- Módulo de clase de acceso y clases contenedoras
- Transformación de la funcionalidad de la clase contenedora
- Conceptos básicos de Ms-Access y objetos de colección
- Módulo de clase Ms-Access y objeto de colección
- Registros de tabla en objeto y formulario de colección
- Conceptos básicos de objetos de diccionario
- Conceptos básicos de objetos de diccionario-2
- Ordenar elementos y claves de objetos del diccionario
- Mostrar registros del diccionario al formulario
- Agregar objetos de clase como elementos de diccionario
- Actualizar elemento del diccionario de objetos de clase en el formulario