Gravador de Macros

O Excel possui o melhor gravador de macros do Office. Essa ferramenta é excelente para o aprendizado do desenvolvedor VBA iniciante, mas é importante ter cuidado com algumas coisas.

Este artigo foi escrito para iniciantes em VBA. São poucas as pessoas que aprendem VBA através de aulas ou livros. A maioria aprende no dia-a-dia, na tentativa e erro e uma das ferramentas usadas para desenvolver a capacidade de programação das pessoas é o recurso de gravar macros. Este artigo mostra quais são os cuidados que devemos tomar ao usar esse recurso e como podemos nos beneficiar do mesmo sem adotar práticas de programação ineficientes ou de baixa confiabilidade.

 O Word possui também um gravador de macros, mas é muito limitado. Mesmo que você queira programar em outro aplicativo do Office, recomendo começar pelo Excel.

O Excel oferece uma poderosa ferramenta para gravar macro. Para gravar uma macro, clique na guia Exibição >> Macros >> Gravar Macro…:

Alternativamente, você pode utilizar o ícone da barra de status para iniciar a gravação de uma macro, mas esse ícone irá aparecer apenas se você tiver habilitado o Excel para exibir a guia Desenvolvedor:

Uma janela aparecerá para definir o nome da macro (rotina em VBA). Clique em OK para iniciar a gravação da macro:

Por padrão, o Excel define um nome para a macro (representado acima por Macro1) e você pode atribuir uma tecla de atalho, se quiser.

Vamos gravar uma macro simples: em Planilha1, escreva um texto qualquer em uma célula e em seguida selecione a Planilha2. Escreva um texto também numa célula qualquer e interrompa a gravação clicando em Parar Gravação no mesmo local onde clicou para iniciar a gravação.

Feito isso, pressione Alt+F11 para ir ao VBE. Verá algo do tipo:

O código gerado foi:

Sub Macro1()
'
' Macro1 Macro
'
 
'
    Range("B5").Select
    ActiveCell.FormulaR1C1 = "Olá mundo!"
    Range("B6").Select
    Sheets("Planilha2").Select
    Range("B10").Select
    ActiveCell.FormulaR1C1 = "Minha primeira macro."
    Range("B11").Select
End Sub

O código foi gerado automaticamente pelo gravador de macros do Excel. O Excel executa os passos exatamente como o usuário manipulou a aplicação.

Como já deve saber, uma vez gravada, a macro poderá ser reproduzida. No entanto, alguns cuidados devem ser observados.

ActiveCell, Select e Activate

O VBA consegue fazer coisas que, manualmente, não é possível no Office.

Deve-se evitar a prática de selecionar células para depois povoá-las (ou seja, usar os métodos Select e Activate). O VBA tem a capacidade de ler e gravar o conteúdo de uma célula diretamente. Isso é importante e deve ser lembrado. A não ser que você seja um programador experiente, não utilize o objeto ActiveCell.

Por exemplo, o bloco de código:

Range("B5").Select
ActiveCell.FormulaR1C1 = "Olá mundo!"

Pode ser simplificado para:

Range("B5").FormulaR1C1 = "Olá mundo!"

Para melhorar, troque o FormulaR1C1 por Value. Por enquanto, apenas acredite nisso e faça:

Range("B5").Value = "Olá mundo!"

Escopo de Planilha

Veja que se a macro for executada quando a planilha ativa for diferente de Planilha1, o texto Olá mundo! será gravado em outra planilha. Em outras palavras, o código abaixo:

Range("B5").Value = "Olá mundo!"

É equivalente a:

ActiveSheet.Range("B5").Value = "Olá mundo!"

Omitir a planilha do objeto Range é o mesmo que considerar para acessar a célula solicitado da planilha ativa. Se quiser um código mais robusto, escreva:

Worksheets("Planilha1").Range("B5").Value = "Olá mundo!"

Escopo de Pasta de Trabalho

Indo além, o bloco de código:

Worksheets("Planilha1").Range("B5").Value = "Olá mundo!"

É equivalente a:

ActiveWorkbook.Worksheets("Planilha1").Range("B5").Value = "Olá mundo!"

O VBA tenta acessar a célula B5 de Planilha1 da pasta de trabalho que está ativa. Obviamente, isso pode causar erros não previstos. Para garantir que seu código execute sempre na pasta de trabalho que contém o código VBA, use:

ThisWorkbook.Worksheets("Planilha1").Range("B5").Value = "Olá mundo!"

Se quiser uma pasta de trabalho específica, pode usar, por exemplo:

Workbooks("Vendas.xlsx").Worksheets("Comercial").Range("B5").Value = 25

Logo, o código original pode ser escrito como:

Sub Macro1()
    ThisWorkbook.Worksheets("Planilha1").Range("B5").Value = "Olá mundo!"
    ThisWorkbook.Worksheets("Planilha2").Range("B10").Value = "Minha primeira macro."
End Sub

Próximos Passos

Utilize variáveis para simplificar seu código. Por exemplo, o massivo código abaixo:

Sub SemVariáveis()
    ThisWorkbook.Worksheets("Planilha1").Range("A1").Value = "Felipe"
    ThisWorkbook.Worksheets("Planilha1").Range("B1").Value = "Gualberto"
    ThisWorkbook.Worksheets("Planilha1").Range("C1").Value = "32"
    ThisWorkbook.Worksheets("Planilha1").Range("D1").Value = "Belo Horizonte"
    
    ThisWorkbook.Worksheets("Planilha2").Range("A1").Value = "Rodrigo"
    ThisWorkbook.Worksheets("Planilha2").Range("B1").Value = "Gualberto"
    ThisWorkbook.Worksheets("Planilha2").Range("C1").Value = "Aracaju"
    ThisWorkbook.Worksheets("Planilha2").Range("D1").Value = "37"
End Sub

Pode ser simplificado para:

Sub ComVariáveis()
    Dim wsFelipe As Worksheet
    Dim wsRodrigo As Worksheet
    
    With ThisWorkbook
        Set wsFelipe = .Worksheets("Planilha1")
        Set wsRodrigo = .Worksheets("Planilha2")
    End With
    
    wsFelipe.Range("A1").Value = "Felipe"
    wsFelipe.Range("B1").Value = "Gualberto"
    wsFelipe.Range("C1").Value = "32"
    wsFelipe.Range("D1").Value = "Belo Horizonte"
    
    wsRodrigo.Range("A1").Value = "Rodrigo"
    wsRodrigo.Range("B1").Value = "Gualberto"
    wsRodrigo.Range("C1").Value = "Aracaju"
    wsRodrigo.Range("D1").Value = "37"
End Sub

Se interessou pelo exemplo acima, sugiro ler o artigo de variáveis do site.

Download

Para fazer o download da pasta de trabalho de exemplos deste artigo, clique aqui.

 

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.