Módulos de Classe no VBA – Saiba Como Utilizá-los
Você já conhece os módulos de classe no VBA? Hoje eu quero te mostrar uma introdução a esses módulos para organizar seus códigos.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
O que você aprende neste vídeo
Resposta rápida: Um módulo de classe no VBA cria o seu próprio objeto: você declara as propriedades como variáveis Public e os métodos como funções dentro dele, e passa a usar tudo pelo ponto, como em um Range. A classe se exporta em um arquivo e viaja para outras planilhas. Para automação pequena não compensa: a estrutura custa mais que o script.
Neste vídeo (30 min):
- 1:00 - As sete propriedades do funcionário que servem de exemplo em toda a aula.
- 2:00 - A vantagem principal: criar objetos próprios, com propriedades e métodos, como um Range ou um Workbook.
- 5:00 - Quando não compensa usar classe: automação pequena não paga o custo da estrutura.
- 6:00 - Criar a classe em Inserir, Módulo de Classe, e dar nome a ela na janela de propriedades.
- 7:00 - Declarar as propriedades como variáveis
Publicdentro da classe. - 9:00 - No módulo comum, declarar a variável com
Newpara já alocar o objeto na memória. - 10:00 - O autocompletar passa a listar as propriedades da classe como em um objeto nativo.
- 12:00 - Criar a primeira função dentro da classe, para calcular a idade a partir da data de nascimento.
- 14:00 - Usar
WorksheetFunctionpara chamar uma função do Excel de dentro do VBA. - 15:00 - Chamar a função pelo objeto, com o mesmo ponto que dá acesso às propriedades.
- 18:00 - Função que recebe argumento: alterar a área do funcionário passando a área nova.
- 21:00 - Função de aumento salarial: o salário atual multiplicado por um mais o percentual.
- 24:00 - Usar
Formatpara exibir o valor como moeda na caixa de mensagem. - 28:00 - Exportar a classe em arquivo e importá-la em outra planilha, levando propriedades e funções junto.
Trechos do vídeo:
- Guardar a área antiga em uma variável antes de sobrescrever a propriedade é o que permite a mensagem mostrar de onde para onde o funcionário mudou.
- O código de formatação usado no Format sai de Formatar Células, opção Personalizado, mas o VBA espera o separador no padrão dele, não no do Excel em português.
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, Impressionadores! Hoje eu vou mostrar uma introdução a módulos de classe no VBA que vocês pediram!
Esse é um tema muito interessante, pois os módulos de classe no VBA vão deixar o seu código mais organizado e mais fácil de ser lido.
Então mesmo que você não tenha escrito o código você vai notar que é muito mais fácil entender o que foi feito.
A ideia é te mostrar como usar classes no VBA, como fazer a organização do código com classes e como importar classes no VBA.
Sim, é possível importar classes para facilitar o seu trabalho sem que você tenha que refazer tudo que já fez.
Pode simplesmente arrastar a classe que você exportou para dentro do VBA e pronto, já pode utilizá-las!
E aí, bora aprender o que são classes no VBA e como elas podem te auxiliar na sua programação?
Um módulo de classe no VBA é onde você cria um objeto próprio, com propriedades declaradas como Public nome As String e métodos escritos como Public Function. Em um módulo comum, você declara Dim funcionario As New classeFuncionario e passa a usar funcionario.nome ou funcionario.calcIdade, com o código bem mais organizado.
Inserindo um Módulo de Classe no VBA
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Como não temos nenhum módulo de classe destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo de classe à parte.
Vamos na guia Inserir > Módulo de classe, e uma caixa branca se abrirá.

Por padrão ele terá o nome de “Classe 1”.
Colocaremos os seguintes códigos (subs e functions) dentro dele:
<strong>Option Explicit</strong>
<strong>Public nome As String</strong>
<strong>Public email As String</strong>
<strong>Public dataNasc As Date</strong>
<strong>Public area As String</strong>
<strong>Public dataContra As Date</strong>
<strong>Public cpf As LongLong</strong>
<strong>Public salIni As Double</strong>
<strong>Public salAtual As Double</strong>
<strong>Public Function calcIdade() As Long</strong>
<strong> Dim idade As Long</strong>
<strong> idade = WorksheetFunction.RoundDown((Date - dataNasc) / 365, 0)</strong>
<strong> MsgBox ("O funcionário " & nome & " tem " & idade & " anos.")</strong>
<strong>End Function</strong>Explicação do código acima:
- Vamos dimensionar:
- as variáveis “nome”, “email”, “área” como sendo do tipo String (texto)
- as variáveis “dataNasc”, “dataContra” como sendo do tipo Date (data)
- as variáveis “salIni” e “salAtual” com sendo do tipo Double (número com casa decimal)
- a variável “cpf” como sendo do tipo LongLong (número muito grande)
- Para entender melhor sobre os tipos de dados no VBA, visite esse link oficial
- Declarar uma função pública chamada “calcIdade”, que não terá nenhum argumento, com resposta dada como um número do tipo Long (número grande)
- Dentro dessa function, vamos executar os seguintes passos:
- Declarar a variável “idade” como um número do tipo Long
- A variável “idade” vai receber o que for resultado da fórmula que vai arredondar para baixo a conta que vai gerar a sua idade em número inteiro (sem vírgulas)
- Gerar uma MsgBox que vai dizer idade do funcionário, apontados respectivamente pelas variáveis “idade” e “nome”
<strong>Public Function calcTempoContrat() As Long</strong><br><br><strong> Dim diasContrat As Long</strong><br><br><strong> diasContrat = Date - dataContra</strong><br><br><strong> MsgBox ("O funcionário " & nome & " foi contratado há " & diasContrat & " dias.")</strong><br><br><strong>End Function</strong>Explicação do código acima:
- Declarar uma função pública chamada “calcTempoContrat”, que não terá nenhum argumento, com resposta dada como um número do tipo Long (número grande)
- Dentro dessa function, vamos executar os seguintes passos:
- Declarar a variável “diasContrat” como um número do tipo Long
- A variável “diasContrat” vai receber o que for resultado da fórmula que vai fazer a subtração entre a data atual (dada pela função Date) e a a variável “dataContra”, que é uma variável conhecida do módulo de classe
- Gerar uma MsgBox que vai dizer o nome do funcionário e há quantos dias está contratado, apontados respectivamente pelas variáveis “nome” e “diasContrat”
<strong> </strong><strong>Public Function alterarArea(novaArea As String)</strong><br><br><strong> Dim areaAntiga As String</strong><br><br> <strong> areaAntiga = area</strong><br><strong> area = novaArea</strong><br><strong> Cells(2, 4).Value = area</strong><br><br><strong> MsgBox ("O funcionario " & nome & " mudou da área '" & areaAntiga & "' para a área '" & area & "'.")</strong><br><br><strong>End Function</strong>Explicação do código acima:
- Declarar uma função pública chamada “alterarArea”, que terá a variável “novaArea” como argumento, que será uma variável do tipo String (texto)
- Dentro dessa function, vamos executar os seguintes passos:
- Declarar a variável “areaAntiga” como sendo do tipo String (texto)
- A variável “areaAntiga” vai receber o que estiver na variável área (que já é uma variável conhecida do módulo de classe)
- A variável conhecida do módulo de classe “area” vai receber o valor da variável que foi passada pela function, a “novaArea”
- A célula da 2ª linha, da 4ª coluna (célula D2) vai receber o valor que estiver na variável “area”
- Gerar uma MsgBox que vai dizer o nome do funcionário, a área antiga e a área nova, apontados respectivamente pelas variáveis “nome”, “areaAntiga” e “area”
<strong>Public Function aumentoSalario(aumentoPerc As Double)</strong><br><br><strong> Dim novoSalario As Double</strong><br><br><strong> novoSalario = Round(salAtual * (1 + aumentoPerc), 0)</strong><br><br><strong> salAtual = novoSalario</strong><br><strong> Cells(2, 8).Value = salAtual</strong><br><br><strong> MsgBox ("O novo salário do funcionario " & nome & " é de " & Format(salAtual, "R$ #,##0.00"))</strong><br><br><strong>End Function</strong>Explicação do código acima:
- Declarar uma função pública chamada “aumentoSalario”, que terá a variável “aumentoPerc” como argumento, que será uma variável do tipo Double (possibilidade de número decimal, com vírgula)
- Dentro dessa function, vamos executar os seguintes passos:
- Declarar a variável “novoSalario” como sendo do tipo Double
- A variável “novoSalario” vai receber o que for resultante do arredondamento com 0 casas da multiplicação da variável “salAtual” (que já é uma variável conhecida do módulo de classe) por (1+ aumentoPerc).
- A variável “salAtual” vai receber o valor da variável “novoSalario”, calculada anteriormente
- A célula da linha 2 e coluna 8 vai receber o valor da variável “salAtual”, depois do cálculo
- Gerar uma MsgBox que vai dizer o nome do funcionário e o novo salário, apontados respectivamente pelas variáveis “nome” e “salAtual”, formatada para moeda
Inserindo um Módulo no VBA
Para criar um código dentro de um módulo, precisamos primeiramente abrir o ambiente de VBA, a partir do atalho do teclado Alt(+Fn)+F11.
Como não temos nenhum módulo destinado ao tema da aula de hoje, e por questão de organização, vamos criar um módulo à parte.
Vamos na guia Inserir > Módulo, e uma caixa branca se abrirá.

Por padrão ele terá o nome de “Módulo 1”.
Colocaremos a seguinte sub dentro dele:
<strong>Option Explicit</strong><br><br><strong>Sub macroClasses()</strong><br><br><strong>Dim funcionario As New classeFuncionario</strong><br><br><strong>funcionario.nome = Cells(2, 1).Value</strong><br><strong>funcionario.email = Cells(2, 2).Value</strong><br><strong>funcionario.dataNasc = Cells(2, 3).Value</strong><br><strong>funcionario.area = Cells(2, 4).Value</strong><br><strong>funcionario.dataContra = Cells(2, 5).Value</strong><br><strong>funcionario.cpf = Cells(2, 6).Value</strong><br><strong>funcionario.salIni = Cells(2, 7).Value</strong><br><strong>funcionario.salAtual = Cells(2, 8).Value</strong><br><br><strong>funcionario.calcIdade</strong><br><strong>funcionario.calcTempoContrat</strong><br><strong>funcionario.alterarArea "Financeiro"</strong><br><strong>funcionario.aumentoSalario 0.15</strong><br><br><strong>End Sub</strong>Explicação do código acima:
- A primeira linha diz que que todas as variáveis utilizadas no código serão obrigatoriamente declaradas. Observe que isso é algo que é colocado fora da estrutura das nossas subs (vem antes do começo da Sub, de fato)
- Vamos dimensionar:
- A variável “funcionario” como um novo objeto da “classeFuncionario”, assumindo assim todas as propriedades e métodos (funções) criadas dentro dela
- A propriedade “nome” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 1ª coluna
- A propriedade “email” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 2ª coluna
- A propriedade “dataNasc” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 3ª coluna
- A propriedade “area” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 4ª coluna
- A propriedade “dataContra” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 5ª coluna
- A propriedade “cpf” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 6ª coluna
- A propriedade “salIni” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 7ª coluna
- A propriedade “salAtual” do objeto “funcionario” vai receber o valor que estiver na célula da 2ª linha e 8ª coluna
- Vamos utilizar do método/função “calcIdade” do objeto “funcionario”, que foi a function criada e explicada anteriormente
- Vamos utilizar do método/função “calcTempoContrat” do objeto “funcionario”, que foi a function criada e explicada anteriormente
- Vamos utilizar do método/função “alterarArea” do objeto “funcionario”, que foi a function criada e explicada anteriormente, passando para ela o argumento “Financeiro”, que assumirá o valor da variável “novaArea” da função
- Vamos utilizar do método/função “aumentoSalario” do objeto “funcionario”, que foi a function criada e explicada anteriormente, passando para ela o argumento “Financeiro”, que assumirá o valor da variável “aumentoPerc” da função
No começo do código temos o seguinte cenário:

Ao final do código, teremos os valores pesquisados mostrados nas MsgBox, e no Excel:

Perguntas frequentes
1. Como criar um módulo de classe no VBA?
Abra o editor com Alt+F11, vá em Inserir, Módulo de classe, e uma janela em branco aparece com o nome padrão Classe1. Renomeie a classe para algo descritivo, como classeFuncionario, e escreva dentro dela as propriedades públicas e as funções que o objeto vai oferecer.
2. Qual a diferença entre módulo e módulo de classe no VBA?
O módulo comum guarda as macros que você executa, as subs e funções do dia a dia. O módulo de classe define um modelo de objeto: quais informações ele armazena, nas propriedades, e o que ele sabe fazer, nos métodos. O módulo comum cria o objeto a partir desse modelo e o utiliza.
3. Como usar as propriedades e funções de uma classe em uma macro?
Declare o objeto com Dim funcionario As New classeFuncionario. Depois preencha as propriedades, como funcionario.nome = Cells(2, 1).Value, e chame os métodos escrevendo funcionario.calcIdade ou funcionario.aumentoSalario 0.15. O ponto após o nome do objeto lista tudo o que a classe disponibiliza.
4. Como reaproveitar uma classe em outra planilha?
Clique com o botão direito sobre a classe no Project Explorer e escolha exportar arquivo, gerando um arquivo .cls. Em outro projeto, importe esse arquivo ou arraste-o para dentro do editor do VBA. A classe fica disponível na hora, sem precisar reescrever propriedades e funções.
Conclusão dos Módulos de Classe no VBA
Nessa aula você lidou com os seguintes conceitos:
- Tipos de dados no VBA
- Como usar classes no VBA
- Organização de código em VBA com classes
- Criar objetos no VBA
Até o próximo post! Fique ligado no nosso canal do Youtube para mais conteúdo de VBA toda semana! Valeu, Impressionadores!
Hashtag Treinamentos
Para acessar outras publicações de VBA, clique aqui!

