Esta página explica o primeiro tipo de procedimento, que são os subprocedimentos.
- Introdução
- Executar um Subprocedimento
- Depurar um Subprocedimento
- Atribuir uma Tecla de Atalho a um Subprocedimento
- Barra de Ferramentas de Acesso Rápido
- Procedimento Chamando Outro Procedimento
Introdução
Subprocedimentos (ou macros, subrotinas, rotinas, sub) são procedimentos que executam alguma ação. Eles podem ser chamados (isto é, executados) explicitamente por uma ação direta do usuário, por um botão do aplicativo, pela interface da Faixa de Opções do aplicativo, por outro procedimento e várias outras formas.
O prefixo de declaração que você deve usar num subprocedimento é a palavra-chave Sub
.
Suponha que você queira criar dois procedimentos: um que preencha dados em células numa planilha e outro que formate as células. Você poderia, nesse caso, criar um subprocedimento para fazer cada uma dessas ações. Um nome adequado ao primeiro seria FillData
e ao segundo, FormatData
:
Sub FillData() Range("A1").Value = "Olá" Range("A2").Value = "Mundo!" End Sub Sub FormatData() Range("A1").Font.Bold = True Range("A2").Interior.ColorIndex = 27 End Sub
Executar um Subprocedimento
VBE
Para executar um subprocedimento, posicione o cursor de inserção de texto entre o início e o fim do subprocedimento desejado e pressione a tecla F5 (ou clique no ícone verde Play, que pode ser visto na Barra de Ferramentas do VBE). Então, execute primeiramente o procedimento FillData
e depois FormatData
e veja o resultado numa planilha a seguir (saia do VBE):
Janela do Excel
Você pode executar macros fora do VBE. Para tal, vá à janela inicial do seu aplicativo e então pressione Alt+F8. Será mostrada uma janela de todos os subprocedimentos que você pode executar de todos os projetos abertos no seu aplicativo. Se na sessão do seu aplicativo tiver muitos documentos abertos e seus projetos apresentarem grande número de subprocedimentos de forma a encher a caixa de listagem, você pode filtrar quais subprocedimentos quer listar alterando a caixa de combinação Macros em.
Para executar um subprocedimento, clique sobre ele e, em seguida, Executar:
Volte ao VBE e, na janela de código, clique sobre uma linha que esteja fora de ambos os procedimentos e, então, pressione F5. Você verá novamente a janela mostrada acima. Isso aconteceu porque nesse caso o VBE não sabe qual subprocedimento você quer executar e então ele usa essa janela para você decidir qual ação tomar.
Se você tiver subprocedimentos com o mesmo nome, mas em módulos diferentes no mesmo projeto, essa mesma janela acrescenta o nome do módulo antes do nome de cada subprocedimento repetido, na sintaxe módulo.subprocedimento. No exemplo abaixo, temos dois subprocedimentos chamados GerarRelatório
: um no módulo mdlDespesas
e outro no módulo mdlProventos
:
O termo técnico da representação de um item mostrando seus precursores é qualificação. No exemplo, podemos dizer que os procedimentos GerarRelatório
estão qualificados pelos seus respectivos módulos.
Se você tiver vários projetos abertos e o nome de alguns módulos e/ou subprocedimentos repetir, essa qualificação poderá ser mais específica, mostrando também de qual documento um subprocedimento faz parte:
Observe que o nome do documento (Diretoria.xlsm ou Contabilidade.xlsm), sempre são o nível mais alto e se separam do nome de um subprocedimento ou módulo com um ponto de exclamação. O VBE qualifica os subprocedimentos na forma arquivo!subprocedimento se o módulo desses subprocedimentos possuírem nomes diferentes ou arquivo!modulo.subprocedimento, se o nome dos módulos for igual. A lista é classificada pelo nome dos subprocedimentos, não importando o nome dos módulos e nem dos documentos.
A forma da janela de macros qualificar os subprocedimentos depende de qual documento está ativo no aplicativo. Por exemplo, se você ativar a pasta de trabalho Contabilidade.xlsm e exibir a janela de macros, o VBE ocultará os qualificadores Contabilidade.xlsm! de seus subprocedimentos pois assume que você sabe que esses subprocedimentos são parte do documento ativo:
Voltando ao VBE, se nesse ambiente você exibir a janela de macros, perceberá que duas diferenças do comportamento da janela de macros do aplicativo:
- Quando necessário, o qualificador de documento dos subprocedimentos são substituídos pelo nome do projeto do documento, assumindo a forma projeto.módulo.subprocedimento;
- No filtro Macros em não é possível listar os subprocedimentos de todos os projetos de uma vez.
A figura abaixo mostra essas diferenças:
Depurar um Subprocedimento
Muitas vezes, enquanto estamos em modo de design, fazemos vários testes e estudos antes de termos segurança que a execução do programa seja satisfatória. A depuração é um tipo de execução parcial ou passo a passo de um programa com o objetivo de reduzir defeitos e/ou consertar resultados inesperados.
Para depurar um subprocedimento, pressione a tecla F8 dentro dele. Você também pode depurar usando o guia Depurar >> Depuração total ou clicar em Depurar na Janela de Macros do aplicativo.
Nesse modo, você visualizará passo a passo a execução de seu programa, já que o VBE indica a próxima linha que executará colorindo seu fundo de amarelo:
Para executar a próxima linha de sua rotina, basta pressionar F8 novamente. Faça isso até alcançar a última linha do procedimento, até não haver mais nenhuma linha amarela, caracterizando o término do programa e voltando o VBE ao modo de design.
Atribuir uma Tecla de Atalho a um Subprocedimento
Uma forma prática de executar um subprocedimento é atribuir uma tecla de atalho a ele. Para exemplificar essa funcionalidade, crie o subprocedimento a seguir para Excel:
Sub pFormataçãoLegal() Selection.Interior.ColorIndex = 24 Selection.Font.Italic = True Selection.BorderAround LineStyle:=xlContinuous End Sub
Na Janela de Macros clique no botão Opções:
Você verá a janela abaixo:
Nesse exemplo, atribuí Ctrl+q para um subprocedimento chamado Main
. A caixa de texto Descrição é opcional, mas você pode preenchê-la se quiser criar um breve descritivo de suas macros. Isso pode ser útil se outras pessoas utilizam suas macros e seu projeto está protegido.
Barra de Ferramentas de Acesso Rápido
Você pode também criar um botão para executar uma macro pela Barra de Ferramentas de Acesso Rápido. Para tal, primeiro clique no ícone para personalizar a Barra de Ferramentas de Acesso Rápido >> Mais Comandos:
Em seguida, na caixa de combinação Escolher comandos em, selecione Macros:
A lista de subprocedimentos públicos será mostrada. Dê dois cliques no item que deseja acrescentar e verá que ele será acrescentado à lista da direita. Em seguida, clique em OK:
Veja como deverá ficar o layout do seu aplicativo. Com um clique, você poderá executar a macro:
Procedimento Chamando Outro Procedimento
Um procedimento pode chamar outro procedimento. Veja o código abaixo:
Sub Main() Introdução Formatar Despedir End Sub Sub Introdução() MsgBox "Programa de teste de chamada de subprocedimentos." MsgBox "Pressione OK para iniciar a formatação." End Sub Sub Formatar() PovoaDados FormataDados End Sub Sub Despedir() MsgBox "Tchau!" End Sub Sub PovoaDados() Range("A1").Value = "Olá" Range("A2").Value = "Mundo!" End Sub Sub FormataDados() Range("A1").Font.Bold = True Range("A2").Interior.ColorIndex = 27 End Sub
Veja que é fácil de deduzir que Main
é um programa piloto que chama outros procedimentos. A sequência de chamadas dos subprocedimentos é Main
>> Introdução
>> Formatar
>> PovoaDados
>> FormataDados
>> Despedir
.
Para testar esse exemplo, execute Main
. Sugiro que depure (F8) Main
, dessa forma, você poderá ver os saltos de procedimentos na execução do código.
Note os saltos que o cursor de depuração sofre. A execução do programa só termina quando se alcança a última linha do procedimento chamado no primeiro nível. Perceba que quando as instruções de End Sub
dos subprocedimentos filhos são alcançadas, a instrução seguinte a ser executada é a próxima linha do procedimento que o chamou.
Você pode usar também a palavra-chave opcional Call
antes do nome de um procedimento para chamá-lo. O subprocedimento abaixo é equivalente ao exemplo anterior:
Sub Main() Call Introdução Call Formatar Call Despedir End Sub
Call
pode ser usado para lembrar o programador que o procedimento a ser chamado é de VBA, e não um comando interno do VBA. Não use Call
. É uma palavra chave obsoleta que dificulta a leitura do código.
Pilha de Chamadas
Uma forma interessante de visualizar a sequência de chamadas de procedimentos é através da Pilha de Chamadas. Clique aqui para saber mais sobre pilha de chamadas.
Deixar um comentário
Você precise estar logged in para postar um comentário.