Nativamente falando o VB não é uma linguagem orientada a objetos.
Neste primeiro post relacionado a classes irei demonstrar como podemos utilizar o conceito de orientações a objeto no VBA.
Bom vamos lá.
O primeiro passo , é a criação de uma nova pasta de trabalho, nela pressionando ALT+F11 entraremos no editor do visual basic, nosso ambiente de trabalho!
No menu Inserir , selecione Módulo e Módulo de Classe, neste exemplo trabalharei com os nomes criados automaticamente Módulo1 e Classe1 respectivamente.
Clique duas vezes sobre Classe1 e insira o seguinte código, nele definimos as propriedades GET e LET do nosso objeto. Propriedades são as características dos objetos que criamos e suas ações são chamadas de métodos.
'Desenvolvido por Bruno Leite 'bruno_silva_leite@yahoo.com.br 'http://officevb.com Private WithEvents wb As Workbook 'Retornando o Workbook Aberto Public Property Get MyWb() As String MyWb = wb End Property 'definindo o Workbook Selecionado Public Property Let MyWb(wbName As String) Set wb = Workbooks.Open(wbName) End Property 'Capturando o Evento Private Sub wb_BeforeClose(Cancel As Boolean) MsgBox "Fechando o Arquivo", vbInformation End Sub 'Capturando o Evento Private Sub wb_NewSheet(ByVal Sh As Object) MsgBox "Inserindo Planilha", vbInformation End Sub 'Capturando o Evento Private Sub wb_SheetActivate(ByVal Sh As Object) MsgBox "Você Ativou a planilha " & Sh.Name, vbInformation End Sub 'Capturando o Evento Private Sub wb_SheetChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "Alteração realizada na Planilha " & Sh.Name & " no endereço " & Target.Address End Sub
Repare que a primeira linha contém a seguinte declaração
Private WithEvents wb As Workbook
Esta declaração permite que utilizemos o Combo com as opções disponíveis para o objeto que criamos como mostra a seguinte imagem.
Tudo bem , temos a nossa classe1, porém sem uma implementação sua ela não nos servirá de nada, é isto que faremos com o código a seguir no módulo1.
'Desenvolvido por Bruno Leite 'bruno_silva_leite@yahoo.com.br 'http://officevb.com Dim myClass As New Classe1 Sub AbreWB() Dim Arq As Variant 'Solicitando um arquivo Arq = Application.GetOpenFilename 'Verificando se foi selecionada alguma pasta de trabalho If Arq = False Then Exit Sub 'Instanciando um novo Arquivo em nossa Classe1 myClass.MyWb = Arq End Sub
Agora que temos a implementação iremos executar a rotina AbreWB (pressione F5 dentro da mesma), ao executá-la será solicitada a seleção de um arquivo, selecione qualquer arquivo excel em sua máquina, e trabalhe com ele como teste. Troque de planilhas, insira uma nova planilha, faça alterações em células.
O que aconteceu? Todos os eventos realizados na pasta de trabalho selecionada por você foram capturados pela nossa Classe1, que nos indicou as mensagens que havíamos criado em seu código como a seguinte imagem.
Achou complexo?
Logo voltarei com outros conceitos de orientação a objetos no Excel, mostrando exemplos de herança e Polimorfismo que os céticos dirão que não é possível, em breve verão que é..rs
Dúvidas postem nos comentários...
Até lá...
3 comentários:
Muito interessante.
Você poderia me recomendar um bom livro de VBA?
Gostaria de algo sólido, um livro pra quem já é programador. Ou seja, não precisa ser algo "For Dummies".
Obrigado.
Cara um livro bom e barato é este
http://www.juliobattisti.com.br/loja/detalheproduto.asp?CodigoLivro=CEXC000062
Boa sorte com os estudos
[]'s
Postar um comentário