Você está na página 1de 44

18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve?

- Diário Excel

DARK ☰

Módulo De Classe No VBA : Você Sabe


Para Que Serve?
Welisson Nery  março 4, 2022  12 Comentários  Leitura: 24 min

Faça o Download aqui


Anúncio Faça o download da versão d
verifique suas funções
Anúncio
Planilhas EC

Abrir

 Início  Artigos  Módulo De Classe No VBA : Você Sabe Para Que Serve?

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 1/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Essa é uma pergunta muito constante aqui no site. Muitos


alunos que estão iniciando na programação VBA, tem uma certa
curiosidade sobre os módulos de classe.

Para responder essas perguntas e outras, decidi escrever esse


artigo. Se você deseja saber mais sobre os módulos de classe,
recomendo que leia até o final…

Vou abordar o tema de modo mais teórico, para que você


entenda primeiramente a base, ou seja, o porquê da existência
desses módulos no VBA.

Sem essa base você não encontrará sentindo para usar classes,
mas garanto que com esse artigo, você terá uma boa noção
teórica sobre o assunto.

Temos alguns artigos que você pode usar, para entender como
trabalhar com classes de forma menos teórica, ou seja,
diretamente na prática.

Quanto terminar de ler essa publicação, leia também esses


artigos , pois eles serão de grande utilidade para seu
aprendizado.

A seguir, está a check-list sobre os tópicos desse post…

Índice do Conteúdo

Para que serve o módulo de classe no vba


Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 2/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Implementando classes no vba

O que são métodos assessores

Classes de interface, qual sua utilidade

O que é polimorfismo

Herança é possível no vba

Conclusão

Para Que Serve O Módulo De Classe No


VBA

Um módulo de classe é um componente abstrato usado para


criar objetos concretos. Nesse componente, podemos descrever
propriedades e métodos para um objeto. Propriedades podem
ser entendidas como suas características e métodos, ações que
ele promove.

Um classe não aloca memória em tempo de execução, já um


objeto sim, pois a classe possui apenas a definição do objeto
que será construído.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 3/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Por exemplo, se considerarmos que um bolo é um objeto, sua


receita certamente seria uma classe. Seguindo esse raciocínio, é
possível fazer vários bolos a partir de uma receita, ou vários
objetos a partir de uma classe.

Outra analogia, seria comparar a classe como sendo a planta de


uma construção. Por exemplo, vamos imaginar a planta de um
automóvel. Nessa planta descrevemos todas as características
para montagem de um carro. No entanto, essa planta é algo
“abstrato”, que será utilizada para construir um objeto
concreto, que é o próprio automóvel.

O termo “objeto” é muito utilizado no OOP (Object-Oriented


Programming). A programação orientada a objetos ou (OOP), é
um paradigma baseado na “construção de objetos”. O modelo é
usado para estruturar um programa em partes reutilizáveis.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 4/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Alguns dos seus princípios são:

Abstração: Visa abstrair algo do mundo real e transformá-


lo em um objeto na programação. Esse objeto será
composto por uma identidade, propriedades e métodos.
Dessa forma fica mais simples trazer para dentro da
programação o problema que precisa ser resolvido ou o
processo que precisará ser automatizado.

Encapsulamento: Visa a proteção de variáveis que não


podem ser acessadas diretamente. Quando clicamos no
botão ligar da televisão, não sabemos o que está
acontecendo internamente. Podemos dizer que os métodos
que ligam a televisão estão encapsulados.

Herança: Visa herdar as propriedades de outra classe pai. A


classe cachorro herda as propriedades da classe mamífero.
Essa analogia indica que o cachorro tem suas
características, mas ele é um mamífero e compartilha das
mesmas características que um gato, porém cada um com
suas diferenças.

Polimorfismo: Na natureza, vemos animais que são capazes


de alterar sua forma conforme a necessidade. Como
sabemos, os objetos filhos herdam as características e
ações de seus “ancestrais”. Entretanto, em alguns casos, é
necessário que as ações para um mesmo método sejam
diferentes. Em outras palavras, o polimorfismo consiste na
alteração do funcionamento interno de um método herdado
de um objeto pai.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 5/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Benefícios nesse modelo de


programação:

Podemos construir os programas a partir de módulos de


trabalho padrão que se comunicam entre si, em vez de ter
que começar a escrever o código do zero, o que leva a
economia de tempo de desenvolvimento e maior
produtividade.

OOP permite dividir o programa em problemas de tamanho


menores que podem ser resolvidos facilmente (um objeto
de cada vez).

Melhorar a produtividade do programador, a qualidade de


software e menor custo de manutenção.

É possível que várias instâncias de objetos coexistam sem


qualquer interferência.

O princípio de ocultação de dados ajuda o programador a


construir programas seguros que não podem ser invadidos
pelo código em outras partes do programa.

A abordagem de design centrado em dados nos permite


capturar mais detalhes do modelo em uma forma
implementável.

Desvantagens nesse modelo de


programação:
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 6/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

A extensão dos programas desenvolvidos usando OOP é


muito maior do que a abordagem procedural. Como o
programa se torna maior em tamanho, ele requer mais
tempo para ser executado, o que leva a uma execução mais
lenta do programa.

Não podemos aplicar OOP em todos os lugares, pois não é


uma linguagem universal. Deve ser usado somente quando
necessário.

Os programadores precisam ter habilidades de design e


programação, juntamente com planejamento adequado,
porque usar OOP é um pouco “difícil”.

O processo de pensamento envolvido na programação


orientada a objetos pode não ser natural para algumas
pessoas.

Tudo é tratado como objeto no OOP, portanto, antes de


aplicá-lo, precisamos ter um excelente pensamento em
termos de objetos

Apesar dor VBA ter suporte ao (OOP), ele não é considerado


uma linguagem 100% orientada a objetos, porque ele não
implementa todos os 4 pilares desse paradigma. O VBA
implementa 2 desses conceitos e eles são:

Abstração SIM

Encapsulamento SIM
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 7/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Herança NÃO

Polimorfismo (SIM) *apenas através de interfaces*

Então resumindo, teoricamente é isso…

Um módulo de classe serve para criar tipos e estruturar como


os objetos são definidos. Classes possuem estado e
comportamento relacionado ao estado, elas dispõem
propriedades e métodos, que fazem ações relacionadas
manipulando as propriedades existentes.

A seguir vamos aprender como implementar classes no VBA,


continue lendo!

Implementando Classes No VBA

Abra seu editor VBA e insira um novo módulo de classe, defina


a propriedade Name do objeto para ClsPessoa.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 8/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Agora, vamos construir as definições de nossa classe ClsPessoa,


copie e cole o código na classe.

Option Explicit

Private vNome As String

Private vIdade As Integer

Private vSexo As String

Public Sub Print_Informacoes_Pessoa()

Debug.Print (vNome & Space(3) & vIdade & Space(3) & vSexo)

End Sub

Public Property Get Nome() As String

Nome = vNome

End Property

Public Property Let Nome(Value As String)

vNome = Value

End Property

Public Property Get Idade() As Integer

Idade = vIdade

End Property

Public Property Let Idade(Value As Integer)

vIdade = Value

End Property

Public Property Get Sexo() As String

Sexo = vSexo

End Property

Public Property Let Sexo(Value As String)

vSexo = Value

End Property

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 9/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Após realizar os passos indicados, devemos adicionar um


módulo padrão:

No módulo você deve criar um método que vamos chamar de


Private Sub Set_Informacoes_Pessoa().  Faça exatamente como
na imagem Gif a seguir, e veja o resultado. 

Agora você deve habilitar a janela de verificação imediata do


vba, para poder ver o resultado após execução.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 10/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Veja o código em modo depuração, aponte o curso na sub


criada e depois clique na tecla F8 de seu teclado.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 11/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Explicando Esse Exemplo

Nossa intenção foi mostrar o básico do POO no VBA. Nesse


exemplo, tivemos como objetivo principal criar uma classe,
definir suas propriedades, métodos e por fim executar uma
ação. Essa ação, consistiu em passar valores para os atribuídos
da classe e realizar um print das informações na janela de
verificação imediata do VBA.

Na programação orientada a objetos, não é possível executar


métodos ou usar propriedades de uma classe sem instanciá-la.
Instanciar é criar um objeto, ou seja, alocar um espaço na
memória, para posteriormente poder utilizar os métodos e
atributos que o teu objeto dispõe, pode ser representado pelas
seguintes linhas:

O primeiro conceito básico da programação orientada objetos é:

Definir a estrutura 

Instanciar objeto

Consumir o objeto

Destruir objeto 

Já podemos dizer que no primeiro instante usamos os 2 pilares


do Poo, a abstração e o encapsulamento. Ao criar nossa classe,
nós definimos os atributos que toda pessoa possui ou seja: Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 12/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

nome, idade, sexo etc. Em outras palavras, nós pegamos algo do


mundo real e transformamos isso em objeto para nosso projeto.

Mas Welisson uma pessoa não é um objeto!

Quando se trata de POO sim, uma pessoa é considerada um


objeto. Pois objetos são características definidas pelas classes,
objeto no poo é uma forma de expressar o conceito desse
paradigma. 

Como citei, o segundo paradigma também foi executado nesse


exemplo. Toda vez que você definir os atribuídos da sua classe
como privadas(Private), realizará o encapsulamento. Isso porque
você dirá para seu sistema, que essas variáveis só podem ser
acessadas diretamente da classe.  

Espera aí, e se eu precisar acessar essas variáveis de fora da


classe?

Nesse caso será necessário adicionar os métodos assessores na


classe. Os métodos assessores, podem ser comparados como
funcionários no mundo real. Por tanto será deles o trabalho de
passar e receber valores de uma classe, não deixando o usuário
acessar os atributos diretamente.

O Que São Métodos Assessores?

Toda linguagem de programação orientada a objetos possui


métodos assessores. A única maneira de se trabalhar com
variáveis privadas de sua classe, é através desses métodos. Isso

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 13/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

porque por padrão, métodos assessores são definidos como


públicos(Public).

Dessa forma é possível acessar os atributos indiretamente,


evitando erros e possíveis confusões em seu código. Cada
linguagem de programação tem sua maneira diferente de
trabalhar com esses métodos. No caso do VBA, os métodos
assessores são os Get e Let.

Toda vez que você quiser pegar o valor de um atributo privado,


você deve criar um assessor Get do tipo público na sua classe.
O mesmo deverá ser feito com o Let, caso queira deixar um
valor para a propriedade. 

Esse conceito é muito comum no mundo real em que vivemos,


onde tudo funciona exatamente dessa forma. Quero que você
analise a imagem a seguir, com muita atenção:

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 14/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Ir ao supermercado é uma rotina que faço pelo menos duas


vezes ao mês, acredito que você também. Você sabe me dizer se
existe algum supermercado no brasil, que permita o cliente ter
acesso diretamente ao caixa sem que o atendente esteja lá?

Com 100% de certeza que não!

Isso porque seu acesso ao caixa é privado, apenas pessoas


autorizadas podem fazer esse trabalho. Imagine que o
supermercado é uma classe muito grande que possui centenas
de propriedades e métodos, e que o atendente é um método
assessor sendo responsável por pegar seu dinheiro e devolver o
troco.

Podemos dizer que esse acesso é indireto, você não possui


permissão, mas pessoas internas sim. Dessa forma o
supermercado consegue atender você e ao mesmo tempo,
manter a segurança do estabelecimento. Os métodos assessores
na programação orientada a objetos, são como agentes de um
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 15/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

supermercado na realidade, somente eles podem acessar


atributos privados da classe.

Você não é obrigado a implementar os métodos assessores em


sua classe, mas fique sabendo que eles estão relacionados
diretamente ao paradigma de encapsulamento(POO). No entanto
você deve ter bom senso, e somente fazer uso desses métodos
quando necessário.

Devo Utilizar Os Métodos Assessores


Get e Let?

Apesar de implementarmos os métodos Get e Let na classe


ClsPessoa, apenas  o Let foi usado. Isso aconteceu, porque no
primeiro exemplo o objetivo principal foi passar valores, e não
pegar valores da classe.

Agora vamos fazer um experimento, exclua todos os métodos


Get e Let da classe ClsPessoa e mantenha apenas as variáveis
privadas. Depois disso, tente acessar as propriedades da classe
novamente. Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 16/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Note que após excluir os métodos Get e Let, não temos mais
acesso aos atributos privados da classe. O único acesso que nos
foi permitido, foi o método criado para realizar o print das
informações. Isso aconteceu porque esse método foi definido
como público, então ao instanciar o objeto ele torna-se visível
para todo o projeto.

Faça o mesmo com as variáveis privadas da classe, modifique-as


para públicas e veja o resultado:

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 17/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Você agora pode estar se perguntando, mas não seria bem mais
fácil dessa forma? porque implementar métodos assessores,
isso não faz sentindo!

Esse é um dos paradigmas do POO o principal objetivo é a


separação dos conceitos de atributos, e comportamentos de um
objeto. São diversos benefícios, mas também representa algum
inconveniente adicional. O importante é não considerar este
inconveniente como um problema, mas sim um caminho a ser
seguido para um bom desenho de classes. Para exemplificar,
vamos pegar uma questão:

– Qual a diferença entre obj.nome = “x” e obj.setNome(“x”)?

No primeiro caso você está manipulando o atributo de um


objeto, enquanto no segundo você está utilizando um
comportamento definido do objeto. O conceito de
encapsulamento diz que você não precisa conhecer os atributos
de um objeto, mas apenas utilizar seus comportamentos.

Então imagine que seu objeto possua 2 atributos para a


definição de nome: “primeiroNome” e “sobrenome”, não é sua
responsabilidade conhecer ou controlar isto, você apenas
precisa conhecer o comportamento de definir nome:
“obj.setNome(nome)”, o resto é responsabilidade do próprio
objeto.

É claro, não leve esse exemplo de forma literal, existem


situações e situações. Eu também utilizei “obj.” ao invés de
“Me.” pois o Me representa o próprio objeto, o que foge do
conceito de encapsulamento.

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 18/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Então eu devo usar os métodos Get Let ou não?

Isso vai depender do projeto e você também precisa ter bom


senso, imagine a seguinte situação. Em nosso projeto temos o
atributo chamado Idade, porém esse atributo não pode receber
os seguintes valores 0,-1,-2,-3 e etc. Como posso evitar isso, se o
acesso a essa propriedade for totalmente direto?

Ao criar os métodos assessores para essa propriedade,


podemos então implementar restrições. Isso não seria possível,
se o acesso ao atributo fosse totalmente direto.

Lembra do exemplo do supermercado?

Se comparamos essa ideologia no mundo real, o funcionário


receberá seu dinheiro, mas antes fara uma serie de verificações.
Essas verificações poderiam ser: Analisar se o valor estiver
correto, se o dinheiro é falso ou então se o método de
pagamento é permitido pela empresa. 

Como Implementar Os Métodos Get e


Let Na Classe?

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 19/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

No VBA a implementação dos métodos assessores é muito


simples. Primeiro você precisa definir a variáveis da classe e
depois referenciar os métodos assessores nas propriedades. É
importante ressaltar que existe vários modelos de
implementação do Get e Let, irei explicar quais são e os que
mais indico.

A primeira implementação é a mesma que fizemos para os


exemplos anteriores:

O problema dessa implementação, está na definição das


propriedades da classe. Se você observar bem, nós usamos um
prefixo (V) para cada atributo, e isso não é muito indicado.
Portanto, para que você tenha um código enquadrado nas regras
de boas práticas de programação fuja desse modelo.

Se é para fugir desses modelos porque você fez os exemplos


assim?

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 20/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Não que isso seja uma regra, ou que seja errado trabalhar dessa
maneira. Sempre pense no seu código sendo trabalhado em um
ambiente de desenvolvimento, usar prefixos nas propriedades
da classe a meu ver, deixa o código feio e embolado. Por outro
lado, sem usar esses prefixos também não seria possível
trabalhar, porque o vba não aceita propriedades duplicadas no
corpo do código.

Em outras linguagens de programação, como por exemplo Java


ou C# geralmente usamos prefixos Get e Set  nos métodos
assessores, veja um exemplo:

public class Ponto {

private double x;

private double y;

public double getX() {

return x;
}

public void setX(double x) {

this.x = x;

public double getY() {

return y;
}

public void setY(double y) {

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 21/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

this.y = y;

No vba podemos fazer parecido, veja:

Private Nome As String

Private Idade As Integer

Private Sexo As String

Public Property Get getNome() As String

getNome = Nome

End Property

Public Property Let letNome(Value As String)

Nome = Value

End Property

Public Property Get getIdade() As Integer

getIdade = Idade

End Property

Public Property Let letIdade(Value As Integer)

Idade = Value

End Property

Public Property Get getSexo() As String

getSexo = Sexo

End Property

Public Property Let letSexo(Value As String)

Sexo = Value

End Property

Em termos de execução trabalhar dessa forma é legal, porém no


VBA eu particularmente não gosto. Isso porque no momento de
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 22/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

acessar os atributos da classe, são geramos muitas


propriedades veja:

Embora isso seja comum em linguagens como java e c#, eu não


gosto de trabalhar assim no VBA. Como foi dito visual
Basic(VBA) não é considerado uma linguagem 100% orientada a
objetos. Apesar do vba ter suporte a esse paradigma, suas
ferramentas são meio escassas se comparadas com outras
linguagens do mercado. Portanto, vou mostrar outro modelo
muito bacana veja o exemplo:

Private Type ClassType

Nome As String

Idade As Integer

Sexo As String

End Type

Private This As ClassType

Public Property Get Nome() As String

Nome = This.Nome

End Property

Public Property Let Nome(Value As String)

This.Nome = Value
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 23/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

End Property

Public Property Get Idade() As Integer

Idade = This.Idade

End Property

Public Property Let Idade(Value As Integer)

This.Idade = Value

End Property

Public Property Get Sexo() As String

Sexo = This.Sexo

End Property

Public Property Let Sexo(Value As String)

This.Sexo = Value

End Property

Nesse modelo a estrutura da classe ficou muito mais legível,


isso facilita nossa leitura e o refaturamento do código. Note que
no escopo do código não precisamos indicar um modificador de
acesso para cada atributo, e sim apenas para o Type que
criamos.

Após isso basta criar uma variável e referenciar nosso type


criado, eu sempre uso o This:

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 24/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

A parti de agora, todos os nossos atributos privados são


acessados diretamente pela propriedade This:

Em linguagens consideradas 100% orientadas a objetos como o


java por exemplo, o This representa o próprio objeto. Em
termos de uso, isso facilita a leitura de sua classe, portanto
recomendo que use esse padrão. Isso também estar relacionado
diretamente as regras de encapsulamento.

→Clique Aqui Nesse Link Agora, E Entenda Melhor Esse Modelo!

Classes De Interface, Para Que Serve?

Interface é um recurso de linguagens que implementam o


paradigma do POO, elas representam inúmeras vantagens no
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 25/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

sentido da modelagem e instanciação de objetos, porém deve-se


entender claramente os conceitos básicos da orientação a
objetos a fim de utilizá-la plenamente.

Uma interface é como um contrato, através dele podemos


especificar quais métodos as classes terão que implementar.
Uma interface não pode ser instanciada, ela pode ser usada
como um tipo de variável que receberá um objeto da classe que
implementa a interface.

Dentro de uma interface pode ser definido variáveis e todas


serão constantes, também podemos definir a assinatura de
métodos e todos os métodos declarados são public. Quando
uma classe implementa uma interface, está classe também
precisa implementar todos os métodos da interface.

O vba não possui classes especificas de interface como C# e o


Java por exemplo. O que podemos fazer é definir métodos em
uma classe normal, e então utilizar a palavra-chave Implements
para implementá-la como uma interface. Apesar de funcionar
muito bem, em termos de organização de pacotes e entidades
do projeto, dependendo do tamanho do sistema isso torna-se
complicado.

Mais uma vez digo que o vba não é uma linguagem focada no
paradigma orientação a objetos. Hoje a melhor ferramenta para
se trabalhar com POO usando o VB, seria o vb.net. No próximo
tópico vamos entender as interfaces de forma mais
simplificada, continue lendo!

O Que É Polimorfismo? Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 26/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

O visual basic(VBA) não é uma linguagem que permite herança,


portanto não permite polimorfismo através de herança. No
entanto, é possível aplicar polimorfismo no vba através de
interfaces, então vamos mostrar alguns exemplos a seguir, mas
antes vamos entender o conceito do polimorfismo.

A palavra polimorfismo vem do grego e significa aquilo que


pode tomar várias formas. Esta característica é um dos
conceitos essenciais da programação orientada a objetos (POO).
Enquanto a herança se refere às classes e a sua hierarquia, o
polimorfismo diz respeito aos métodos dos objetos.

Para que você entenda a teoria do polimorfismo, preparei um


diagrama representativo. Cada bloco desse diagrama representa
uma classe, e essas entidades serão referidas a animais da vida
real veja o exemplo:

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 27/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

O primeiro membro da estrutura é representado pela classe


Animal, nesse contexto ela é uma  interface e possui o método
emite som. Também adicionamos as classes Cachorro, Gato e
Galinha e elas irão implementar essa interface. A
implementação ocorre porque todo animal possui um método
em comum que é emitir sons. A diferença é que cada animal
tem sua característica diferente de emitir esse som, mas não é
encargo da interface saber como esses sons serão emitidos e
sim da classe que implementa a interface.

Ainda não ficou claro para você? estão vamos criar um exemplo
no VBA!

Aplicando o Polimorfismo Com Excel


VBA

Adicione 4 módulos de classe no excel vba, renomeado duas


propriedades seguindo esse exemplo:

A classe animal foi descrita com um prefixo(I), e na


programação orientada a objetos isso indica que ela é uma
interface. Na classe animal vamos descrever apenas um método
público que será chamado de EmitirSom. Esse método por
padrão é abstrato, e não sofre implementações em seu corpo. Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 28/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

No VBA para realizar a implementação de uma interface, vamos


utilizar a palavra-chave Implements. Todas as classes deverão
implementar nossa interface IAnimal veja o exemplo:

Depois que você implementar a interface IAnimal, clique na


listagem de eventos da classe atual. Observe que ClsCachorro,
ClsGato e ClsGalinha possuem acesso ao método emitir som da
interface IAnimal. Esse método é dividido por duas palavras-
chave, primeiro o nome da interface e depois o nome do método
implementado:

Depois de implementar nossa interface, precisamos descrever


as estruturas dos métodos implementados. Lembre-se, somente
as classes ClsCachoro, ClsGato e ClsGalinha sofrerão
modificações no corpo do método: Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 29/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Agora para finalizar em modulo normal, vamos criar um


método chamado Animal_EmitirSom e descrever em seu corpo o
seguinte código:

Private Sub Animal_EmitirSom()

Dim Cachorro As ClsCachorro

Dim Gato As ClsGato

Dim Galinha As ClsGalinha

Dim Animal As IAnimal

Set Cachorro = New ClsCachorro

Set Animal = Cachorro


Animal.EmitirSom

Set Gato = New ClsGato

Set Animal = Gato

Animal.EmitirSom

Set Galinha = New ClsGalinha

Set Animal = Galinha

Animal.EmitirSom


Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 30/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Set Cachorro = Nothing


Set Gato = Nothing

Set Galinha = Nothing

Set Animal = Nothing

End Sub

Observando a classe ClsCachorro, ClsGato e ClsGalinha,


podemos notar que ambos os métodos são iguais. Como já foi
dito, essas entidades implementaram o mesmo método da
interface IAnimal. Em outras palavras, nós criamos um método
único que fez 3 tipos de ações diferentes.

Polimorfismo mais simples que isso só se for na china hehe,


brincadeiras à parte.

Muitos programadores pensam que o uso de interfaces é algo


sem sentindo, mas isso não é verdade. As interfaces são
ferramentas indispensáveis, quando se trata de modelagem de
classes. Se você é desenvolvedor vba eu posso te provar, que Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 31/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

você utiliza interfaces indiretamente em seus projetos, mas não


sabia

Que pagar para ver? então vamos lá!

Faça o seguinte agora mesmo, adicione um novo UserForm e


veja:

Quando trabalhamos com UserForms, o que muitos


programadores não sabem é que estamos usando classes. O
próprio UserForm é uma classe, e ele “herda” diversos métodos
por padrão, eles são implementados por uma interface interna
do visual basic.

Mas porque o VBA implementa essas interfaces no UserForm?

Pois bem como já expliquei, a arte do polimorfismo é tomar


diversas formas. Em outras palavras, executar as mesmas ações
para entidades que compartilham das mesmas características.
No exemplo dos UserForms, sabemos que o TextBox,
Combobox, Button e até mesmo ranges muitas das vezes
compartilham dos mesmos eventos. 
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 32/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Então seguindo esse raciocínio abordando o método Change por


exemplo, pense no UserForm com 50 controles. Já imaginou se
você tiver que criar um evento change para cada objeto do
formulário, por exemplo: Textbox1_Change1,
Textbox2_Change2, TextBox3_Change3, Textbox4_Change4 e
assim por diante?

Essa mesma ideologia vale para o cadastramento de pessoas em


um sistema, por exemplo. Preparei um diagrama para que você
entenda o que estou dizendo:

Private Sub Execute()

Dim Cliente As ClsCliente

Dim Funcionario As ClsFuncionario

Dim Usuario As ClsUsuario

Dim Pessoa As IPessoa

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 33/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Set Cliente = New ClsCliente

Set Pessoa = Cliente

Pessoa.Cadastrar

Pessoa.Editar

Pessoa.Deletar

Set Funcionario = New ClsFuncionario

Set Pessoa = Funcionario

Pessoa.Cadastrar

Pessoa.Editar

Pessoa.Deletar

Set Usuario = New ClsUsuario

Set Pessoa = Usuario

Pessoa.Cadastrar

Pessoa.Editar

Pessoa.Deletar

Set Cliente = Nothing

Set Funcionario = Nothing

Set Usuario = Nothing

Set Pessoa = Nothing

End Sub

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 34/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Mas aí você pode pensar: “Que diferença isso fez, se de


qualquer forma tenho que descrever eles para todas as classes?”

Pense no seu programa depois de 5 a 10 anos, onde você terá


centenas de eventos. Imagine a dor de cabeça para encontrar
métodos específicos, já que você tem 1 bilhão de replicações em
todo o sistema. Vai por mim, realizar manutenção em softwares
não é uma tarefa muito agradável principalmente nesse
sentindo. 

Imagine o trabalho em equipe? É bem mais fácil passar para o


programador a interface que ele tem que implementar ao invés
dele ter que ficar criando os métodos e de repente alterar os
parâmetros do seu método, fazendo com que não exista a
possibilidade de utilizar o polimorfismo. Eu acredito que se
você ficar um tempinho sem pegar em um projeto, seu tempo
de adaptação vai ser maior. Com a interface você apenas
implementa e ela cumprirá com o contrato. Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 35/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

É claro, isso não é uma regra e nem estou dizendo que vocês
estão errados de trabalhar dessa forma. Veja essa ferramenta
como uma forma de tornar seus programas ainda melhores,
use-a ao seu favor para ganhar mais tempo e consequentemente
mais dinheiro.

Herança, É Possível No VBA?

Talvez isso seja um ponto negativo, mas infelizmente o vba não


possui suporte para herança. Não que isso seja o fim do mundo
como muitos dizem, porém esse paradigma é essencial para
toda linguagem que implementa o conceito da programação
orientada a objetos.

O que podemos fazer para chegar mais perto disso, seria tentar
simular uma herança. No blog do Marcoratti existe um exemplo
muito interessante.

→O link do artigo estar aqui, leia depois…

Seguindo o exemplo dele eu fui capaz de “realizar herança no


VBA”, mesmo que não seja uma das melhores formas posso
dizer que quebra um galho. Só que esse assunto é tema para um
próximo artigo, se você quiser saber o que fiz junto com a ideia
do marcoratti acompanhe esse site.

Conclusão

Eu acho que falei até de mais, mas não podia deixar de ser chato
nessas horas. Para não ser longo na conclusão final, quero Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 36/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

deixar bem claro que você não é obrigado a utilizar módulos de


classe no vba. Por outro lado, posso dizer que você pode estar
desperdiçando ótimos recursos que facilitarão muito sua vida. 

Acredito que até aqui você entendeu os benefícios que a


programação orientada a objetos pode trazer para a sua carreira
como programador. Cabe a você decidir se isso fara parte de
seus projetos ou não. Lembre-se que essa é uma decisão muito
particular, demorei para adotar o POO na minha vida, mas
acabei por ser convencido. 

Hoje já não consigo pensar nos meus programas, sem o uso de


módulos de classe.

Esse artigo é apenas a ponta de um iceberg quando o assunto se


trata de módulos de classe. Isso porque são inúmeras as
utilidades desse componente, por isso é muito importante que
você continue estudando. Particularmente recomendo que você
faça o uso de classes em seus projetos, mas tenha sempre bom
senso é claro. 

Faça o Download aqui


Anúncio Faça o download da ver
planilha de indicadores de RH e
Anúncio funções
Planilhas EC

Abrir

Como havia prometido, aqui esta o link do curso que aborda


tudo sobre programação orientado a objetos. Esse curso é 100%
grátis e garanto que você vai aprender muito com ele. Não se
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 37/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

esqueça de se inscrever no canal do instrutor, ele possui ótimas


dicas e você não vai precisar pagar por isso.

Bem por fim é isso, até a próxima!

Sobre o Autor

Welisson Nery
Analista e programador de sistemas, trabalha com T.I
desde 2016, grande referência em desenvolvimento de
planilhas financeiras, especialista em arquitetura de
softwares e apaixonado por tudo que envolva
tecnologia.

12 Comentários
Deixe um comentário
O seu endereço de e-mail não será publicado.
Campos obrigatórios são marcados com *

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 38/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Comentário *

Nome *

E-mail *

Site

Ao usar este formulário, você concorda


com a nossa Política de Privacidade.

PUBLICAR COMENTÁRIO

Fernando Ramos disse:

julho 12, 2021 às 11:40 pm

Sensacional, é um artigo para ler e reler várias vezes. Muito


didático.. Muito Obrigado por compartilhar seu conhecimento!

Responder

Autor
Welisson Silva disse: Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 39/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

julho 13, 2021 às 10:25 am

Que bom que gostou Fernando! Eu que agradeço por você

compartilhar sua experiencia, abraço e sucesso amigo!

Responder

CLAUDIO ROBERTO FERNANDES DA PITTA disse:

junho 23, 2021 às 2:33 am

Excelente, muito didático. Parabéns

Responder

Autor
Welisson Silva disse:

julho 11, 2021 às 12:12 pm

Que bom que gostou Claudio, obrigado!

Responder

Rodrigo Fernando Gomes Lima disse:

abril 8, 2021 às 11:52 pm

Cara, que aula!!!!

Muito boa explicação, vou começar a usar as classes nos meus


projetos, pode ter certeza.

Responder

Autor
Welisson Silva disse:

maio 10, 2021 às 2:45 pm

Opa, obrigado Rodrigo!

Tenho muita coisa para falar sobre isso, fica de olho que

vamos postar muita coisa a respeito disso.

Abraço!
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 40/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Responder

ITAMAR CONCEIÇÃO disse:

janeiro 16, 2021 às 6:20 pm

Opa!

Boa tarde, Wellison!

Cara, primeira vez que vejo uma literatura sobre classe no VBA!

Infelizmente eu ainda não cheguei nesse ponto. rs..

Eu consigo entender que poderia se criar algo realmente


fantástico que facilitaria muito a vida.

Gostaria de saber se você consegue fazer um exemplo prático,


como por exemplo um sistema.

Vendo isso de forma mais prática. Eu sempre sou muito ruim


quando se trata desses exemplos como o caso do carro.cor =
“Verde” (prop Cor) e carro.Acelerar (mét. Acelerar).

Mas eu penso isso num sistema como ficaria. Como aplicar toda
essa metodologia num pequeno sistema de forma a facilitar a
vida.

Responder

Autor
Welisson Silva disse:

janeiro 17, 2021 às 5:44 am

Opa Itamar tudo bem? Sua dúvida é muito boa!

Entendo completamente você, realmente sempre usamos


esses exemplos

para tentar explicar a base do POO, que é bem difícil de


entrar na

cabeça, eu mesmo tive muita dificuldade!

Não que seja algo para criar um app fantástico, trata-se de


um modelo de

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 41/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

programação que ajuda muito em determinados projetos.


Para lhe explicar

tudo por aqui é impossível, pois tudo depende muito!

Vou me programar para criar mais conteúdos a respeito,


fique

ligado em nosso canal, pois vou ensinar fazer um sistema de

vendas usando módulos de classe!

Responder

Sales disse:

novembro 22, 2020 às 4:56 pm

Segunda pessoa que define tão bem a programação orientada a


objeto. Muito bom. Continue assim

Responder

Autor
Welisson Silva disse:

novembro 25, 2020 às 12:24 pm

Opa Sales, tudo bem?

Obrigado cara, fico feliz que tenha gostado!

Responder

Bruno Minhoto disse:

outubro 27, 2020 às 4:54 pm

Muito Obrigado

Muito bom o texto e as exemplificações

abraço

Responder
Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 42/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

Autor
Welisson Silva disse:

novembro 13, 2020 às 3:08 pm

Olá Bruno, que bom que gostou amigo!

Grande abraço!

Responder

Quem é Postagens Privacidade Redes Sociais


Welisson Nery Recentes
Termos Uso
Analista e CommandButton
Política de
programador de Personalizado
Privacidade
sistemas, trabalha Totalmente Nativo
com T.I desde 2016, No VBA Tratamento de
grande referência em maio 2, 2022 Dados
desenvolvimento de
Módulo De Classe
planilhas financeiras,
No VBA : Você Sabe
especialista em
Para Que Serve?
arquitetura de março 4, 2022
softwares e
String Builder:
apaixonado por tudo
Quebrar Script SQL
que envolva
tecnologia. No Código Do VBA
janeiro 11, 2022
SAIBA MAIS 
Cálculo De Parcelas
Resultando
Diferença No VBA
janeiro 6, 2022

Formatação De
TextBox : Utilizando
WithEvents No VBA
julho 8, 2019

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 43/44
18/06/2022 12:34 Módulo De Classe No VBA : Você Sabe Para Que Serve? - Diário Excel

© Criado Por  Diário Excel

Privacidade - Termos

https://diarioexcel.com.br/2022/03/04/modulo-de-classe-no-vba/#gsc.tab=0 44/44

Você também pode gostar