Editando Macros VBA do Excel

Trabalhando com macros VBA do Excel

As macros no Excel são armazenadas como código VBA e, às vezes, você pode querer editar esse código diretamente. Este tutorial cobrirá como visualizar e editar macros, descrever algumas técnicas de depuração de macro e fornecer alguns exemplos de edição comuns.

Ver Macros

Uma lista de macros pode ser exibida na caixa de diálogo Macros. Para visualizar esta caixa de diálogo, selecione a guia Desenvolvedor na faixa de opções e clique no botão Macros.

Se várias pastas de trabalho estiverem abertas, as macros de todas as pastas de trabalho serão mostradas na lista. As macros na pasta de trabalho ativa aparecerão apenas pelo nome, enquanto as macros em outras pastas de trabalho serão prefixadas pelo nome da pasta de trabalho e um ponto de exclamação (ou seja, “Livro2! OutroMacro”).

Abra uma macro para edição

Você pode usar a caixa de diálogo Macro para abrir o código de uma macro, selecionando o nome da macro e clicando no botão Editar. Isso abrirá a macro no Editor VB.

Como alternativa, você pode abrir o Editor VB diretamente clicando no botão Visual Basic na guia Desenvolvedor ou pressionando o atalho de teclado ALT + F11.

Usando este método, você precisará navegar até a macro desejada (também chamada de ‘procedimento’). Vamos examinar o layout do Editor VBA:

Visão geral do editor VB

O Editor VB possui várias janelas; neste tutorial, cobriremos a janela do projeto, a janela Propriedades e a janela de código.

Janela de Projeto

A janela Projeto mostra cada arquivo Excel como seu próprio projeto, com todos os objetos naquele projeto categorizados por tipo. As macros gravadas aparecerão na categoria "Módulos", usualmente no objeto “Módulo1”. (Se o seu projeto tiver vários Módulos e você não tiver certeza de onde a macro está armazenada, basta abri-la na caixa de diálogo Macros mencionada anteriormente.)

Janela de Propriedades

A janela Propriedades mostra as propriedades e os valores associados de um objeto - por exemplo, clicar em um objeto de planilha na janela Projeto mostrará uma lista de propriedades para a planilha. Os nomes das propriedades estão à esquerda e os valores das propriedades estão à direita.

Selecionar um módulo na janela Projeto mostrará que ele possui apenas uma propriedade, “(Nome)”. Você pode alterar o nome de um módulo clicando duas vezes no valor da propriedade, digitando um novo nome e pressionando Enter. Alterar o nome de um módulo irá renomeá-lo na janela do projeto, o que é útil se você tiver muitos módulos.

Janelas de código

As janelas de código são editores de texto especiais nos quais você pode editar o código VBA de sua macro. Se você quiser ver o código de uma macro localizada no Módulo1, clique duas vezes em 'Módulo1' na janela Projeto.

Executando Macros no Editor VB

As macros podem ser executadas diretamente do Editor VB, o que é útil para teste e depuração.

Executando uma Macro

  • Na janela do projeto, clique duas vezes no módulo que contém a macro que você deseja testar (para abrir sua janela de código)
  • Na janela de código, coloque o cursor em qualquer lugar no código da macro entre "Sub" e "End Sub"
  • Clique no Corre botão na barra de ferramentas ou pressione o atalho de teclado F5

“Percorrer” uma macro

Em vez de executar a macro de uma vez, você pode executar a macro uma linha de cada vez, usando um atalho de teclado para “percorrer” o código. A macro fará uma pausa em cada linha, permitindo que você garanta que cada linha de código faça o que você espera no Excel. Você também pode impedir que uma macro continue a qualquer momento usando este método.

Para “percorrer” uma macro:

  • Na janela do projeto, clique duas vezes no módulo que contém a macro que você deseja testar (para abrir sua janela de código)
  • Na janela de código, coloque o cursor em qualquer lugar no código da macro
  • Pressione o atalho de teclado F8 para iniciar o processo "passo a passo"
  • Pressione F8 repetidamente para avançar a execução do código, indicado pelo destaque amarelo na janela Código
  • Para interromper a continuação de uma macro, pressione o Redefinir botão

Por que editar macros VBA?

O gravador de macro - embora eficaz - também é muito limitado. Em alguns casos, ele produz macros lentas, registra ações que você não pretendia repetir ou registra coisas que você achava que não estava fazendo. Aprender a editar suas macros irá ajudá-las a funcionar com mais rapidez, eficiência e previsibilidade.

Além de corrigir esses problemas, você também obterá um grande aumento na produtividade ao aproveitar todo o poder das macros. As macros não precisam ser apenas gravações de tarefas - as macros podem incluir lógica, de modo que só executam tarefas sob certas condições. Em apenas alguns minutos, você pode codificar loops que repetem uma tarefa centenas ou milhares de vezes de uma vez!

Abaixo, você encontrará algumas dicas úteis para ajudar a otimizar seu código de macro, bem como ferramentas para fazer com que suas macros funcionem mais e de forma mais inteligente.

Exemplos comuns de edição de macro

Acelerar macros

Se você tem uma macro que leva muito tempo para ser executada, pode haver alguns motivos pelos quais ela está sendo executada lentamente.

Por um lado: quando uma macro é executada, o Excel mostrará tudo como acontece em tempo real - embora possa olhar rápido para você, na verdademostrando o trabalho é um impacto significativo no desempenho. Uma maneira de fazer o Excel funcionar muito mais rápido é informando-o para pare de atualizar a tela:

'Desativar atualização de tela Application.ScreenUpdating = False' Ativar atualização de tela Application.ScreenUpdating = Verdadeiro

A linha “Application.ScreenUpdating = False” significa que você não verá a macro funcionando, mas ela será executada muito mais rápido. Observe que você deve sempre definir ScreenUpdating como True no final de sua macro, caso contrário, o Excel pode não agir da maneira que você espera mais tarde!

Outra maneira de acelerar macros:desligue o cálculo automático na macro. Se você trabalhou com planilhas complexas, você saberá que pequenas alterações podem desencadear milhares de cálculos que demoram para serem concluídos, razão pela qual muitas pessoas desativam o cálculo automático nas opções do Excel. Você também pode alternar isso com o código VBA, para que sua macro ainda funcione rapidamente em outros computadores. Isso ajuda nos casos em que você copia e cola muitas células da fórmula ou faz com que muitos cálculos sejam acionados ao colar dados em um intervalo:

'Desativar o cálculo automático Application.Calculation = xlCalculationManual' Ativar o cálculo automático Application.Calculation = xlCalculationAutomatic

Adicionar Loops e Lógica (Declarações If)

O gravador de macro salva todas as suas ações como código em uma linguagem chamada VBA. O VBA é mais do que apenas uma forma de registrar ações no Excel - é uma linguagem de programação, o que significa que pode conter código para tomar decisões sobre quais ações executar ou repetir ações até que uma condição seja atendida.

Looping

Digamos que você queira fazer uma macro que prepare um relatório e, como parte dessa macro, tenha que adicionar dezenove planilhas à pasta de trabalho, para um total de vinte. Você pode gravar a si mesmo clicando no botão (+) continuamente, ou pode escrever um loop que repete a ação para você, como este:

Sub ReportPrep () Dim i As Long For i = 1 a 19 Sheets.Add Next i End Sub

Neste exemplo, usamos um For loop, que é uma espécie de loop que itera por meio de uma variedade de itens. Aqui, nosso intervalo é os números de 1 a 19, usando uma variável chamada ‘i’ para que o loop possa acompanhar. Dentro do nosso loop, há apenas uma ação sendo repetida entre o para epróximo linhas (adição da folha), mas você pode adicionar tanto código dentro do loop quanto quiser para fazer coisas como formatar a folha ou copiar e colar dados em cada folha - o que quiser repetir.

Declarações If

Um Declaração If é usado para decidir se algum código é executado ou não, usando um teste lógico para tomar a decisão. Aqui está um exemplo simples:

Sub ClearIfSmall () If Selection.Value <100 Then Selection.Clear End If End Sub

Este exemplo simples mostra como a instrução If funciona - você testa alguma condição que é Verdadeira ou Falsa (o valor da célula selecionada é menor que 100?), e se o teste retornar True, o código interno será executado.

Uma deficiência desse código é que ele testa apenas uma célula por vez (e falharia se você selecionasse várias células). Isso seria mais útil se você pudesse … percorrer todas as células selecionadas e testar cada uma …

Sub ClearIfSmall () Dim c As Range For Each c In Selection.Cells If c.Value <100 Then c.Clear End If Next c End Sub

Neste exemplo, há um loop For ligeiramente diferente - este não faz um loop por um intervalo de números, mas sim por todas as células na seleção, usando uma variável chamada 'c' para manter o controle. Dentro do loop, o valor de 'c' é usado para determinar se a célula deve ser limpa ou não.

Loops e instruções If podem ser combinados da maneira que você quiser - você pode colocar loops dentro de loops, ou um If dentro de outro, ou usar um If para decidir se um loop deve ser executado.

<<>>

Remover efeitos de rolagem

Um motivo comum para editar o código de macro é remover a rolagem da tela. Ao gravar uma macro, pode ser necessário percorrer outras áreas da planilha, mas as macros não precisam rolar para acessar os dados.

A rolagem pode confundir seu código com centenas ou até milhares de linhas de código desnecessário. Aqui está um exemplo do código que é registrado quando você clica e arrasta na barra de rolagem:

Esse tipo de código é completamente desnecessário e pode ser excluído sem afetar nenhuma outra funcionalidade. Mesmo se você quiser manter a rolagem, esse código ainda pode ser condensado em um loop.

Remova o código redundante

As macros gravadas tendem a adicionar muitos códigos redundantes que não refletem necessariamente o que você deseja que a macro faça. Tome o seguinte código gravado, por exemplo, que registra a alteração do nome de uma fonte em uma célula:

Mesmo que apenas o nome da fonte tenha sido alterado, onze (11) alterações de fonte foram registradas, como o tamanho da fonte, os efeitos do texto, etc. Se a intenção da macro era apenas alterar o nome da fonte (deixando todas as outras propriedades sozinhas) isso a macro gravada não funcionaria!

É possível alterar esta macro para que ela altere apenas o nome da fonte:

Não só essa macro funcionará como pretendido agora, mas também é muito mais fácil de ler.

Remover movimentos do cursor

Outra coisa que é registrada nas macros são as seleções de planilhas e células. Isso é um problema porque um usuário pode facilmente perder o controle do que estava fazendo se o cursor se mover para uma posição diferente após a execução de uma macro.

Tal como acontece com a rolagem, tu pode precisar mover o cursor e selecionar células diferentes para realizar uma tarefa, mas as macros não precisam usar o cursor para acessar os dados. Considere o seguinte código, que copia um intervalo e o cola em três outras planilhas:

Existem alguns problemas com este código:

  • O usuário perderá seu lugar anterior na pasta de trabalho
  • A macro não especifica qual página estamos copiandoa partir de - isso pode ser um problema se a macro foi executada na página errada

Além disso, o código é difícil de ler e desperdiçador. Esses problemas podem ser resolvidos com bastante facilidade:

Neste código, fica claro que estamos copiando da Planilha1, e nem a planilha ativa nem o intervalo selecionado precisam ser alterados para colar os dados. (Uma mudança significativa é o uso de “PasteSpecial” em vez de “Paste” - objetos Range, como “Range (“ C4 ″) ”, só têm acesso ao comando PasteSpecial.)

Sempre que o código fica cheio de referências a ".Select" e "Selection", é uma dica de que há espaço para otimizar esse código e torná-lo mais eficiente.

wave wave wave wave wave