Subprocedimentos

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

    É recomendável ler a página procedimentos antes de continuar.

    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.

    O botão Editar é bastante útil quando você tem muitos módulos e muitos subprocedimentos: basta clicar nele que o VBE abrirá a janela de código com o cursor de inserção de texto dentro do subprocedimento escolhido.

    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:

    Vale lembrar que apenas procedimentos do tipo subprocedimento são mostrados nessa lista. Além disso, os subprocedimentos não podem possuir argumentos e devem ser públicos. Esses conceitos serão discutidos nas seções posteriores.

    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.

    Um procedimento pode chamar a si mesmo numa técnica chamada Recursão. Se quiser saber mais sobre recursão, veja recursao (em breve).

    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.

Sobre Felipe Gualberto

Microsoft Most Valuable Professional (MVP) de Excel.
Esta entrada foi publicada em Tutoriais e marcada com a tag , , , , , , , . Adicione o link permanente aos seus favoritos.