VBA - Visual Basic for Applications | Polimorfismo

VBA - Visual Basic for Applications | Polimorfismo

O que é Polimorfismo?


É um conceito de programação orientada a objetos que permite definir diferentes versões de objetos que compartilham algumas das mesmas características. Na linguagem, um exemplo seriam dois carros diferentes. Um Lamborghini é um carro, assim como um Ford KA. Ambos têm as características comuns de todos os carros, mas não são o mesmo carro e têm carrocerias e motores diferentes, mas essas carrocerias e motores realizam tarefas semelhantes, como mudança de marcha, cores diferentes e partida.


Em termos de VBA você pode criar um objeto Class que define quais características e métodos cada tipo de objeto irá compartilhar. Num exemplo de programação mais prático, digamos, uma classe FormAuditor desenvolvida para enviar mensagens para algum lugar. Talvez seja para uma tabela de banco de dados ou talvez para um arquivo de log, ou talvez até mesmo mostrando a lista de alterações em um controle de formulário.


Portanto, cada um desses diferentes métodos de escrita poderia ser um objeto separado, mas não sabemos qual deles o usuário desejará usar. Para fornecer todas as três opções de forma intercambiável, poderíamos criar uma classe simples de esqueleto AuditorOutput como esta:


 EXEMPLO ORIGINAL: 

 

'AuditorOutput Class

Option Compare Database

Option Compare Explicit


Public Sub WriteAuditorOutput(activeFormAuditor As FormAuditor)

End Sub


'AuditorOutput Class


Option Compare Database

Option Explicit ' Obrigatório declarar explicitamente todas as variáveis

 

 SCRIPT  APRIMORADO PARA IMPLEMENTAR: 

 

Public Sub WriteAuditorOutput(activeFormAuditor As FormAuditor)

    ' Esta sub-rotina recebe um objeto FormAuditor como parâmetro e escreve a saída do auditor

    

    ' Declarando variáveis

    Dim xlApp As Object

    Dim xlBook As Object

    Dim ws As Object

    Dim db As Database

    Dim strSQL As String

    Dim strPath As String

    

    ' Verifica se foi fornecido um objeto válido FormAuditor

    If Not IsNull(activeFormAuditor) Then

        ' Define o caminho para o arquivo Excel

        strPath = "C:\Caminho\Para\Seu\Arquivo\Excel.xlsx"

        

        ' Configura a aplicação Excel

        Set xlApp = CreateObject("Excel.Application")

        xlApp.Visible = True ' Torna a aplicação Excel visível

        

        ' Cria um novo livro (workbook) no Excel

        Set xlBook = xlApp.Workbooks.Add

        

        ' Obtém uma referência ao banco de dados do Access

        Set db = CurrentDb

        

        ' Executa uma consulta SQL para recuperar dados do formulário do Access

        strSQL = "SELECT * FROM " & activeFormAuditor.RecordSource

        Set ws = xlBook.Sheets(1) ' Obtém a referência à primeira planilha do Excel

        

        ' Copia os dados do formulário do Access para a planilha do Excel

        With ws

            .Cells(1, 1).CopyFromRecordset activeFormAuditor.Recordset ' Copia os dados começando da célula A1

        End With

        

        ' Salva o livro do Excel no caminho especificado

        xlBook.SaveAs strPath

        

        ' Fecha objetos do Excel

        xlBook.Close

        xlApp.Quit

        

        ' Libera referências de objetos

        Set ws = Nothing

        Set db = Nothing

        Set xlBook = Nothing

        Set xlApp = Nothing

    Else

        MsgBox "O objeto FormAuditor fornecido é inválido.", vbExclamation, "Erro"

    End If

End Sub


Agora, para utilizar esta classe como uma interface de objeto (a definição dos elementos públicos da série de objetos), faríamos algo assim para a classe AO_ToDatabase e a classe AO_ToFile:


 EXEMPLO ORIGINAL: 

 

'AO_ToDatabase Class

Option Compare Database

Option Compare Explicit


Implements AuditorOutput


Private Sub AuditorOutput_WriteAuditorOutput(activeFormAuditor As FormAuditor)

   ' Add Code here to loop over FormAuditor information and save to a database

End Sub


 SCRIPT  APRIMORADO PARA IMPLEMENTAR: 

 'AO_ToDatabase Class


Option Compare Database

Option Explicit ' Obrigatório declarar explicitamente todas as variáveis


Implements AuditorOutput ' Implementa a interface AuditorOutput


Private Sub AuditorOutput_WriteAuditorOutput(activeFormAuditor As FormAuditor)

    ' Este método é chamado para escrever a saída do auditor para um banco de dados

    

    ' Adicione aqui o código para iterar sobre as informações do FormAuditor e salvar no banco de dados

    ' Por exemplo:

    

    ' Declarando variáveis

    Dim db As Database

    Dim strSQL As String

    

    ' Verifica se o objeto FormAuditor fornecido é válido

    If Not IsNull(activeFormAuditor) Then

        ' Obtém uma referência ao banco de dados do Access

        Set db = CurrentDb

        

        ' Constrói a consulta SQL para inserir os dados do FormAuditor no banco de dados

        strSQL = "INSERT INTO NomeDaTabela (Campo1, Campo2, Campo3) VALUES ('" & activeFormAuditor.Campo1 & "', '" & activeFormAuditor.Campo2 & "', '" & activeFormAuditor.Campo3 & "')"

        

        ' Executa a consulta SQL

        db.Execute strSQL

        

        ' Libera a referência ao objeto Database

        Set db = Nothing

    Else

        MsgBox "O objeto FormAuditor fornecido é inválido.", vbExclamation, "Erro"

    End If

End Sub


E neste caso a classe AO_ToFile seria estruturada da mesma forma, mas com código para salvar as informações em um arquivo:


 EXEMPLO ORIGINAL: 

 

'AO_ToFile Class

Option Compare Database

Option Compare Explicit


Implements AuditorOutput


Private Sub AuditorOutput_WriteAuditorOutput(activeFormAuditor As FormAuditor)

   ' Add Code here to loop over FormAuditor information and save to a file

End Sub


 SCRIPT  APRIMORADO PARA IMPLEMENTAR: 

'AO_ToFile Class


Option Compare Database

Option Explicit ' Obrigatório declarar explicitamente todas as variáveis


Implements AuditorOutput ' Implementa a interface AuditorOutput


Private Sub AuditorOutput_WriteAuditorOutput(activeFormAuditor As FormAuditor)

    ' Este método é chamado para escrever a saída do auditor para um arquivo

    

    ' Adicione aqui o código para iterar sobre as informações do FormAuditor e salvar em um arquivo

    ' Por exemplo:

    

    ' Declarando variáveis

    Dim fs As Object

    Dim f As Object

    Dim filePath As String

    Dim i As Integer

    

    ' Verifica se o objeto FormAuditor fornecido é válido

    If Not IsNull(activeFormAuditor) Then

        ' Define o caminho do arquivo

        filePath = "C:\Caminho\Para\Seu\Arquivo\output.txt"

        

        ' Cria um objeto FileSystem para manipular arquivos

        Set fs = CreateObject("Scripting.FileSystemObject")

        

        ' Cria ou abre o arquivo para escrita

        Set f = fs.OpenTextFile(filePath, 8, True)

        

        ' Escreve as informações do FormAuditor no arquivo

        With activeFormAuditor

            For i = 0 To .Recordset.Fields.Count - 1

                ' Escreve cada campo do FormAuditor no arquivo

                f.WriteLine .Recordset.Fields(i).Name & ": " & .Recordset.Fields(i).Value

            Next i

        End With

        

        ' Fecha o arquivo

        f.Close

        

        ' Libera a referência ao objeto FileSystem

        Set fs = Nothing

    Else

        MsgBox "O objeto FormAuditor fornecido é inválido.", vbExclamation, "Erro"

    End If

End Sub


Agora, no código onde você deseja configurar um FormAuditor e gerar saída para um ou ambos, o código ficaria assim:


 EXEMPLO ORIGINAL: 

 

'Code to use the classes via polymorphism

Dim LogToSomething As AuditorOutput


'Let's say we have a global variable called FormAuditorInstance that has

'collected information on a form and is a FormAuditor object

Set LogToSomething = New AO_ToDatabase

LogToSomething.WriteAuditorOutput FormAuditorInstance


 SCRIPT APRIMORADO PARA IMPLEMENTAR: 

 ' Código para usar as classes via polimorfismo


Dim LogToSomething As AuditorOutput ' Declaração de variável do tipo AuditorOutput


' Suponha que temos uma variável global chamada FormAuditorInstance que coletou informações em um formulário e é um objeto FormAuditor


Set LogToSomething = New AO_ToDatabase ' Instancia um objeto do tipo AO_ToDatabase e atribui à variável LogToSomething


LogToSomething.WriteAuditorOutput FormAuditorInstance ' Chama o método WriteAuditorOutput do objeto LogToSomething, passando FormAuditorInstance como parâmetro


E se você quisesse usar uma implementação diferente de AuditorOutput, você poderia simplesmente especificar a linha Set para usar esse objeto:


Set LogToSomething = New AO_ToFile


  Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série Donut Project 
DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 Clique nas capas abaixo e compre também: 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)


Série Top 10 Funções: Top 10 Funções VBA para o Microsoft Excel (Série Top 10 Funções - Microsoft Excel)


eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes

eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias