VBA – Procedimentos Private vs Public (Subs e Funções)

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on September 14, 2023

Este tutorial explicará a diferença entre as declarações públicas e privadas no VBA e como especificar módulos como privados.

Subprocedimentos Públicos vs. Privados

Os procedimentos (Sub e Funções) podem ser declarados como privados ou públicos no VBA. Se forem públicos (Public), isso significa que você poderá vê-los na janela de macro do Excel e eles poderão ser chamados de qualquer lugar do projeto VBA. Se forem privados (Private), não poderão ser vistos na janela de macro do Excel e só estarão disponíveis para uso no módulo em que foram declarados (usando métodos normais; consulte o final deste artigo para saber como acessar procedimentos privados de outros módulos).

As funções públicas podem ser chamadas como funções internas do Excel na planilha do Excel.

Observação: As variáveis e as constantes também podem ser públicas ou privadas.

Janela de Macro do Excel

Por padrão, as macros do Excel (a maioria dos procedimentos VBA) ficam visíveis para os usuários da pasta de trabalho na janela Macro:

janela de macro exemplo

Esses são considerados procedimentos Públicos. Você pode definir explicitamente os procedimentos como públicos adicionando “Public” antes da instrução Sub:

Public Sub OlaMundo()
   MsgBox "Olá Mundo"
End Sub

Se você não definir o procedimento como público, ele será considerado público.

Para declarar um procedimento como privado, basta adicionar “Private” antes da instrução Sub do procedimento:

Private Sub OlaPessoal()
   MsgBox "Olá Pessoal"
End Sub

O segundo procedimento não seria visível na janela Macro para os usuários do Excel, mas ainda pode ser usado no seu código VBA.

private fora lista macro

Procedimentos com Argumentos

Os procedimentos secundários podem ter argumentos. Os argumentos são entradas para o subprocedimento:

Sub Ola(strNome as string)
   MsgBox "Olá " & strName
End Sub

Se um subprocedimento tiver argumentos, ele nunca aparecerá na janela Macro, independentemente de ter sido declarado como Público, pois não há como declarar os argumentos.

As funções também nunca aparecerão na janela de macro, independentemente de serem declaradas públicas

casos fora da lista macro

As funções públicas no Excel podem ser usadas diretamente em uma planilha como uma “Função definida pelo usuário” (UDF). Trata-se basicamente de uma fórmula personalizada que pode ser chamada diretamente em uma planilha. Elas podem ser encontradas na categoria “Definido pelo Usuário” na janela “Inserir função” ou podem ser digitadas diretamente em uma célula.

janela inserir funcao

Uso de Procedimentos entre Módulos em seu Projeto VBA

Os procedimentos públicos podem ser chamados de qualquer módulo ou formulário em seu projeto VBA.

chamada de outro modulo

A tentativa de chamar um procedimento privado de um módulo diferente resultará em um erro (Observação: consulte o final deste artigo para obter uma solução alternativa).

funcao nao definida

Observação: os procedimentos e as variáveis públicas nos módulos de classe têm um comportamento ligeiramente diferente e estão fora do escopo deste artigo.

Módulos diferentes podem armazenar procedimentos com o mesmo nome, desde que ambos sejam privados.

Se dois ou mais procedimentos tiverem o mesmo nome e forem declarados públicos, você receberá um erro de compilação “Nome repetido encontrado” ao executar o código.

nome repetido encontrado

Módulos Privados

Por padrão, os módulos são públicos.

Para tornar um módulo privado, você deve colocar a seguinte palavra-chave na parte superior do módulo:

Option Private Module

Se você declarar um módulo como privado, os procedimentos do módulo não serão visíveis para os usuários do Excel. Os procedimentos de função não aparecerão na janela Inserir função, mas ainda poderão ser usados na planilha do Excel, desde que o usuário saiba o nome da função!

modulo privado lista funcoes

Os subprocedimentos não aparecerão na janela Macro, mas ainda estarão disponíveis para serem usados no projeto VBA.

Acesso a um Procedimento Privado de um Módulo Diferente

Conforme mencionado acima, os procedimentos privados são inacessíveis em outros módulos de código por métodos “normais”. No entanto, é possível acessar procedimentos privados usando o comando Application.Run disponível no VBA.

Considere os três módulos a seguir:

private public modulos diferentes

O Módulo 2 é um módulo privado com um subprocedimento público, enquanto o Módulo 3 é um módulo público com um subprocedimento privado.

No Módulo1, podemos chamar OlaMundo – a opção Private Module na parte superior não nos impede de chamar o Subprocedimento – tudo o que ela faz é ocultar o Subprocedimento na janela de macro.

Também não precisamos da instrução Call – ela está lá para facilitar a leitura do código.

O código também poderia ter a aparência abaixo.

Sub ChamarOlaDoPrivado()
'Chama uma sub do Módulo Privado
   OlaMundo
End Sub

Também podemos executar o subprocedimento OlaMundo usando o comando Application.Run do VBA.

No Módulo 3, entretanto, o procedimento BomDiaMundo foi declarado Private. Não é possível chamá-lo de outro módulo usando meios “normais”, ou seja, a instrução Call.

É necessário usar o comando Application.Run para executar uma Sub Privada de outro módulo.

Sub ChamarBomDia()
'executa uma Sub Privada do módulo público
   Application.Run ("BomDiaMundo")
End Sub

Observe que, quando você usa o comando Application.Run, é necessário colocar o nome do subprocedimento entre aspas.

Se tentarmos usar a instrução Call para executar o subprocedimento BomDiaMundo, ocorrerá um erro.

bom dia mundo erro compilacao

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA