Introdução.
Na semana passada tentamos um exemplo para passar um Objeto de Classe Base, através do Set Property Procedure, para se tornar parte do Objeto na memória. O objeto passado se torna uma extensão ou objeto filho do objeto principal na memória. Em nosso programa anterior, a passagem do objeto filho para o objeto de destino era feita na fase de instanciação do nosso programa de teste. Atribuímos valores às Propriedades do Objeto passadas na parte posterior do programa. O próximo exemplo é um pouco diferente.
Para aqueles que gostariam de ler os artigos anteriores sobre o MS-Access Class Module, os links são fornecidos abaixo:
- Módulo de classe MS-Access e VBA
- Matrizes de objetos de classe VBA do MS-Access
- Classe base do MS-Access e objetos derivados
- Classe base VBA e objeto derivado 2
Desta vez, abriremos os dois objetos (ClsArea – a classe base, ClsVolume2 – a classe de destino) separadamente em nosso programa de teste. Atribua valores às propriedades ClsArea da classe base, antes de passá-los para o objeto ClsVolume2 da classe de destino. Lembre-se de que a classe Volume2 tem apenas uma propriedade própria, a p_Height Propriedade e seu método Volume() precisa do Comprimento e Largura Valores da Classe Base ClsArea para calcular o Volume.
- Copie e cole o seguinte exemplo de código de teste em um módulo padrão.
O procedimento 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
Revisão de código VBA.
No primeiro Dim declaração, CA é definido como ClsArea Object e Vol como objeto ClsVolume2. As próximas duas instruções instanciam ambos os objetos na memória.
As próximas três instruções atribuem valores às propriedades de ClsArea Class Object.
A Parada A instrução dá uma pausa na execução do código para que possamos verificar os valores da propriedade do objeto na janela Locals.
O Definir Vol.CArea =CA A instrução atribui o objeto de classe ClsArea CA, como um objeto filho no Vol (ClsVolume2) Objeto.
Na próxima etapa dblHeight A propriedade do objeto de classe ClsVolume2 é atribuída com o valor 10.
As próximas instruções antes da instrução Stop imprime os valores da memória para a janela de depuração.
Os próximos dois Conjunto Declarações remove os Objetos da memória, antes de encerrar o programa.
Exiba a janela Locals.
- Selecione Janela Locais Opção no menu Visualizar.
- Clique em algum lugar no meio do Código e pressione F5 para executar o código até que o programa pare no Parar demonstração. Como alternativa, você pode pressionar F8 para executar o código uma etapa de cada vez para inspecionar a janela Locals em busca de alterações a cada etapa.
- Clique no [+] Símbolo para expandir e exibir propriedades e valores de objetos.
- Verifique a Área e p_Area Referência de objeto no Valor coluna do Vol Objeto. O valor está sendo exibido como Nada porque ainda não passamos o objeto CA para o objeto Vol.
- Se você terminou de visualizar o conteúdo da janela Locals, execute o código até a próxima Parada demonstração. Agora, a Área Obter procedimento de propriedade e p_Area Objeto são atribuídos com o objeto de classe ClsArea.
Tentaremos outro exemplo de variante dessas duas classes ClsArea e ClsVolume2.
Novo módulo de classe ClsVolume3.
1. Insira um novo módulo de classe e altere seu nome Valor da propriedade para ClsVolume3 .
2. Copie e cole o seguinte código VBA no módulo 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
Verifique o Código desde o início:p_Height declarado como propriedade privada. A p_Area Propriedade da classe ClsVolume3 declarada como Pública Objeto ClsArea. Isso significa p_Area aparecerá como uma propriedade da classe ClsVolume3 com suas próprias propriedades exibíveis para Get/Let direto operações no Programa do Usuário no Módulo Padrão. Mesmo que o objeto da classe ClsArea tenha sido declarado como propriedade pública da classe ClsVolume3, suas propriedades são encapsuladas na própria classe ClsArea.
Verifique o Class_Initialize() e Class_Terminate() Sub-rotinas. O Objeto ClsArea é instanciado no Código Class_Initialize() e remove o Objeto da memória no Código Class_Terminate(), quando o programa do usuário termina.
O Programa de Testes.
O exemplo de código VBA de teste é fornecido abaixo.
Copie e cole o código no Módulo Padrão.
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
Exiba a janela Locals (View - -> Locals Window), se ainda não estiver aberta.
Clique em algum lugar no meio do código e pressione F8 para executar o código VBA uma linha por vez e observar a janela local para acompanhar o que acontece em cada etapa.
Todas as variantes acima da classe ClsVolume foram escritas com menos código, exceto o primeiro exemplo da classe ClsVolume.
Trabalhando com o objeto Recordset.
Na próxima semana, trabalharemos com um objeto interno DAO.Recordset e crie um módulo de classe para:
- Calcular e atualizar um campo,
- Classifique os dados,
- Imprima os dados classificados na janela de depuração,
- e crie um clone da tabela com dados classificados.
Isso é muita ação na próxima semana.
Lista de todos os links neste tópico.
- Módulo de classe MS-Access e VBA
- Matrizes de objetos de classe VBA do MS-Access
- Classe base do MS-Access e objetos derivados
- Classe básica do VBA e objetos derivados-2
- Classe base e variantes de objetos derivados
- Ms-Access Recordset and Class Module
- Módulo de classe de acesso e classes wrapper
- Transformação da funcionalidade da classe wrapper
- Noções básicas de Ms-Access e objetos de coleção
- Módulo de classe Ms-Access e objeto de coleção
- Registros de tabela no objeto e formulário de coleção
- Noções básicas de objetos do dicionário
- Noções básicas de objetos do dicionário-2
- Classificação de chaves e itens de objetos de dicionário
- Exibir registros do dicionário para o formulário
- Adicionar objetos de classe como itens de dicionário
- Atualizar item do dicionário de objetos de classe no formulário