Sub-rotina Excel VBA: como chamar Sub em VBA com exemplo

โšก Resumo Inteligente

Em VBA, uma sub-rotina agrupa um bloco de cรณdigo que executa uma tarefa sem retornar um valor. Esta pรกgina aborda regras de nomenclatura, sintaxe de sub-rotinas, como chamar uma sub-rotina a partir de um botรฃo de comando e como uma sub-rotina difere de uma funรงรฃo.

  • ๐Ÿ“ฆ Definiรงรฃo: Uma sub-rotina executa uma tarefa especรญfica e nรฃo retorna nenhum valor para o cรณdigo que a chamou.
  • โ™ป๏ธ Reutilizaรงรฃo: Uma sub-rotina pode ser chamada vรกrias vezes de qualquer lugar do projeto.
  • ๐Ÿ”ค Regras de nomenclatura: Um nome nรฃo contรฉm espaรงos, comeรงa com uma letra ou sublinhado e nunca รฉ uma palavra-chave VBA.
  • ๐Ÿงพ Sintaxe: Private Sub name(ByVal arg As String) abre o bloco e End Sub o fecha.
  • ๐Ÿ–ฑ๏ธ Ligando: O evento Click de um botรฃo de comando chama a sub-rotina e passa seus argumentos.
  • โ–ถ ๏ธ Executando diretamente: A tecla F5, a caixa de diรกlogo Macros ou a palavra-chave Call executam uma sub-rotina sem a necessidade de um botรฃo.
  • ๐Ÿ” Subordinaรงรฃo ou funรงรฃo: Escolha uma funรงรฃo quando um valor precisar ser retornado; caso contrรกrio, escolha uma sub-rotina.

Sub-rotina Excel VBA

O que รฉ uma sub-rotina no VBA?

A Sub-rotina em VBA รฉ um trecho de cรณdigo que executa uma tarefa especรญfica descrita no cรณdigo, mas nรฃo retorna um resultado ou valor. As sub-rotinas sรฃo usadas para dividir grandes pedaรงos de cรณdigo em pequenas partes gerenciรกveis. As sub-rotinas podem ser recuperadas vรกrias vezes em qualquer lugar do programa.

Digamos que vocรช criou uma interface de usuรกrio com caixas de texto para aceitar dados de entrada do usuรกrio. Vocรช pode criar uma sub-rotina que limpe o conteรบdo das caixas de texto. Uma sub-rotina de chamada VBA รฉ apropriada nesse cenรกrio porque vocรช nรฃo deseja retornar nenhum resultado.

Por que usar sub-rotinas

  • Divida o cรณdigo em um pequeno cรณdigo gerenciรกvel: Um programa de computador mรฉdio possui milhares e milhares de linhas de cรณdigo-fonte. Isso introduz complexidade. As sub-rotinas ajudam a resolver esse problema, dividindo o programa em pequenos pedaรงos de cรณdigo gerenciรกveis.
  • Code capacidade de reutilizaรงรฃo. Digamos que vocรช tenha um programa que precisa acessar o banco de dados, quase todas as janelas do programa precisarรฃo interagir com o banco de dados. Em vez de escrever cรณdigo separado para essas janelas, vocรช pode criar uma funรงรฃo que lide com todas as interaรงรตes do banco de dados. Vocรช pode entรฃo chamรก-lo de qualquer janela que desejar.
  • Sub-rotinas e funรงรตes sรฃo autodocumentadas. Digamos que vocรช tenha uma funรงรฃo calculaLoanInterest e outra que diz connectToDatabase. Apenas olhando o nome da sub-rotina/funรงรฃo, o programador serรก capaz de dizer o que o programa faz.

Antes de escrever um nome, o compilador espera que ele siga um pequeno conjunto de regras.

Regras de nomenclatura de sub-rotinas e funรงรตes

Para usar sub-rotinas e funรงรตes, existem um conjunto de regras que devem ser seguidas.

  • Uma sub-rotina ou nome de funรงรฃo de chamada VBA nรฃo pode conter espaรงo
  • Uma subchamada VBA do Excel ou nome de funรงรฃo deve comeรงar com uma letra ou sublinhado. Nรฃo pode comeรงar com um nรบmero ou caractere especial
  • Uma sub-rotina ou nome de funรงรฃo nรฃo pode ser uma palavra-chave. Uma palavra-chave รฉ uma palavra que tem um significado especial em VBA. Palavras como Private, Sub, Function e End, etc. sรฃo exemplos de palavras-chave. O compilador os utiliza para tarefas especรญficas.

Com um nome vรกlido escolhido, a prรณpria declaraรงรฃo segue um padrรฃo fixo.

Sintaxe de sub-rotina VBA

Vocรช precisarรก habilitar a guia Desenvolvedor no Excel para acompanhar este exemplo. Se vocรช nรฃo sabe como ativar a guia Desenvolvedor, leia o tutorial em Controles VBA no Excel

AQUI na sintaxe,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Explicaรงรฃo da sintaxe

Code Aรงรฃo
  • โ€œSub privada minhaSubRoutine(โ€ฆ)โ€
  • Aqui a palavra-chave โ€œSubโ€ รฉ usada para declarar uma sub-rotina chamada โ€œmySubRoutineโ€ e iniciar o corpo da sub-rotina.
  • A palavra-chave Private รฉ usada para especificar o escopo da sub-rotina
  • โ€œByVal arg1 como string, ByVal arg2 como stringโ€:
  • Ele declara dois parรขmetros de tipo de dados string nome arg1 e arg2
  • โ€œFim Subโ€
  • โ€œEnd Subโ€ รฉ usado para finalizar o corpo da sub-rotina

A sub-rotina a seguir aceita o nome e o sobrenome e os exibe em uma caixa de mensagem.

Agora vamos programar e executar este Subprocedimento. Vamos ver isso.

Como chamar Sub em VBA

Abaixo estรก um processo passo a passo sobre como chamar Sub em VBA:

  1. Projete a interface do usuรกrio e defina as propriedades dos controles do usuรกrio.
  2. Adicione a sub-rotina
  3. Escreva o cรณdigo do evento de clique para o botรฃo de comando que chama a sub-rotina
  4. Teste o aplicativo

Passo 1) Interface de Usuรกrio

Projete a interface do usuรกrio conforme mostrado na imagem abaixo.

Como chamar Sub em VBA

Defina as seguintes propriedades. As propriedades que estamos definindo:

S / N Controlar Propriedade Valor
1 BotรฃoComando1 Nome btnDisplayFullName
2 Subtรญtulo Sub-rotina de nome completo

Sua interface agora deve ter a seguinte aparรชncia.

Como chamar Sub em VBA

Passo 2) Adicionar sub-rotina

  1. Pressione Alt + F11 para abrir a janela de cรณdigo
  2. Adicione a seguinte sub-rotina
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

AQUI no cรณdigo,

Code Aรงรฃo
  • โ€œSub display privadoFullName(โ€ฆ)โ€
  • Ele declara uma sub-rotina privada displayFullName que aceita dois parรขmetros de string.
  • โ€œByVal primeiro nome como string, ByVal sobrenome como stringโ€
  • Ele declara duas variรกveis โ€‹โ€‹de parรขmetro firstName e lastName
  • MsgBox primeiro nome, ultimo nome"
  • Ele chama a mensagemBox funรงรฃo interna para exibir uma caixa de mensagem. Em seguida, passa as variรกveis โ€‹โ€‹'firstName' e 'lastName' como parรขmetros.
  • O e comercial โ€œ&โ€ รฉ usado para concatenar as duas variรกveis โ€‹โ€‹e adicionar um espaรงo vazio entre elas.

Passo 3) Chamando a sub-rotina

Chamar a sub-rotina a partir do evento de clique do botรฃo de comando.

  • Clique com o botรฃo direito do mouse no botรฃo de comando, conforme mostrado na imagem abaixo. Selecione Exibir. Code.
  • O editor de cรณdigo serรก aberto

Como chamar Sub em VBA

Adicione o seguinte cรณdigo no editor de cรณdigo para o evento click do botรฃo de comando btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

Sua janela de cรณdigo agora deve ter a seguinte aparรชncia

Como chamar Sub em VBA

Salve as alteraรงรตes e feche a janela de cรณdigo.

Passo 4) Testando o cรณdigo

Na barra de ferramentas do desenvolvedor, desative o modo de design. Como mostrado abaixo.

Como chamar Sub em VBA

Passo 5) Clique no botรฃo de comando 'Sub-rotina FullName'.

Vocรช obterรก os seguintes resultados

Como chamar Sub em VBA

Baixe a planilha do Excel acima. Code

Um botรฃo รฉ conveniente, mas nรฃo รฉ a รบnica maneira de iniciar uma sub-rotina e, durante o desenvolvimento, raramente รฉ a mais rรกpida.

Como executar uma sub-rotina sem um botรฃo

Enquanto vocรช ainda estรก escrevendo o cรณdigo, adicionar um controle ร  planilha apenas para testar uma sub-rotina รฉ uma perda de tempo. O VBA oferece quatro outras maneiras de executar uma sub-rotina, e cada uma delas se adequa a um momento diferente do ciclo de desenvolvimento.

  • Pressione F5 no editor: Posicione o cursor em qualquer lugar dentro da Sub e pressione F5. Ela serรก executada imediatamente. Isso sรณ funciona quando a Sub nรฃo recebe argumentos, pois o VBA nรฃo possui valores para serem fornecidos.
  • Avance com F8: A mesma execuรงรฃo, linha por linha, para que vocรช possa observar a alteraรงรฃo de cada variรกvel na janela "Locais". Use este recurso quando um resultado estiver incorreto e vocรช precisar identificar a causa.
  • Utilize a caixa de diรกlogo Macros: Na guia Desenvolvedor, clique em Macros, selecione o nome e clique em Executar. Somente Subs pรบblicas sem argumentos aparecem nesta lista, razรฃo pela qual uma Sub auxiliar geralmente รฉ declarada como Privada.
  • Chame isso de outro Sub: Este รฉ o mรฉtodo usado para qualquer Sub que receba argumentos, e รฉ aquele em que o botรฃo de comando acima se baseia.

A รบltima opรงรฃo possui duas formas aceitas. Escrever o nome seguido dos argumentos bรกsicos funciona, assim como usar a palavra-chave `Call` explicitamente, mas a regra dos colchetes difere entre elas.

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Ambas as linhas fazem exatamente a mesma coisa. Misturar as duas formas, escrevendo colchetes sem a palavra-chave `Call`, รฉ a causa mais comum do erro de compilaรงรฃo "Expected: =" quando uma `Sub` recebe mais de um argumento.

Diferenรงa entre uma Sub e uma Funรงรฃo em VBA

Sub e Function sรฃo os dois tipos de procedimento em VBA, e iniciantes frequentemente escolhem o errado. A questรฃo decisiva รฉ simples: o cรณdigo que chama o procedimento precisa de um valor de retorno?

Caracterรญstica Sub funรงรฃo
Retorna um valor Nรฃo Sim, atribuรญdo ao nome da funรงรฃo
Declarado com Subโ€ฆ Fim Sub Funรงรฃo โ€ฆ Funรงรฃo final
Chamado como Uma declaraรงรฃo em sua prรณpria linha Parte de uma expressรฃo, por exemplo x = myFunc(2)
Pode ser usado em uma cรฉlula da planilha. Nรฃo Sim, como uma funรงรฃo definida pelo usuรกrio.
Uso tรญpico Formatar uma planilha, limpar entradas, exibir uma mensagem Calcular um total, converter um valor, pesquisar dados

Use uma Sub quando o cรณdigo atuar na planilha e uma Funรงรฃo VBA Quando o cรณdigo produz uma resposta que outra coisa consome.

Perguntas Frequentes

Uma Subprivada sรณ pode ser chamada de dentro do mรณdulo que a declara. Uma Subpรบblica รฉ visรญvel para todos os mรณdulos do projeto e รฉ o รบnico tipo que aparece na caixa de diรกlogo Macros.

ByVal passa uma cรณpia, portanto a sub-rotina nรฃo pode alterar a variรกvel do chamador. ByRef passa a prรณpria variรกvel, portanto qualquer alteraรงรฃo รฉ visรญvel para o chamador. ByRef รฉ o padrรฃo quando nenhuma das palavras-chave รฉ usada.

Use a instruรงรฃo Exit Sub. Ela interrompe o procedimento nesse ponto e retorna o controle para quem o chamou, o que รฉ รบtil para sair prematuramente quando um teste de validaรงรฃo falha.

Sim. Cole a macro e um assistente de IA agruparรก as linhas relacionadas, sugerirรก um nome descritivo para cada nova Sub e reescreverรก a original como uma pequena sequรชncia de chamadas. Teste o resultado em uma cรณpia da planilha.

Sim. Forneรงa o texto do erro e a linha de chamada, e um assistente de IA identificarรก as causas, como colchetes usados โ€‹โ€‹sem a palavra-chave `Call`, uma contagem incorreta de argumentos ou um tipo de dados incompatรญvel, e entรฃo fornecerรก a linha corrigida.

Resuma esta postagem com: