Esta página é um guia de início rápido que compilação de todas as seções sobre VBA apresentadas até agora no site, para consulta rápida.
- Introdução
- Variáveis
- Feedback de Programas ao Usuário
- Comentários
- Operações com Texto
- Operações com Números
- Argumentos
- Funções
- Obter Dados do Usuário
- Blocos de Decisão
- Laços
- Linhas de Código Extensas
- Objetos e Coleções no Office
Introdução
Esta página ensina alguns fundamentos do VBA. Todos os termos técnicos apresentados aqui são discutidos com maior profundidade em outras páginas deste site, e esta página é a mais importante entre as de VBA porque não é possível ler sobre outros assuntos sem antes saber de alguns conceitos fundamentais.
A melhor forma de absorver os conceitos básicos de programação em VBA é dar exemplos e depois explicá-los. Simplifiquei ao máximo a definição técnica dos termos nesta página.
Para estudar os exemplos desta página, faça o seguinte:
- Na tela principal do seu aplicativo Office, pressione a combinação Alt+F11 para abrir o VBE (se tiver dúvida, veja a página sobre o VBE).
- No VBE, mostre o Project Explorer (pressione Ctrl+R caso ele não esteja visível).
- Em seguida, insira um módulo clicando no menu Inserir >> Módulo (se tiver dúvida, veja a página sobre módulos).
- Cole o código desejado na Janela de Código.
- Para executar um código, Cole o códigos abaixo. Veja mais sobre esse assunto naEntão, posicione o cursor de inserção de texto numa linha entre o início e o fim de um procedimento (
Sub
eEnd Sub
) e pressione a tecla F5.
Variáveis
Página principal: Variáveis
Variáveis armazenam uma informação num elemento para serem utilizadas depois. Quando damos um valor a uma variável, diz-se que estamos fazendo uma atribuição a ela. As variáveis mais utilizadas são as de tipos de dados de texto e as numéricas. O exemplo abaixo faz uma atribuição de texto à variável que estou chamando de FirstName
e uma atribuição de número a uma variável que estou chamando de CurrentAge
:
Sub ExemploVariáveis() Dim FirstName As String Dim CurrentAge As Long FirstName = "Felipe Costa Gualberto" CurrentAge = 30 End Sub
Para que o VBA avalie uma sequência de caracteres como texto, deve-se colocar a expressão entre aspas duplas. Números devem ser expressos sem aspas. Se você representar números entre aspas, o VBA os avaliará como texto.
Feedback de Programas ao Usuário
As técnicas a seguir são usadas para interagir com o usuário: mostrar um aviso, o valor de uma conta matemática ou o resultado da execução de um programa.
Caixas de Mensagem (MsgBox)
Para exibir uma caixa de mensagem ao usuário, utilize a instrução MsgBox
:
Sub DemonstraçãoCaixas() MsgBox "Olá mundo!" End Sub
Janela de Verificação Imediata
Esse exemplo é semelhante ao anterior; a diferença é que o resultado é exibido na Janela de Verificação Imediata (Pressione Ctrl+G para exibi-la).
Sub Imediata() Debug.Print "Olá mundo!" End Sub
Veja a saída desse programa:
Comentários
Você pode usar o símbolo de aspas simples '
para comentar seu código no VBA. Linhas de código ou sequências comentadas não são compiladas nem executadas pelo VBE. Por padrão, expressões de texto comentadas são exibidas na Janela de Código na cor verde. Desenvolvedores comentam códigos para efeito de documentação/explicação de um código, procedimento e/ou um programa.
Os subprocedimentos mostrados a seguir são equivalentes:
Sub ComComentários() 'O código abaixo exibe uma caixa de texto: MsgBox "Caixa de texto!" Debug.Print 33 'você pode também comentar ao final de uma linha de código válida. End Sub
Procedimento sem código:
Sub SemComentários() MsgBox "Caixa de texto!" Debug.Print 33 End Sub
Operações com Texto
O VBA é capaz de juntar duas ou mais expressões de texto numa só. O nome dessa técnica é concatenação:
Sub ExemploTexto() Dim FirstName As String Dim LastName As String FirstName = "Felipe" LastName = "Gualberto" MsgBox "Seu nome é " & Nome & " " & Sobrenome & "." End Sub
O símbolo de concatenação é &
, e para fazer uma operação de concatenação, esse símbolo deve estar fora de uma expressão de aspas duplas. Nesse exemplo, foram concatenados 5 termos, a saber:
- Termo 1: A expressão literal “Seu nome é “
- Termo 2: A variável Nome
- Termo 3: A expressão literal ” “ (um espaço entre as aspas duplas)
- Termo 4: A variável Sobrenome
- Termo 5: A expressão literal “.” (um ponto final)
"Felipe"
.Veja o resultado da execução dessa macro:
Vale ressaltar que se você quiser utilizar num código uma variável que possui um texto armazenado, não é necessário representá-la com aspas duplas, já que no momento da atribuição de seu valor, foram utilizadas aspas duplas.
Operações com Números
O VBA pode ser considerado uma calculadora muito eficiente, e consegue processar operações matemáticas em velocidades incríveis. Veja algumas operações que o VBA suporta:
Sub ExemploNúmeros(): 'Soma, subtração e parênteses: Debug.Print 30 - (25 - (8 + 3)) 'Multiplicação (*) e divisão (/): Debug.Print 0.5 * (12 / 2) 'Note que separador decimal do VBA é um ponto, e não uma vírgula! 'Potência: Debug.Print 5 ^ 3 'Raiz enésima de um número. Exemplo: raiz quadrada de 25 e raiz cúbica de 8: Debug.Print 25 ^ (1 / 2) + 8 ^ (1 / 3) 'Divisão arrendondando-se ao inteiro mais próximo: Debug.Print 20 \ 3 'Note que foi utilizada a contrabarra ao invés da barra. 'Mostrar resto de uma divisão: Debug.Print 33 Mod 10 End Sub
O VBA avalia operações matemáticas da mesma forma que a matemática nos ensina: primeiro as raízes e potências, depois as multiplicações e divisões e depois as somas e subtrações. Claro, a ordem as leis dos parênteses são respeitadas.
Você pode utilizar o operador de concatenação também em números, mas nesse caso, eles não vão somar, e sim concatenar. Veja o exemplo abaixo:
Sub ConcatenarNúmeros() MsgBox 25 & 26 End Sub
Resulta em:
Enfim, você também pode misturar concatenações de números com textos para produzir resultados como esse:
Sub MisturarDadosEmConcatenação() MsgBox "Minha idade é de " & (10 + 20) & " anos." End Sub
Resultado:
Argumentos
Argumentos são elementos utilizados por um procedimento para melhor a estrutura ou prover reaproveitamento do código. Os argumentos utilizados num procedimento são mostrados em sua declaração e são usados como variáveis pelo procedimento.
Veja o código abaixo:
Sub DadosBásicos() FirstName = "Felipe" CurrentAge = 30 MsgBox "Seu nome é " & FirstName & " e sua idade é de " & Idade & " anos." FirstName = "Renata" CurrentAge = "31" MsgBox "Seu nome é " & FirstName & " e sua idade é de " & Idade & " anos." FirstName = "Rodrigo" CurrentAge = "35" MsgBox "Seu nome é " & FirstName & " e sua idade é de " & Idade & " anos." End Sub
A expressão que exibe a caixa de mensagem aparece três vezes na mesma forma. Poderíamos criar um subprocedimento com argumentos para dar uma melhor forma ao nosso programa:
Sub DadosBásicos2() Dim FirstName As String Dim CurrentAge As Long FirstName = "Felipe" CurrentAge = 30 MostrarDados FirstName, CurrentAge FirstName = "Renata" CurrentAge = "31" MostrarDados FirstName, CurrentAge FirstName = "Rodrigo" CurrentAge = "35" MostrarDados FirstName, CurrentAge End Sub Sub MostrarDados(pName, pAge) MsgBox "Seu nome é " & pName & " e sua idade é de " & pAge & " anos." End Sub
Em cada uma das situações, Nome
é avaliado, seu valor é passado ao argumento MeuNome
do subprocedimento MostrarDados
e esse argumento é utilizado como variável nesse subprocedimento.
Funções
Funções são procedimentos que devolvem um valor a um procedimento que o chama. A terminologia técnica correta é que funções retornam um valor. No exemplo abaixo, a função GetRendimento
retorna um valor à variável RendimentoTotal
:
Sub MostrarRendimentos() Dim DinheiroInicial As Double Dim TaxaRendimento As Double Dim RendimentoTotal As Double DinheiroInicial = 4337 TaxaRendimento = 0.3 RendimentoTotal = GetRendimento(DinheiroInicial, TaxaRendimento) MsgBox "O rendimento no próximo mês será de " & RendimentoTotal & " reais." End Sub Function GetRendimento(pCapital, pTaxa) GetRendimento = pCapital * pTaxa End Function
Note que para retornar um valor, você deve atribuir um valor a uma variável que tenha o mesmo nome da função.
Obter Dados do Usuário
Uma forma simples de obter dados entrados pelo usuário é utilizando a função InputBox, que é uma função nativa do VBA:
Sub MostrarNome() MeuNome = InputBox("Qual é o seu nome?") MsgBox "Seu nome é " & MeuNome & "!" End Sub
Blocos de Decisão
O VBA executa blocos de código de acordo com uma condição. O exemplo abaixo executa o primeiro bloco da estrutura de decisão If
se a variável Idade
for menor que 18:
Sub Maioridade() Dim CurrentAge As Long CurrentAge = InputBox("Digite sua idade") If CurrentAge < 18 Then MsgBox "Você é menor." Else MsgBox "Você já atingiu a maioridade." End If End Sub
Veja um exemplo de uma estrutura de decisão do tipo Select Case
:
Sub Conceito() Dim NotaProva As Long Dim ConceitoProva As String NotaProva = InputBox("Qual nota você tirou na prova (0 a 100)?") Select Case NotaProva Case 0 To 50 ConceitoProva = "F" Case Is < 60 ConceitoProva = "E" Case Is < 70 ConceitoProva = "D" Case Is < 80 ConceitoProva = "C" Case Is < 90 ConceitoProva = "B" Case Is <= 100 ConceitoProva = "A" Case Else MsgBox "Valor inserido inválido." Exit Sub End Select MsgBox "Seu conceito foi " & ConceitoProva & "." End Sub
No exemplo acima, a instrução Exit Sub
finaliza a execução de um procedimento. Para funções, você deve usar Exit Function
. Informalmente, falamos que a instrução Exit
sai do procedimento. Ela é equivalente à End Sub
(para subprocedimentos) ou End Function
(para funções).
Laços
Laços são blocos de código que se repetem de acordo com uma condição.
Laços For...Next
são muito utilizados. Nesse tipo de laço, atribui-se um valor inicial a uma variável, que a cada ciclo no laço, tem seu valor incrementado até o valor máximo ser alcançado.
O código abaixo mostra um laço com 10 repetições e, por fim, uma caixa de mensagem:
Sub LaçoForNext() For i = 11 To 20 Debug.Print "O valor da variável i é: " & i Next i MsgBox "Fim da Macro!" End Sub
Linhas de Código Extensas
Muitas vezes acontece de você escrever uma linha de texto tão grande, que ela não cabe na tela de seu VBE:
É possível quebrar uma linha de código extensa em várias linhas. Para tal, dê um espaço e digite o símbolo _ (sublinhado) no final da linha que deseja quebrar. Veja como eu reescreveria o exemplo acima:
Sub LinhaExtensa2() MsgBox "Este é um exemplo de linha de código muito grande. " _ & "Este exemplo mostra a instrução Msgbox para exibir uma " _ & "mensagem com um texto tão grande, que a janela do VBE " _ & "não consgue mostrar toda linha de código nessa janela." End Sub
Objetos e Coleções no Office
No Office, um objeto pode representar uma planilha, um documento Word, uma AutoForma do PowerPoint, um item de e-mail do Outlook e muito mais. Existem centenas de objetos em cada aplicativo, compondo o que chamamos de modelo de objeto.
Coleções
Uma coleção é um objeto que funciona como um container que pode armazenar vários itens (normalmente do mesmo tipo de dados) dentro dele.
Considere o cenário em que você tenha no Excel uma pasta de trabalho que possui 3 planilhas (abas). Em termos técnicos, a pasta de trabalho possui uma propriedade que é a coleção Worksheets
. Considerando que as planilhas se chamam PlanBanco
, PlanResumo
e PlanLog
, você pode acessá-las através de Worksheets("PlanBanco")
, Worksheets("PlanResumo")
, Worksheets("PlanLog")
ou pelo seu índice Worksheets(1)
, Worksheets(2)
e Worksheets(3)
.
Vale ressaltar que Worksheets(1).ProtectContents
acessa a propriedade de um determinado item da coleção Worksheets
. Em outras palavras, a coleção Worksheets
não possui a propriedade ProtectContents
, mas sim o item que está sendo acessado. Logo, está sendo acessado um item da coleção nessa sintaxe.
Hierarquia de Objetos
O modelo de objeto do Office é hierárquico. O Excel é um objeto e possui uma coleção de objetos filhos, que são as pastas de trabalho que estão abertas. Cada pasta de trabalho possui várias planilhas, e cada uma das planilhas possuem várias células. A hierarquia desse exemplo Excel >> Pasta de Trabalho >> Planilha >> Célula. Quando especificamos:
Workbooks("Pasta1.xlsm").Worskheets("Plan1").Range("C2").Value = "Felipe!"
Estamos nos referindo à célula C2 da planilha Plan1 da pasta de trabalho Pasta1.xlsm aberta no Excel. Observe que a hierarquia de objetos é separada por pontos e sua ordem de abrangência se dá da esquerda para a direita. Value se refere a uma propriedade do objeto (nesse caso o objeto Range
). O termo técnico empregado para o objeto Range
quando especificamos seu objeto pai é qualificação.
Os aplicativos, por padrão, permitem que você escreva expressões sem qualificá-las ou qualifica-las parcialmente. Por exemplo, se você escrever:
Worksheets("Plan1").Range("C2").Value = "Felipe!"
O Excel atribuirá valor à célula C2 da planilha Plan1 da pasta de trabalho ativa.
E se usarmos:
Range("B2").Value = "Felipe"
O Excel atribuirá valor à célula B2 da planilha ativa.
Deixar um comentário
Você precise estar logged in para postar um comentário.