Você está na página 1de 84

Curso de Excel

Macros com VBA


Todos os direitos reservados para Alfamídia Prow.

AVISO DE RESPONSABILIDADE

As informações contidas neste material de treinamento são distribuídas “NO ESTADO EM


QUE SE ENCONTRAM”, sem qualquer garantia, expressa ou implícita. Embora todas as
precauções tenham sido tomadas na preparação deste material, a Alfamídia LTDA. não têm
qualquer responsabilidade sobre qualquer pessoa ou entidade com respeito à
responsabilidade, perda ou danos causados, ou alegadamente causados, direta ou
indiretamente, pelas instruções contidas neste material ou pelo software de computador e
produtos de hardware aqui descritos.

2
Macros.
Seguido gastamos uma grande quantidade de tempo executando tarefas repetitivas no
Excel, ou mesmo em outras ferramentas do Microsoft Office. Tarefas como organizar uma
planilha, importar dados de uma planilha e assim por diante.

A Macro vem automatizar estas rotinas, ou seja, com um clique em um botão a rotina que foi
gravada junto ao seu Excel executa todas as instruções que vocês faz durante este
processo.

Macro é um conjunto de comandos em seqüência que automatizam as tarefas do Excel,


fazendo que você trabalhe com mais eficiência e menos erros.

Para se criar uma macro é utilizada o VBA, Visual Basic for Aplications,.que é uma
implementação do Visual incorporada em todos os programas do Microsoft Office
funcionando como uma linguagem de programação muito parecida com o Visual Basic e que
nos permite estender ou mesmo substituir rotinas de manipulação de dados, interface, barra
de tarefas e formulários desenhados pelo usuário.

Não é necessário o conhecimento que o usuário tenha conhecimento desta linguagem. As


ferramentas do Microsoft Office tem um gravador de rotinas que gera exatamente o
programa em VBA.

3
Ferramentas do VBA – Faixa de Desenvolvedor.
Para facilitar a vida do ususário para tratamento e gravação de macros o ideal é ativar a
barra de desenvolvedor, pois esta, por padrão, vem oculta nas ferramentas do Microsoft
Office.

Para ativar a barra seguimos o seguinte caminho:

Na guia Arquivo:

 Opções:

Na tela que segue selecionar a opção personalizar faixa de opções e na tela da direita
selecionar a guia desenvolvedor.

4
O Excel exibe a faixa de Desenvolvedor conforme figura abaixo.

Onde:

Ícone Visual Basic – Abre o editor Visual Basic


Ícone Macros – Exibe a caixa de diálogo Macro, na qual podemos optar por executar ou
editar uma macro a partir da lista de macros.
Ícone Gravar Macro – Inicia o processo de gravação de uma macro.
Ícone Usar Referência Relativas – Alterna entre o uso de gravação relativa ou absoluta.
Ícone de Segurança de Macro – Acessa a Central de Confiabilidade, onde podemos
escolher ativar ou desativar macros para executar nesse computador.

Gravar uma Macro


Existem duas forma s de gravar uma macro: através do gravador de macros ou utilizando o
editor e neste desenvolver o programa utilizando as instruções em Visual Basic for
Applications.

Gravador de Macros.
Indo na guia do Desenvolvedor, selecionar a seguinte sequencia:

 Gravar Macros Na tela que segue.

5
 Nome da macro: DIGITAR
 Tecla de atalho: Ctrl + Shift + D
 OK
 Clique na célula B4
 Digite EXCEL
 Clique na célula B5
 Digite MACROS
 Clique na célula B6
 Digite CURSO
 Clique no botão Parar Gravação

Observação: na gravação de uma macro podemos


utilizar referências relativas ou absolutas.

Uma vez criada e salva a macro podemos vincular esta a um botão ou imagem, na opção
inserir da barra do desenvolvedor:

Vai aparecer a a seguinte tela:

Onde no Controle de Formulários escolhemos o botão.

Definimos o mesmo na tela e depois selecionamos a


macro a qual vincularemos ele.

6
Para visualizar a macro gravada, na guia desenvolvedor teclar a opção Visual
Basic.

A tela que segue será apresentada:

Onde no lado direito você tem toda rotina gravada pelo gravador de macros.

VBA.
Outra forma de criarmos macros, como já foi dita anteriormente é indo na guia do
desenvolvedor e em seguida clicar na opção Visual Basic.

Na tela a direita, você tem o editor onde irá digitar a sequência de comandos que vão gerar
sua macro.

7
Ambiente VBA
Para acessar o ambiente de programação VBA, precisamos estar com o Excel aberto com o
arquivo no qual irá conter as rotinas que vamos criar na sequencia. O acesso ao ambiente
VBA se faz pressionando as teclas ALT+F11. Será aberta a janela conforme abaixo:

Na janele apresentada não será mostrado o editor VBA, para tanto teremos que inserir um
módulo clicando no Menu Inserir/ Módulo ou clicar no botão da barra de ferramentas e
escolher a opção Módulo.

 Barra de Ferramentas

Pela barra de ferramentas podemos executar a maioria dos comandos que vamos utilizar
durante a fase de criação do código.

- Permite alternar para o modo planilha, sem fechar o editor do Visual Basic.
- Permite inserir novos elementos dentro do ambiente de programação. Tais como:
User Form, Módulo, Módulo de Classe e Procedimento.
- Salva a planilha Excel, com as alterações feitas no código.
- Recortar, Copiar, Colar. Possuem as mesmas funções conhecidas no ambiente
Windows.
- Permite localizar determinadas palavras dentro do código escrito.
- Desfazer e Refazer. Possuem as mesmas funções conhecidas no ambiente
Windows.
- Executar, Parar, Redefinir. Estes comandos especiais do ambiente VBA
controlam a execução de um bloco de código ou de um userform.
- Ativa e desativa o modo de criação.
- Ativa a janela do Project Explorer.

8
- Ativa a Janela Propriedades.
- Ativa o pesquisador de objeto. Lista os objetos disponíveis no ambiente para trabalhar
com a codificação no Microsoft Excel.
- Ativa e desativa a caixa de ferramentas para criação de Userforms.
- Aciona a documentação sobre o Microsoft Visual Basic, quando instalada junto o
Microsoft Office.

 Janela Project Explorer

Se a janela não estiver visível, ative-a através


do comando Exibir/Project Explorer ou
pressionando simultaneamente as teclas
(CTRL+R), ou ainda clicando no botão da
barra de ferramentas.
A janela Project Explorer exibe todos os
elementos principais contidos dentro da pasta
de trabalho Excel. Ela é composta de projetos
VBA ativos, ou seja, todas as pastas de
trabalho Excel abertas no momento. Cada
pasta é dividida em Microsoft Excel Objetos,
Formulários e Módulos (quando houver). A
pasta de trabalho e suas planilhas são os
objetos mostrados em Microsoft Excel Objetos,
que também poderão ser codificados com
VBA. Formulários vão conter os userforms criados para a aplicação, e Módulos conterá
todos os módulos que possuem códigos públicos feitos pelo programador ou criados pelo
Microsoft Excel na composição de macros.

9
 Janela de Propriedades

Exibe todas as configurações que podem ser feitas nos Objetos (planilhas, userforms,
entre outros) do ambiente de programação em tempo de objeto.

Na figura acima a Janela Project Explorer exibe a pasta de Módulos e o módulo1. Este
módulo1 mostra o código Le_dados. Para criarmos uma nova sub-rotina basta digitar no
mesmo módulo logo abaixo da existente. Após digitarmos o demarcador Sub e o nome da
sub-rotina abre e fecha parênteses e pressionarmos a tecla <enter> será exibida uma
linha divisória a qual tem o objetivo de separar uma sub-rotina da outra, deixando bem
claro onde termina uma sub-rotina e começa outra.

10
Formas de manipular um objeto:

 Alterar o seu conjunto de propriedades


 Ativar métodos específicos do objeto para executar determinadas tarefas
 Associar procedimentos aos eventos que podem ocorrer sobre o objeto

Exemplo 1:

O valor Range("A1") é um objeto: manipulações feitas sobre ele implicam ações


realizadas na célula A1.

Exemplo 2

O objeto ActiveCell se refere à célula ativa no momento da execução da macro: no


exemplo acima, a célula selecionada receberá o valor 10,0

11
PROPRIEDADES

 São os estados internos de um objeto.


 São as variáveis internas de um objeto.
As propriedades ou atributos são as características dos objetos. Quando definimos uma
propriedade normalmente especificamos seu nome e seu tipo. Podemos ter a ideia de que
as propriedades são algo assim como as variáveis onde armazenamos os dados
relacionados com os objetos.

Observe um dos exemplos abaixo:

Range("A1").Value = "VBA - Excel!"


Range("A1").Font.Name = "Arial"
Range("A1").Font.Size = 11

Como dito anteriormente, estas instruções se aplicam ao objeto Range("A1"), ou seja, à


célula A1. Elas alteram ou definem propriedades deste objeto. Propriedades são,
portanto, características de cada objeto; por exemplo, não existe uma propriedade Value
para o objeto Application, mas ela existe para uma célula (objeto Range).

MÉTODOS

 São a forma de se interagir com um objeto.


 São funções ou transformações que podem ser aplicadas aos objetos.
 São a única forma de alterarmos os atributos de um objeto.
 São a interface do objeto para o mundo externo.
 São os procedimentos e funções de um objeto.
Métodos são ações aplicadas a um objeto. Ao contrário das propriedades, que modificam
suas características, métodos realizam ações mais amplas.

Exemplo:

ActiveCell.Delete

Application.Quit

No exemplo acima, Delete é um método do objeto ActiveCell: ele apagará a célula ativa.
Quit é um método do objeto Application; ele encerra o Excel (se tiver uma planilha
aberta não salva, você deve salvá-la antes da conclusão desta ação).

12
CLASSES E INSTÂNCIAS

 Classe de objetos: conjunto de objetos com as mesmas propriedades, com os


mesmos métodos e que respondem aos mesmos eventos
 É a combinação em um único registro de campos que conterão dados e
procedimentos, funções.
 Instância: todo o objeto particular de uma classe
Uma classe descreve as variáveis, propriedades, procedimentos e eventos de um objeto.
Objetos são instâncias de classes; Você pode criar quantos objetos precisar depois que
você tenha definido uma classe.

Lista de objetos, propriedades e métodos

A linguagem VBA possui um grande número de classes (definições de objetos), métodos


e propriedades que facilitaa elaboração de macros, na barra de ferramentas do Editor VB
podemos encontrar uma ferramenta, Pesquisador de Objeto, que lista hierarquicamente
todos estes elementos.
Para abrir o Pesquisador de Objeto, estando no editor VB, clique no ícone Pesquisador de
objeto :, ou pressione F2. Será exibido uma janela conforme abaixo:

A lista à esquerda exibe todas


as classes; ao selecionar um de
seus itens, a região à direita
exibirá todas as propriedades e
métodos disponíveis para um
objeto daquele tipo. Na figura
acima, foi selecionada a
propriedade Font dos objetos da
classe Range.

As classes, métodos e propriedades subordinadas


a um determinado objeto podem ser exibidos no
momento da digitação de uma macro. Ao digitar o
ponto após o nome do objeto em uso, esta lista
será exibida automaticamente.

13
Para confirmar a escolha da opção pressione a
tecla TAB.

Observe:

Os métodos são exibidos com o ícone verde

EVENTOS

Eventos são ações que informam a um aplicativo que algo importante ocorreu, é algo que
acontece aos objetos. Ocorre em resultado de uma ação do usuário, do sistema ou do
próprio código. Por exemplo, quando o usuário clica em um formulário, o formulário pode
desencadear um evento Click e chamar um procedimento que manipula o evento.
Com os eventos você personaliza o comportamento dos objetos, tais como: pastas de
trabalho, planilhas, gráficos, janelas, etc.
Os procedimentos correspondentes aos eventos têm todos a seguinte forma:
Private Sub Objeto_Evento(argumentos)

Exemplos:

Private Sub Workbook_Open()

Ocorre quando o arquivo é aberto por ação do método Open.

Private Sub Workbook_Activate()

Ocorre quando o arquivo passa a ser o arquivo ativo por ação do método Activate.

Private Sub Workbook_Newsheet(ByVal Sh As Object)

Ocorre quando é inserida uma nova planilha (Sh referencia a nova planilha).

14
Procedimentos e Funções

Podemos trabalhar com duas estruturas


diferentes com macros: funções e procedimentos.
Procedimentos: é um conjunto de instruções em
VBA que executam algum tipo de ação, mas não
retornando valor algum.
Função: também é um conjunto de instruções em
VBA, mas por sua vez retorna obrigatoriamente
um valor mesmo sendo nulo.

DEFINIÇÃO DE ROTINAS/SUBROTINAS (MACROS)

As Rotinas/sub-rotinas são os procedimentos Sub, aquelas cuja definição é delimitada


pelas palavras-chave Sub e EndSub sedo que todas as rotinas de gravação de macros
no Excel são definidas desta forma.

Sub <nome_da_macro> ( )

<corpo_da_macro>

End Sub

O corpo da macro pode ser composto por um conjunto de instruções.

15
Definição de Função

Utilizando o editor do Visual Basic podemos criar nossas funções que ficaram vinculadas
no assistente de funções como personalizadas.

Por exemplo:

Entrar no assistente de função e digite:

Uma vez que uma função produz um valor ela poderá ser executada:

 dentro de uma célula numa planilha, à semelhança de qualquer outra função do Excel.
dentro de qualquer outra função ou SubRotina.

Ou pode utilizar o assistente de


função:

16
Clique em OK para a próxima etapa do assistente de função, conforme abaixo:

Preencha as caixas de diálogo Freq e Med com a referência das respectivas células
clique em OK.

A montagem de uma função respeita a seguinte estrutura:

Function <Nome da Função> ( <argumento1> As <Tipo>, …) As <Tipo>

<Nome da Função> = <Valor / Expressão>

End Function
17
 Definição do tipo de dados para os argumentos e do tipo da função

Todas as variáveis envolvidas em uma função deve ter seu tipo definido.
São elas:

Nota: Se os tipos de dados não forem definidos será assumido por padrão como tipo
Variant.

Algumas funções facilitam em muito o nosso dia a dia, veja os exemplos abaixo.

Exemplo 1:

Criar uma função para obter o percentual do lucro. Para isso deve-se usar o preço de
compra e preço de venda que se encontram na planilha. Conforme figura abaixo:

18
Exemplo 2:

Crie uma função que retorne uma string com a situação de cada aluno, conforme os
critérios abaixo: A frequência deve ser acima de 75%, A média deve ser superior a 7,0.

Se a média menor que 7,0, escrever a mensagem “Reprovado por média”;

Se a frequência inferior a 75% , escrever a mensagem “Reprovado por frequência”;

Se a média maior e igual a 7,0 e menor 9,5, escrever a mensagem “Bom”;

Se a média maior e igual a 9,5, escrever a mensagem “Ótimo”.

Exemplo 3

Usando uma função do Excel em uma função no módulo VBA:

Uma função pode chamar outra através da instrução application.

19
Exemplo 4

No exemplo abaixo uma função chama outra função dentro dela.

Inputbox e msgbox
Permitem a interação entre o usuário e uma macro ou programa, funciona como uma
interface de comunicação.

FUNÇÃO INPUTBOX

InputBox é uma função que permite ao usuário introduzir dados no programa é portanto
um mecanismo de entrada.

Como é uma função produz um valor final. Este consiste nos dados inseridos pelo usuário
no formato texto que normalmente são armazenados temporariamente em variáveis de
uma macro ou programa.

20
Sintaxe:

InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

O único argumento da função que não está entre colchetes é a mensagem do prompt,
pois é o único argumento obrigatório; os outros são opcionais. Vamos conferir cada um:
Prompt – É a mensagem a ser exibida ao usuário quando executada a inputbox.

Title – É o título da caixa de mensagem, situado na barra de identificação (barra azul).

Default – É um valor que já aparece preenchido na inputbox como valor padrão.

XPos, YPos – É a posição em que a caixa de mensagem situa-se na tela. O padrão é o


centro.

HelpFile, Context – Utilizados para designar um arquivo e um contexto de ajuda para a


caixa de mensagem.

FUNÇÃO MSGBOX

O MsgBox é um mecanismo de saída e permite ao usuário visualizar os dados produzidos


pelo programa.

Sintaxe

MsgBox(prompt[, buttons] [, title] [, helpfile, context])

MsgBox também possui diversos parâmetros, mas somente o primeiro é obrigatório,


sendo que todos os outros quando ignorados assumem valores atribuídos por padrão.
Prompt – É a mensagem a ser exibida na caixa de mensagem. Se construir uma
mensagem muito longa poderá utilizar o caractere Enter Chr(13); Exemplo:

MsgBox "A Soma de 3 com 5 é :" & Chr(13) & " 8 "

Buttons – Aqui temos várias opções de configuração de uma MsgBox. Se for omitido
assumirá o valor 0 por padrão. A configuração “buttons” pode ser dividida em botões,
comunicação visual e botões padrão; Veremos detalhes abaixo:

Title – É o título da caixa de mensagem. Se este for omitido, aparecerá o padrão que é o
nome da aplicação.

HelpFile - Nome do arquivo que será utilizado para ajuda. Se for indicado este parâmetro
o seguinte é obrigatório.

21
Context - Número do índice do tópico de ajuda.

Exemplo:

MsgBox "Erro de Sintaxe !!!", , "Mensagem de Erro"

Opções de configuração Buttons:

VbOKOnly - Exibe somente o botão de OK.

VbOKCancel - Exibe os botões OK e Cancelar.

VbAbortRetryIgnore - Exibe os botões Anular, Repetir e Ignorar..

VbYesNoCancel - Exibe os botões Sim, Não e Cancelar .

VbYesNo - Exibe os botões Sim e Não.

VbRetryCancel - Exibe os botões Repetir e Cancelar.

VbCritical - Exibe o ícone de Mensagem Crítica.

VbQuestion - Exibe o ícone de mensagem de Alerta.

VbExclamation - Exibe o ícone de mensagem de InformaçãoWarning Message.

VbInformation - Exibe o ícone de Information Message.

VbDefaultButton1 - O primeiro botão é o selecionado por default.

VbDefaultButton2 - O segundo botão é o selecionado por default.

VbDefaultButton3 - terceiro botão é o selecionado por default.

VbDefaultButton4 - O quarto botão é o selecionado por default.

22
Exemplos:

MsgBox "Data Inválida", vbCritical

MsgBox "Operação concluída com sucesso!", vbInformation, "Conclusão"

23
ESTRUTURA DE PROGRAMAÇÃO

INSTRUÇÕES

Toda linguagem de programação é formada por uma série de palavras chaves que uma
vez estruturadas corretamente automatizam uma rotina e o VBA tem uma série dessa
palavras.
Para entender a estrutura de um programa e melhorar a sua performance, precisamos
conhecer algumas estruturas da lógica de programação.

 ESTRUTURA SEQUENCIAL

É o conjunto de ações que serão executadas numa sequencia linear de cima para baixo e
da esquerda para a direita, isto é, na mesma ordem que foi escrita.

Exemplo:

Faça uma sub-rotina que leia o nome do aluno e 3 notas calcule e escreva a média
aritmética.

Após digitar o exemplo na janela de edição do VBA, clique no botão executar na barra
de ferramentas ou no Menu Executar/Executar Macro.

OBS.: Quando ocorrer um erro na digitação a linha ficará na cor Vermelho. Se houver um
erro de compilação ou execução será mostrada uma marca na cor amarelo.

24
 ESTRUTURA DE SELEÇÃO

Uma estrutura de seleção permite a escolha de um grupo de ações e estruturas a ser


executado quando determinadas condições, representadas por expressões lógicas, são
ou não satisfeitas.

O SELEÇÃO SIMPLES

Instrução IF (Se) Then (Então)

Esta instrução avalia uma determinada condição lógica, e dependendo da resposta que
esta condição retornar, será feito um bloco de algoritmo ou não.

Sintaxe:
if condição then
Comandos 1
....
Comandos N
End if

O comportamento do comando IF-THEN é o seguinte: primeiramente a condição é


avaliada, podendo resultar em dois valores: TRUE (verdadeiro) ou FALSE (falso). Se a
condição for verdadeira, os comandos 1 até N serão executados e, em seguida, o Bloco
de comandos. Se a condição for falsa, nenhum dos comandos de 1 a N será executado e
o programa irá diretamente para o Bloco de comandos.

25
O SELEÇÃO COMPOSTA

Instrução IF (Se) THEN (Então) ELSE (Senão)

Dentro da instrução if, ainda podemos utilizar uma segunda instrução (else - senão) que
também avalia a condição lógica testada, porém somente sendo executado se esta
condição for falsa.

Sintaxe:

If condição then
Comando 1
.
.
Comando N1
Else
Comando 2
.
.
Comando N2
Endif

O comportamento do comando IF-THEN-ELSE é o seguinte: A condição é avaliada; se


ela for verdadeira, os comandos 1 até Comando N1 serão executados; se a condição for
falsa, os comandos 2 a comandos n2 serão executados. Em ambos os casos, o comando
posterior a ser executado será o bloco de comandos.

Para melhor compreensão, faremos agora um exemplo prático da utilização deste tipo de
instrução. Façamos um algoritmo que leia o nome e as duas notas de um aluno,
retornando a sua média e uma mensagem “Aprovado” ou “Reprovado” dependendo da
sua média. A média mínima para aprovação será 6.

26
O SELEÇÃO ENCADEADA

É muito comum que dentro de um algoritmo tenhamos vários testes que tenham que ser
feitos a uma mesma variável ou situação. Para este tipo de situação podemos utilizar o
encadeamento (aninhamento) de instruções if.

Exemplo:

Pretende-se criar uma Rotina que identifique um indivíduo em função da sua idade. A
classificação pretendida é a seguinte:

Idade Classe Etária


Menos de 3 anos Bebê
Dos 3 aos 12 Criança
Dos 13 aos 17 Adolescente
Dos 18 aos 25 Jovem
Dos 26 aos 65 Adulto
Mais de 65 Idoso

O SELEÇÃO DE MÚLTIPLA ESCOLHA

Instrução Select case (caso) <variável>


Utilizar uma sequência encadeada de testes lógicos apesar de interessante, em algumas
situações pode tornar o código relativamente complexo. Quando possuímos uma lista de
valores para executar se verifica a necessidade de um comando para agrupar todos
esses valores em uma única cláusula.

27
Quando nos deparamos com este tipo de situação existe uma instrução que se mostra
mais otimizada e organizada para a manipulação dos dados. Select Case <Variável>
executa um dos vários grupos de instruções, dependendo do valor de uma expressão.

Select case <variável>


Case <valor1>
Comando1
Case <valor2>
Comando2
...
Case Else
<Comando caso nenhuma opção acima for verdadeira>
End Select

Exemplo:

Construa um programa que, tendo como dados de entrada o preço de um produto e um


código de origem, emita o preço junto de sua procedência. Caso o código não seja
nenhum dos especificados, o produto deve ser encarado como importado.

Código de origem
0 ou Menor - ERRO
1 – Sul
2 – Norte
3 – Leste
4 – Oeste
5 ou 6 – Nordeste
7, 8 ou 9 Sudeste
10 até 20 – Centro Oeste
25 até 50 – Nordeste

28
Onde:

- Case Is <= 0 - Use a palavra-chave Is com um operador de comparação (=, <>,<,<=,


>,ou >=) para especificar uma restrição nos valores analisados;

- Case 1 – Onde não tiver operador é considerado igualdade (=);

- Case 7, 8 – Várias cláusulas são separadas por vírgulas;

- Case 10 To 20 - Use a palavra-chave To para especificar os limites de um intervalo de


valores a ser analisados. O valor da expressão1 deve ser menor ou igual ao valor de
expressão2.

Você pode usar várias expressões ou intervalos em cada cláusula Case. Por exemplo, a
seguinte linha é válida.
- Case 1 To 4, 7 To 9, 11, 13, Is > Num

Case Else vai atuar sempre que o valor analisado não satisfazer nenhuma das cláusulas
Case analisadas. Com Select Case as possibilidades podem estender-se facilmente, o
que é ideal para a análise de uma grande lista de valores.

29
 ESTRUTURAS DE REPETIÇÃO

o Estrutura Do...Loop (Faça...Laço)

Esta estrutura pode ser utilizada para repetir um trecho de código, enquanto uma
determinada condição for verdadeira, ou até que uma determinada condição torne-se
verdadeira. Podemos utilizar dois operadores condicionais diferentes: Do While. Nesta
estrutura, enquanto a condição for verdadeira, o código dentro do laço é executado.
Quando a condição tornar-se falsa, o primeiro comando após o final do laço será
executado. Neste caso, se a condição for falsa já na primeira vez, o laço não será
executado nenhuma vez.
Estrutura Do While <condição>...Loop (Faça Enquanto <condição>....laço)
Neste caso, estamos utilizando o operador condicional Do While, no início do laço. O
formato geral, neste caso é o seguinte:

Do While <condição>

Comando1

...

ComandoN

Loop

Exemplo:

Faz a soma dos 10 primeiros números maiores do que zero.

30
Observe que dentro do laço, vamos Incrementando o valor da variável Contar, uma
unidade para cada passagem do laço. Com isso, quando o valor de Contar, atingir 11, o
teste do início do laço torna-se falso, e o laço é encerrado.

o Estrutura For...Next

Utilizamos o laço For...Next, para repetir um segmento de código, um número


determinado de vezes. Utilizamos esta estrutura, quando já sabemos o número de vezes
que uma determinada seção de código deve ser repetida. Neste tipo de estrutura,
normalmente, utilizamos uma variável como contador. Este contador varia de um valor
inicial até um valor final.
Formato do comando conforme abaixo:

For contador=inicio To fim incremento

Comando1

Comando2

...

ComandoN

Next

No início a variável contador tem o valor definido para um determinado valor. Em cada
passagem do laço, a variável contador é incrementada pelo valor definido em incremento.
Caso não seja definido o incremento, será utilizado o padrão 1.

Exemplo:

Faz a soma dos 10 primeiros números maiores do que zero

31
Neste exemplo, a variável i inicia com o valor 1. Em cada passo, o valor de i é
acrescentado à variável Soma. Como o incremento não foi definido, será utilizado o
padrão que é 1. Com isso, ao final do laço For...Next, a variável Soma, terá armazenado o
valor da soma dos 10 primeiros números inteiros.

Poderíamos utilizar um valor de incremento diferente de 1, para, por exemplo, obter a


soma somente dos números pares menores do que 10:

Objeto Range

O Objeto range é uma propriedade do objeto Worksheet. Isso significa que objeto Range
requer que uma planilha esteja ativa ou que ele referencie uma planilha.
Esse objeto representa uma célula, uma coluna, uma linha, um conjunto de células, até
todas as células de uma planilha; por isso é tão genérico e funcional. O objeto Range
talvez seja o objeto mais utilizado no Excel VBA, afinal, você está manipulando dados em
uma planilha.
Um objeto Range pode ser representado de diversas formas. Pode ser:

Range(“A1”): - Uma célula ,A1;

Range(“B2:C3”): - Um intervalo de células, B2:C3.

Range(“A1, B2:C3”): - Uma célula, A1, mais um intervalo B2:C3

Range(“Lucro”): - Um intervalo com o nome “Lucro”

Range.Value: - Valores das células do range

Range(“B2:C3”).Cells(1, 2): - Referência à célula na 1ª linha e na 2ª coluna dentro do


intervalo B2:C3 (célula C2)

Range.Offset(RowOffset, ColumnOffset): - Desloca o range RowOffset linhas para


cima/baixo e ColumnOffset colunas para a direita/esquerda

32
Range.Address(RowAbsolute, ColumnAbsolute): - Endereço do range.

Range.Count: - Número de células do range

Exemplo:

PROPRIEDADE NAME

Esta propriedade permite nomear o intervalo de um Range especificado.

PROPRIEDADE VALUE

Retorna ou define o valor de uma determinada célula Range.

Exemplo1:

Exemplo2:

'Onde, na primeira instrução se atribui ao range "A1:F20" o nome "Conjunto", e na última


instrução se utiliza essa designação para referenciar o respectivo conjunto de células e
atribuir-lhe o valor 1, na planilha ativa.

33
Exemplo3:

Com base na tabela abaixo vamos criar uma macro para calcular o salário de uma
pessoa. Para isso a macro recebe as informações da planilha e devolve o salário na
planilha.

OBJETO RANGE X MÉTODO SELECT

O Método Select seleciona o Range especificado.

Range("A1").Select - Seleciona uma única célula que você vai escrever

Range("A1,A5,B4").Select - Selecionar um conjunto de células alternadas.

Exemplo:

34
PROPRIEDADE CELLS

A propriedade Cells refere-se todas as células do objeto especificado no intervalo, pode


ser uma planilha ou o intervalo de células. Podemos utilizá-la com o objeto Range
representando todas as células de dentro do range. Onde Cells(linha,Coluna).
Range(Cell1,Cell2)

Por exemplo, Range(“A1:B2”) é equivalente a Range(Cells(1,1),Cells(2,2).

Cells.Select – Seleciona todas as células de uma planilha:

Cells.ClearContents - Limpa todas as células de valores ou fórmulas que pode estar em


uma planilha:

Exemplo1:

Crie uma macro baseada nos exemplos acima, execute o mesmo e observe que o
intervalo foi preenchido com o número 2, logo após acrescente a linha conforme abaixo e
execute a macro observando que está limpo.

Exemplo2:

Com base na planilha abaixo criar uma macro que calcule um acréscimo de 30% para os
valores maior ou igual a 500 e escreva o valor reajustado na coluna ao lado;

35
As três afirmações abaixo são equivalentes:

ActiveSheet.Range.Cells (1,1)

Range.Cells(1,1)

Cells(1,1)

A propriedade Cells tem uma propriedade com nome de Item que torna a propriedade
Cells muito útil. A propriedade Item permite referenciar uma célula especifica em relação
ao objeto Range.

Sintaxe:

Cells.Item(2,”C”)

Cells.Item(2,3)

PROPRIEDADE ACTIVECELL

O ActiveCell propriedade retorna um objeto Range que representa a célula que está ativa
na planilha especificada ou na planilha ativa. Você pode aplicar qualquer das
propriedades ou métodos de um objeto Range para a célula ativa.

36
Com base na planilha abaixo a macro que recebe 2 valores da planilha e uma opção,
retorna o valor célula ativa.

OBJETO FONT

O objeto Font possui toda a formatação de fonte que podemos utilizar na interface do
Excel. Vejamos as principais propriedades:
Name – Define o tipo da fonte.

Bold – True define o estilo da fonte é negrito.

Itálic - True define se o estilo da fonte é itálico.

Size – Define o tamanho da fonte.

ColorIndex – define cor da fonte com valor inteiro de 1 a 56.

37
OBJETO INTERIOR

O objeto Interior define o plano de fundo para as células selecionadas Suas principais
propriedades são:
Color- Define a cor de preenchimento de uma célula em RGB

ColorIndex - Define cor de preenchimento em valor inteiro de 1 a 56 cores.

Pattern – Define um padrão para ser aplicado no fundo de uma célula. Existem dezoito
padrões representados em valor inteiro de 1 a 18.

Patterncolor e PatternColorindex – Definem a cor padrão a ser aplicada ao fundo da


célula.

PROPRIEDADE HORIZONTALALIGNMENT E VERTICALALIGNMENT

Controla o alinhamento de dados das células contidas no range selecionado, tanto


horizontalmente quanto verticalmente. As constantes podem ser:
Alinhamento Horizontal:

xlLeft – Alinhamento à esquerda.

xlCenter- Alinhamento centralizado.

xlRight- Alinhamento à direita

xlDistributed ou xlJustify - Alinhamento justificado.

Alinhamento Vertical:

xlTop - Alinhamento superior

xlCenter- Alinhamento centro (meio).

xlBottom- Alinhamento inferior

xlDistributed ou xlJustify.- Alinhamento justificado

38
Exemplo1:

As macros abaixo mostram recursos para alterar o tipo da fonte para Tahoma, tamanho
12, cor azul, estilo Negrito e alinhamento centralizado.

Exemplo do uso da propriedade Pattern.

39
Exemplo do uso da propriedade PatternColorIndex.

PROPRIEDADES COLOR E COLORINDEX

As propriedades Color e ColorIndex definem a cor de uma borda, fonte ou preenchimento


de uma célula. Sendo que color em RGB, ex: Color=RGB(255,0,0), enquanto ColorIndex
especifica em valor inteiro, ex: ColorIndex=3, os dois são equivalentes.
Uma função RGB trabalha com três parâmetros, que indicam a quantidade de vermelho,
verde e azul na composição de uma cor, variando de 0 a 255.

Exemplo:

Exemplo:

A macro abaixo gera uma tabela de cores com os respectivos números para ser utilizado
com a propriedade ColorIndex.

40
COLEÇÃO BORDERS

A coleção Borders é responsável por determinar as características das bordas de um


determinado Range. Com Borders são passadas as constantes que representam a borda
está sendo alterada.

xlDiagonalDown – Diagonal de cima para baixo.

xlDiagonalUp – Diagonal de baixo para cima.

xlEdgeTop – Borda superior.

xlEdgeBottom – Borda inferior.

xlEdgeLeft – Borde esquerda.

xlEdgeRight – Borda direita.

xlInsideHorizontal – Linha interna horizontal.

xlInsideVertical – Linha interna vertical.

PROPRIEDADE LINESTYLE E WEIGHT

Propriedade LineStyle determina o estilo da linha a ser usada em bordas, Weight


determina a espessura da borda.

Adiciona uma borda a um intervalo definindo um estilo. Constantes para LineStyle.

xlLineStyleNone – Sem estilo

xlContinuous - padrão -

xlDash -

xlDashDot -

xlDashDotDot -

xlDot -

xlDouble -

41
Constantes para Weight a qual determina e espessura da borda.

xlThin - padrão -

xlMedium -

xlThick –

xlHairline -

O exemplo a seguir adiciona uma borda dupla para as células C1 até D5 na planilha ativa.

O exemplo a seguir define a cor da borda superior e inferior das células A2: G2 na cor
vermelho.

O exemplo a seguir define a cor da borda inferior das células A10: D10 na cor Azul no
estilo traçado.

PROPRIEDADE COUNT

Esta propriedade conta número de células, colunas ou linhas de um Range.

42
PROPRIEDADE COLUMN E ROW

As propriedades Column e Row indicam coluna e linha, que formam a base de um range,
ou seja, relativas à célula do canto superior esquerdo.

PROPRIEDADE COLUMNS E ROWS

Essas propriedades agem como coleções, que armazenam as informações de colunas e


linhas de uma range.

Exemplo:

Observação:

Outra forma de se obter o total de linhas em uma planilha é a seguinte:

PROPRIEDADE RESIZE

Essa propriedade permite alterar o tamanho de um intervalo com base na localização da


célula ativa. Você pode determinar um novo intervalo conforme suas necessidades.

Exemplo:

43
PROPRIEDADE ADDRESS

Retorna o endereço de células do objeto Range em questão.

PROPRIEDADE OFFSET

Provoca um deslocamento de um determinado número de linhas e colunas, tendo com


base o range ao qual será aplicado o deslocamento. Offset(linha, coluna), onde linha e
coluna são os deslocamentos de linha e coluna.

Exemplo:

A macro abaixo seleciona e preenche com um valor a célula que se encontra 3 linhas
abaixo e 1 coluna à direita da célula que se encontra ativa na planilha ativa.

FUNÇÃO ISEMPTY

Retorna um valor booleano se uma única célula estiver vazia ou não

Exemplo:

44
MÉTODO ACTIVATE

Método Activate torna uma célula ativa.

O exemplo abaixo torna “C5” à célula ativa. Após a mesma recebe o formato negrito.

MÉTODO COPY

Copia o conteúdo de um range para outro range de destino ou para o clipboard.

Exemplo:

MÉTODO DELETE

Exclui as células do Range especificado.

Exemplo:

45
MÉTODO MERGE

Este método permite mesclar as células de um determinado Range.

MÉTODO CLEAR

Limpa todo e qualquer conteúdo das células dentro de um range. O conteúdo envolve
valores, formatação e fórmulas.

Exemplo:

MÉTODO SORT

Este método é utilizado para classificar os dados dentro de um Range de células. Os


parâmetros mais relevantes desse método são:

Keys – são os campos-chave de classificação.

Order – ordenação indica duas constantes;

xlAscending – classifica em ordem crescente.

xlDescending – classifica em ordem decrescente.

Header – especifica se a primeira linha contém cabeçalhos.

MathCase – é para uma classificação sensitiva, onde letras minúsculas têm prioridade
sobre as maiúsculas.

Orientation – orientação que podem ser duas:

xlSortColumns – classifica por colunas.

xlSortRows – classifica por linhas

46
Exemplo:

47
Objeto Worksheet

O objeto Worksheet representa uma planilha, especificada da coleção Worksheets. O objeto


Worksheet é também um membro da coleção Sheets. Quando queremos referenciar uma
Worksheets de uma pasta de trabalho necessitamos indicar qual planilha, para isso temos que
especificar com o número de índice qual a posição da planilha. Por exemplo, Worksheets (1) é a
primeira planilha da esquerda na pasta de trabalho, Worksheets(2),... e assim sucessivamente.
Use Worksheets (índice), ou o nome da planilha Worksheets(“Plan1”), ou ainda se a planilha foi
renomeada Worksheets(“Balanço”).
Sheets é um conjunto de planilhas,. Sheets (1) é a primeira planilha na pasta de trabalho, ou
Sheets(“plan1”), ou se a planilha foi renomeada indicar o novo nome Sheets(“FolhaPgto”).

Exemplos:

A macro abaixo escreve na Plan1 no intervalo A1:C5 o texto "OLÁ".

Preenche com valor de 1 á 100 o intervalo de 10 linhas por 10 colunas.

48
Métodos e eventos aplicados aos objetos Worksheets.

PROPRIEDADE CODENAME

Retorna o nome de código de uma planilha, que substitui a declaração Worksheets(índex).


O CodeName da planilha só pode ser visto entrando no Editor do Visual Basic no Project Explorer.

Conforme mostra a figura acima, o CodeName para a planilha com nome de guia “Balanço” é
Plan1.Podemos fazer referência a esta planilha na pasta de trabalho usando: Plan1.Select ou
Sheets ("Balanço"). Select ou Sheets (1). Select.

PROPRIEDADE NAME

A propriedade Name retorna o nome de uma planilha. Também pode ser usada para trocar o
nome de uma planilha.

Exemplo:

A macro abaixo muda o nome de uma planilha especificada.

49
PROPRIEDADE VISIBLE

Controla a visibilidade de uma planilha, Podemos usar valores conforme a seguir:

PlanilhaHidden – vai ocultar a planilha indicada.

planilhaVisible - vai deixar visível a planilha anteriormente oculta.

Exemplos:

O exemplo abaixo oculta Plan2

Exemplo abaixo exibe a Plan2 oculta pela macro anterior.

Observação:

Podemos utilizar o parâmetro xlVeryHidden ao invés de true ou false. Este irá ocultar a planilha e
desabilitará a opção reexibir do menu.

50
PROPRIEDADE ACTIVESHEET

Retorna um objeto que representa a planilha ativa na pasta de trabalho ativa ou na janela especificada.

Exemplos:

O exemplo abaixo escreve na célula B2 da planilha ativa e mostra o nome da planilha.

51
MÉTODO ADD

O método Add permite adicionar novas planilhas à pasta de trabalho ativa.

Exemplo 1:

A macro abaixo adiciona à planilha “Bacana” a esquerda da planilha selecionada.

Exemplo 2:

O exemplo insere 4 novas planilhas após a última planilha.

Exemplo 3:

Insere uma planilha com nome após a última.

52
MÉTODO ACTIVATE

Torna uma planilha da coleção WorkSheets ativa, movendo o foco para a planilha especificada
sem alterar a seleção do usuário.

Exemplo:

O exemplo abaixo torna ativa a “Plan2” na qual “D7” torna-se ativa e recebe o formato negrito.

MÉTODO COPY

Permite criar uma cópia fiel de uma determinada planilha, em uma posição especificada na
coleção Worksheets.

Exemplo:

A macro abaixo faz um cópia fiel da planilha ativa, inserindo a cópia após a última planilha da
coleção.

MÉTODO DELETE

Exclui um planilha da coleção WorkSheets.

Exemplos:

O exemplo abaixo exclui a planilha especificada.

53
O exemplo abaixo exclui a última planilha da Coleção WorkSheets.

MÉTODO MOVE

Move uma planilha da coleção para local especificado.

O exemplo abaixo move a planilha ativa para a última posição

MÉTODO SELECT

O método Select seleciona uma planilha ou varias planilhas, movendo a seleção do usuário para a
nova planilha especificada.

Exemplo1:

Exemplo2:

54
Exemplo3:

EVENTO DE UM WORKSHEET

Os eventos relacionados a um objeto Worksheet afetam apenas a planilha onde o evento ocorre.
Para acessar os eventos de um objeto Worksheet dentro do ambiente VBA, você dá um duplo
clique na planilha desejada. Vai aparecer a janela conforme abaixo. Clicando na caixa de
combinação onde aparece Geral você encontrará o objeto Worksheet, na caixa de combinação da
direita você escolhe o evento desejado.

EVENTO ACTIVATE

Este método é equivalente a clicar na guia na parte inferior da Planilha. Ocorre quando a planilha
em que está o evento se torna a planilha ativa.

Exemplo:

55
EVENTO DEACTIVATE

Deactivate ocorre quando outra planilha se torna a planilha ativa.

Exemplo:

EVENTO BEFOREDOUBLECLICK

O evento BeforeDoubleClick permite controlar o que acontece quando o usuário dá um duplo


clique na planilha. Esse evento possui argumentos:

Cancel – que proporciona a possibilidade de cancelá-lo.


Target – do tipo Range, através desse argumento, podemos identificar qual célula recebeu o duplo
clique e dar os tratamentos desejados ao evento.

Exemplo:

EVENTO BEFORERIGHTCLICK

Evento desencadeado quando o usuário clica com o botão direito do mouse em um intervalo.
Target é o objeto clicado com o botão direito do mouse; Cancel configurado como True impede
que a ação-padrão aconteça.

Exemplo:

56
EVENTO CALCULATE

Ocorre toda vez que um cálculo é executado ou um valor de uma expressão matemática é
alterado em uma célula da planilha que contém a macro.

Exemplo:

No exemplo abaixo, a cada vez que a célula C2 sofre uma alteração exibe uma mensagem, essa
alteração pode ser no momento que está editando a expressão ou se um dos valores das células
envolvidas na expressão sofrer uma alteração de valor.

EVENTO CHANGE

Ocorre quando uma das células da planilha teve o seu conteúdo alterado pelo usuário ou por
agente externo. Por exemplo, quando o texto é inserido, editado ou excluído. Target é a célula que
foi alterada.

Exemplo1:

57
Exemplo 2:

Quando uma célula for preenchida com um valor, a cor de fundo da célula ficará em vermelho.

Exemplo 3:

A macro abaixo força a entrada do texto em caracteres maiúsculos.

EVENTO SELECTIONCHANGE

Ocorre quando um novo intervalo de células é selecionado dentro de uma planilha. Target é o
intervalo recentemente selecionado e podemos dar o tratamento desejado.

Exemplo:

58
Objeto Workbook

Workbook representa uma pasta de trabalho do Microsoft Excel. O objeto pasta de trabalho é um
membro da coleção Workbooks. A coleção de pastas de trabalho contém todos os objetos
Workbook atualmente aberto no Microsoft Excel.
Como um objeto Workbook representa uma pasta de trabalho, podemos acessá-lo como um
índice da coleção Workbooks da seguinte maneira: workbooks(1) ou pelo nome do arquivo
workbooks(“nome arquivo”). O número de índice indica a ordem em que os arquivos foram abertos
ou criados. Workbooks(1) é o primeiro livro criado e Workbooks(Workbooks.Count) é o último
criado.

PROPRIEDADE FULLNAME

Obtém o nome da pasta de trabalho, incluindo o seu caminho no disco.

Exemplo1:

Essa função retorna o caminho do disco e o nome da pasta de trabalho ativa.

Exemplo2:

A função retorna apenas o nome da pasta de trabalho.

Exemplo3:

Esse exemplo de macro mostra caminho do arquivo ativo.

59
PROPRIEDADE PATH

Retorna o caminho onde esta a pasta de trabalho solicitada.

MÉTODO ADD

O método Add permite criar uma nova pasta de trabalho vazia e adicioná-la à coleção.

Exemplo 1:

O exemplo seguinte adiciona uma nova pasta de trabalho vazia ao Microsoft Excel.

Exemplo 2:

A macro abaixo cria um novo arquivo fecha salvando com nome.

MÉTODO ACTIVATE

Esse método torna uma pasta de trabalho ativa.

MÉTODO CLOSE

Fecha a pasta de trabalho desejada. Close tem alguns parâmetros, se caso omitido o
funcionamento da ação será padrão Windows.
A macro abaixo fecha a pasta de trabalho ativa sem salvar.

Exemplo 1:

60
Exemplo 2:

Esse exemplo a macro fecha a pasta de trabalho ativa e o salva.

Exemplo 3:

A macro do exemplo abaixo fecha a pasta de trabalho ativa dando a opção de escolha se o
usuário deseja salvar.

MÉTODO SAVE

Salva mudanças na pasta de trabalho.

EVENTOS DE UM WORKBOOK

A maioria dos eventos de um Workbook afetam globalmente uma aplicação. Para acessar os
eventos de um Workbook dentro do ambiente VBA, você deve dar duplo clique em

Esta Pasta_de_Trabalho, que está no Project Explorer e aí selecionamos o evento.

61
Principais eventos de um objeto Workbook..

EVENTO ACTIVATE

Ocorre quando a pasta de trabalho que contém esse evento torna-se ativa.

EVENTO OPEN

Esse procedimento é ativado quando uma pasta de trabalho é aberta, não necessita de nenhuma
interface com o usuário..

Exemplo:

A macro abaixo abre a pasta de trabalho com a planilha Janela ativada.

EVENTO NEWSHEET

Ocorre quando uma nova planilha é adicionada à pasta de trabalho ativa.


No exemplo abaixo a macro será acionada quando inserir nova planilha, a nova planilha será
inserida após a última já existente.

EVENTO SHEETCHANGE

Ocorre quando qualquer intervalo em uma planilha é alterado. Sh é a planilha; Target é o intervalo
alterado. Para afetar uma planilha específica, referencie Worksheet_Change.

Exemplo1:

A macro abaixo abre uma pasta de trabalho quando você digita o nome da pasta de trabalho
desejada em uma célula na planilha da pasta de trabalho ativa:

62
Exemplo2:

Esse exemplo só aceita valores menores ou igual a 500. Se você digitar um valor maior que 500
em uma célula na pasta de trabalho, será exibida uma caixa de mensagem e o valor é removido.

Vamos ver abaixo alguns exemplos onde usaremos Propriedades, Métodos e Eventos de um
Workbook descritos acima.

Exemplo 1:

Esse exemplo cria um novo arquivo solicitando que o usuário digite o nome, após salva e fecha o
novo arquivo.

Exemplo 2:

A macro abaixo abre uma pasta de trabalho existente, localizando o caminho onde a mesma se
encontra.

63
Objeto Application
O objeto Application representa todo o aplicativo Microsoft Excel e seus derivados. Através dele,
podemos configurar a visualização, execuções e outras funcionalidades do Excel. O Objeto
Application possui várias propriedades e métodos.

PROPRIEDADE THISWORKBOOK

Retorna um objeto de pasta de trabalho que representa a pasta onde a macro código atual está
funcionando. ThisWorkbook sempre devolve a pasta no qual o código está sendo executado.

PROPRIEDADE DISPLAYALERTS

Habilita ou desabilita a exibição de mensagens de alerta como resposta de algumas ações do


Microsoft Excel enquanto uma macro está em execução. True habilita as mensagens, False
desabilita.

Exemplo1:

Este exemplo fecha a pasta de trabalho “Tempo.xls” sem perguntar se deseja salvar alterações.

Exemplo2:

A macro abaixo exclui uma planilha sem aviso “Application.DisplayAlerts = False”, antes de
excluir a segunda planilha mostra um aviso “Application.DisplayAlerts = True”.

64
PROPRIEDADE SCREENUPDATING

Essa propriedade permite desativar a atualização quando False. True a atualização da tela é
ativada.

Exemplo:

No exemplo abaixo você verá uma folha em branco, sem qualquer movimento e, em seguida, uma
folha onde as células de A1 a A10000 são iguais a "77".

MÉTODO QUIT

Esse método encerra o Microsoft Excel com a opção que pergunta ao usuário se deseja salvar os
arquivos que estão sendo fechados, caso marque “não” fecha sem salvar.

Exemplo:

MÉTODO ONKEY

Executa um procedimento especificado quando uma combinação de teclas ou chave é


pressionada.

Exemplo1:

O exemplo desabilita a configuração padrão da tecla TAB.

65
Exemplo2:

Habilita a configuração padrão da tecla TAB.

Exemplo3:

Quando pressionar a tecla TAB será exibido uma caixa de mesnsagem.

66
VARIÁVEIS DO TIPO OBJETO
As variáveis do tipo objeto se refere a um objeto. Uma variável de objeto pode armazenar muitos
valores, todas as propriedades associadas ao objeto estão associadas a variável objeto.

Declaração da Variável Objeto

Sintaxe:

Dim <Var_Objeto> As Objeto ‘Atribuição de uma variável Objeto


Set <Var_Objeto> = <Objeto>

Onde:

Set – palavra chave que indica a associação do objeto a uma variável do tipo objeto
<Var_Objeto> - Variável Objeto
<Objeto> - Tipo do objeto a ser atribuído à variável
 Dim oob As Object - O tipo de variável de objeto que você usar para armazenar o objeto retornado
pode afetar o desempenho do seu aplicativo. Declarar uma variável de objeto com a cláusula As Object
cria uma variável que pode conter uma referência a qualquer tipo de objeto.
 Dim Cel As Range - Quando você define uma variável de objeto para um objeto Range, você pode
facilmente manipular o intervalo usando o nome da variável.
 Dim Planilha WorkSheet - Uma variável objeto Worksheet pode representar uma planilha ou um
conjunto de planilhas, assim você pode manipular as planilhas utilizando o nome da variável.
 Dim Arquivo Workbook – Quando você definir uma variável de objeto para um objeto Workbook,
você pode manipular as pastas de trabalho do Microsoft Excel fazendo referencia a variável.
 Dim X As Application – Uma variável objeto application pode representar todo o aplicativo Microsoft
Excel, contendo opções de configurações, métodos que retornam objetos e assim por diante.

Exemplo da Declaração:

Dim aplicativo As Excel.Application

Dim arquivo As Excel.Workbook

Dim planilha As Excel.WorkSheet

Set aplicativo = CreateObject("Excel.Application")

Set arquivo = aplicativo.Workbooks.Add

Set planilha = arquivo.Worksheets(1)

67
Exemplo1:

O exemplo seguinte cria a variável de objeto cel, após atribui a mesma o intervalo A1:E10 da
plan1 na pasta de trabalho ativa. As instruções modificam propriedades do intervalo utilizando o
nome da viriável que é referente ao objeto de intervalo.

Exemplo2:

Você pode combinar vários intervalos em um objeto Range usando o método Union. O exemplo
seguinte cria um objeto Range chamado unicel, define-o com os intervalos A1:B2 e C3:D4 e, em
seguida, formata com negrito os intervalos combinados.

O exemplo abaixo abre uma nova pasta de trabalho do Microsoft Excel.

68
Suplementos

Os suplementos fornecem comandos e funcionalidades opcionais para o Microsoft Excel.


Suplementos são projetos desenvolvidos em VBA Excel, com a extensão XLA completamente
ocultos aos olhos do usuário. Uma vez que um suplemento é criado e instalado no Excel, as suas
macros ou funções podem ser utilizadas em qualquer pasta de trabalho que estiver aberta. É
permitido salvar dados no arquivo de suplementos, mas você não pode selecionar o arquivo. Além
disso, se você gravar os dados no arquivo de suplementos que você quer disponibilizar
futuramente, os códigos de suplementos precisam tratar o salvamento do arquivo. Você pode
adicionar ThisWorkbook.Save ao evento Workbook_BeforeClose do suplemento.

CONVERTENDO UMA PASTA DE TRABALHO EM UM SUPLEMENTO

Siga os passos abaixo para converter uma pasta de trabalho em suplementos.

Ao salvar a pasta, utilizar a opção salvar como e no tipo de arquivo escolher suplemento (*.xlam).

69
Note que o arquivo muda a extensão de xlsm para xlam e o local de salvamento muda
automaticamente para uma pasta de suplementos.
 Converter arquivo em suplemento utilizando o Editor do VBA - Abra a pasta de trabalho que você deseja
converter em um suplemento. Alterne para o Editor VBA. No Project Explorer, dê um clique duplo em
ThisWorkbook. Na janela, Propriedades localize a propriedade chamada IsAddin e mude seu valor para
True, conforme figura abaixo:

Pressione Ctrl+G para exibir a janela de verificação Imediata. Nessa janela, salve o arquivo,
utilizando uma extensão xlam, conforme a figura abaixo:

70
INSTALANDO O SUPLEMENTO

No menu de opçoes do excel, selecionar opções e suplementos.

FECHANDO SUPLEMENTOS

Desmarque o suplemento caixa de diálogo Suplementos. Isso fecha o suplemento para essa
sessão e assegura que ele não será aberto durante sessões futuras ou até que você o ative
novamente.
Para excluir um suplemento é necessário fazer pelo Windons Explorer. Localize o arquivo
renomeie e coloque em outro lugar, ou se realmente não quiser o suplemento pode excluir
definitivamente com Delete.

71
FORMULÁRIOS

O userform é um formulário personalizável que o Microsoft Excel tem disponível para interagir com
a planilha de cálculo. Aparece sobreposto à planilha de cálculo não permitindo qualquer seleção
enquanto este estiver aberto. Podem-se colocar nos userforms uma grande quantidade de
controles como textbox, listbox, image, combobox, entre muitos outros ou utilizar alguns activex. O
objetivo é melhorar a utilização das planilhas quer visualmente quer funcionalmente.

Desenhando o Formulário

72
Formulário em execução

Código em VBA para a inclusão dos dados na planilha

Private Sub Fechar_Click()


Unload UserForm_Cadastro
End Sub

73
Private Sub OK_Click()
Dim Linha As Integer

If Me.TextBox_Nome.Value = "" Then


MsgBox "Falta digitar o nome do Cliente", vbCritical, "Atenção"
Me.TextBox_Nome.SetFocus
End If

Range("A65536").End(xlUp).Offset(1, 0).Select
Linha = ActiveCell.Row

If MsgBox("Confirma a Inclusão ? ", vbYesNo, "Atenção") = vbYes Then


Cells(Linha, 1) = TextBox_Nome.Value
Cells(Linha, 2) = TextBox_Rua.Value
Cells(Linha, 3) = TextBox_Bairro.Value
Cells(Linha, 4) = TextBox_Cidade.Value
Cells(Linha, 5) = TextBox_CEP.Value
Cells(Linha, 6) = TextBox_Estado.Value
End If
TextBox_Nome.Value = ""
TextBox_Rua.Value = ""
TextBox_Bairro.Value = ""
TextBox_Cidade.Value = ""
TextBox_CEP.Value = ""
TextBox_Estado = ""
TextBox_Nome.SetFocus

Range("A65536").End(xlUp).Offset(0, 0).Select
Linha = ActiveCell.Row

End Sub

CONTROLES DE INTERFACE

Rótulo (Label1) – permite colocar um texto dentro do formulário. Para alterar o texto a ser
exibido no controle, clique na propriedade Caption e digite o texto desejado. Para formatar
use as propriedades Font e ForeColor.

Caixa de Texto (TextBox1) – são as melhores formas de receber dados de entrada. A caixa de
texto permite digitação de qualquer tipo de dados alfanumérico, numérico, datas e até mesmo
caracteres especiais.
Método set Focus – esse método dá foco á caixa de texto que o chamou.
Evento Change - ocorre sempre que uma cauxa de texto tem sua propriedade Text alterada, ou
seja, com qualquer digitação executada.
Evento Enter – ocorre quaando a caixa de texto recebe o foco.
Evento Exit – entra em ação sempre que a caixa de texto perde o foco.

Botão de Comando (CommandButton1) – os botões de comandos, normalmente, são os


responsáveis pelo serviço pesado de um formulário. É através deles que as funções finais são
executadas e que determinam as consequências da aplicação. Os botões são sempre o ponto de
saída de um formulário. As propriedades recomendáveis para alteração: Name, Caption. As
demais propriedades podem ser alteradas conforme conceitos descritos no item Propriedades
Comuns.

74
Caixa de Combinação (ComboBox1) – serve para mostrar ao usuário uma lista de opções
multipla escolha. Elas podem, ou não, permitir digitação, è uma boa forma de impedir que o
usuário insira em sua planilha informações que não estejam se acordo com seus objetivos. Abaixo
segue as principais propriedades especificas, Métodos e Eventos do controle caixa de
combinação.
Propriedade List – permite acesso a lista de opções. Por exemplo, se uma lista possuir cinco
elementos, ComboBox1.list(0) será o primeiro, e ComboBox1.list(5) será o último elemento da
lista.
Propriedade Style – essa propreidade vai definir o estilo da caixa de combinação. Temos duas
opções fmStyleDropDownCombo – permite a digitação, e fmStyleDropDownList – obriga a escolha
de um item na lista.
Propriedade ListIndex – essa é uma propriedade muito importante das caixas de combinação, pois
retorna ou determina qual item está selecionado. Este retorno é um índex que nos permite
acessar qualquer elemento de uma caixa de combinação.
Propriedade ListCount – retorna a quantidade de ityens dentro da lista.
Método AddItem - método que permite adicionar um novo item em uma caixa de combinação.
Sua sintaxe:
Onde Item é uma string ou variável indicando o texto do item a ser inserido, e Índex é a posição
em que o item deve ser inserido na caixa de combinação.
Método RemoveItem – Permite remover um item da lista de uma caixa de combinação. Sua
sintaxe:
Método Clear – remove todos os itens de uma caixa de combinação.

Caixa de Listagem (ListBox1) – as caixas de listagem tem basicamente as mesmas funções


das caixas de combinação. Sua única diferença é que elas se apresentam no formato de lista
aberta. Vejamos algumas propriedades especificas.
Propriedade MultiSelect – permite múltipla escolha em uma caixa de mensagem. Temos três
opções: fmMultiSelectSigle – permite a seleção de um único item da lista; fmMultiSelectMulti –
permite mais de um item selecionada, utilizando o mouse para marcar e desmarcar os itens e
fmMultiSelectExtended – permite mais de um item selecionado, utilizandoas teclas Ctrl e Shift em
suas funções padrões de seleção.
Propriedade Selected – através dessa propriedade, aliada ao índice, podemos determinar se um
item está ou não selecionado.

Caixa de Seleção (CheckBox1) – caixa de seleção é um contole booleano, ou seja, permite


escolher entre Sim e Não para um determinado item.
Propriedade Value – esta propriedade define o estado do botão. True marca o botão e false
desmarca.

Botão de Opção (OptionButton1) - Os botões de opção tem características semelhantes as


caixas de combinação. Porem os botões não podem trabalhar sozinhos; são necessários pelo
menos dois botões ou mais para que possa haver uma escolha entre os botões. Se colocar três
ou mais botões no formulário, ao escolher um os outros automáticamente são desmarcados. Para
conseguir criar vários blocos de opção em um mesmo formulário, devemos colocar um cotrole
Frame, para que possa servir de contêiner de controle, assim os botões que estão dentro de um
frame não influenciam no estado dos botões que estejam em outros frames ou no formulário.

75
Quadro (Frame1) – Muito utilizado como contêiner de controles, tais como, Botão de Opção e
Caixa de Seleção.

Propriedades Comuns aos Controles


Name – propriedade que identifica o controle nos códigos.
Caption – texto presente no controle.
Left /Top - posição relativa ao canto superior esquerdo do formulário.
Height / Width - altura e comprimento do controle
BackColor - define cor do fundo do objeto selecionada.
ForeColor - define cor do texto do objeto selecionado.
BorderColor – permite definir a cor da borda do formulário.
BorderStyle – determina o estilo de borda do formulário.
BackStyle – determina o estilo do fundo do controle (transparente/opaco)
Font – Exibe a caixa padrão de Fonte do Sitema onde podemos determinar a configuração dos
textos exibidos no formulário ou nos controles.
ControlTipText – exibe um texto de ajuda quando se deixa o mouse sobre o controle.
Propriedades comuns em Caixa de Combinação e Caixa de Listagem
RowSource - origem dos dados do controle. Pode ser um intervalo de células da planilha.
ColumnCoun - número de colunas a serem exibidas no controle.
ColumnWidths - tamanho de cada coluna.
BoundColumn - coluna dependente associada à propriedade Value.
TextColumn - coluna dependente associada à propriedade Text.
Value - valor da coluna dependente.
Text - valor presente na caixa.
ControlSource - célula ligada à propriedade Value da caixa

MÉTODOS DE UM USERFORM

Show - apresenta o formulário


Hide - esconde o formulário mas não o remove da memória
Unload - remove o formulário da memória

EVENTOS EM UM USERFORM

Os eventos mostrados na sequência servem também para vários outros controles, portanto mais a
frente podemos apenas expandir o conceito.
Activate – ocorre quando o formulário for ativado.
Click – dá-se toda vez que o formulário for clicado.
Doubleclick – acontece sempre que o formulário receber um duplo clique.
Deactivate – ocorre quando um formulário for desativado.
Initialize – acontece toda vez que um formulário for carregado para memória.

76
PROGRAMANDO O USERFORM

Diferentemente dos outros módulos, dar um duplo clique no módulo do formulário abre o
formulário no Modo de Criação. Para visualizar o código, clique com o botão direito do mouse no
módulo ou no userform no Modo de Criação e selecione Exibir Código, ou de um duplo clique no
userform.

Exatamente como uma planilha, um userform tem eventos desencadeados por ações. Depois que
o userform foi adicionado ao projeto, os eventos estarão disponíveis na lista suspensa que fica no
canto superior direito da janela de código, selecionando-se Userform na lista suspensa Objeto,
canto superior esquerdo da janela código.

Vários eventos para o userform podem ser selecionados na lista suspensa na parte superior
esquerda da janela Código

77
PROGRAMANDO CONTROLES

Para programar um controle, selecione o controle no qual você deseja programar, clique com o
botão direito do mouse sobre o controle, selecione Exibir Código ou dê um duplo clique no
controle. O rodapé, o cabeçalho e a ação padrão para o controle são automaticamente inseridos
na janela de código. Para ver e/ou escolher outras ações para um controle, selecione o controle
na lista de Objeto e visualize as ações na lista de eventos. Podem ser escolhidas várias ações
para um mesmo controle na lista de eventos.
No exemplo abaixo criamos um programa no controle Botão de Comando com o Name BTN_OK,
o programa tem o objetivo de inserir nome e idade em uma planilha do excel.

Antes de executar o userform precisamos chamá-lo a partir de qualquer módulo, para


issoutilizamos o método Show, sua sintaxe: NameForm.Show.

78
Após executar o código acima você visualizará seu formulário conforme abaixo a cada informação
que inserir nas caixas de textos e clicar no botão Ok uma planilha do Excel estará recebendo os
dados.

79
IMPORTAÇÃO DE DADOS

Para a importação de dados para uma planilha do Excel, precisamos conhecer os


dados que estão na origem e com isso programar a leitura e a inserção dos dados na
planilha.

Aqui demonstramos alguns dados a serem importados.

Vamos criar uma nova planilha com o cabeçalho preparando para receber os dados.

Agora vamos digitar o código que fará todo o trabalho que necessitamos.

Sub Importa_Dados()
Dim Arq_Atual As String
Dim Arq_Dados As String
Dim Ult_Linha As Long
Dim Cod As Long
Dim Pais As String
Dim Prod As String
Dim Vend As String
Dim Data As Date

80
Dim Preço As Currency
Dim Quant As Long
Dim Desc As Double
Dim Total As Currency
Dim Nome_Vendedor As String

Nome_Vendedor = UCase(InputBox("Nome do Vendedor"))

If Nome_Vendedor = "" Then


Exit Sub
End If

Application.ScreenUpdating = False

Arq_Atual = ActiveWorkbook.Name
Dados.Select
Range("A2:I1048576").ClearContents
Range("A1").Select

Workbooks.Open "F:\CURSOS\Excel VBA - SEFAZ\Base_Vendas.xlsm"

Arq_Dados = ActiveWorkbook.Name

Range("A1048576").End(xlUp).Offset(0, 0).Select
Ult_Linha = ActiveCell.Row
Range("A2").Select

Do While ActiveCell.Row <= Ult_Linha

If UCase(Cells(ActiveCell.Row, 4)) = Nome_Vendedor Then

Windows(Arq_Atual).Activate
ActiveCell.Offset(1, 0).Select
Windows(Arq_Dados).Activate

Windows(Arq_Atual).ActiveCell = Cells(ActiveCell.Row, 1)
Windows(Arq_Atual).ActiveCell.Offset(0, 1) = Cells(ActiveCell.Row, 2)
Windows(Arq_Atual).ActiveCell.Offset(0, 2) = Cells(ActiveCell.Row, 3)
Windows(Arq_Atual).ActiveCell.Offset(0, 3) = Cells(ActiveCell.Row, 4)
Windows(Arq_Atual).ActiveCell.Offset(0, 4) = Cells(ActiveCell.Row, 5)
Windows(Arq_Atual).ActiveCell.Offset(0, 5) = Cells(ActiveCell.Row, 6)
Windows(Arq_Atual).ActiveCell.Offset(0, 6) = Cells(ActiveCell.Row, 7)
Windows(Arq_Atual).ActiveCell.Offset(0, 7) = Cells(ActiveCell.Row, 8)
Windows(Arq_Atual).ActiveCell.Offset(0, 8) = Cells(ActiveCell.Row, 9)
End If

ActiveCell.Offset(1, 0).Select
Loop

Windows(Arq_Dados).Close SaveChanges:=False

ActiveWorkbook.Save

Application.ScreenUpdating = True

MsgBox "Concluido.", vbInformation, "Conclusão"

End Sub

81
EXPORTAÇÃO DE DADOS

Outro exemplo é a exportação de dados para uma outra pasta de trabalho do Excel,
gerando dados em uma planilha.

Abaixo a planilha com alguns dados de origem:

O código que fará o trabalho de exportação:

Sub Exporta_Dados()
Dim Ult_Linha As Long
Dim Arq_Produtos As String
Dim Arq_Novo As String

Application.ScreenUpdating = False

Arq_Produtos = ActiveWorkbook.Name

' Caso o arquivo já esteja aberto, então não dá o alerta


Application.DisplayAlerts = False
Workbooks.Open "F:\CURSOS\Excel VBA - SEFAZ\" & "Arq Dados Vendas 1.xlsx"
Application.DisplayAlerts = True

Arq_Novo = ActiveWorkbook.Name
Range("A2:D1048576").ClearContents

Windows(Arq_Produtos).Activate

Ult_Linha = Range("A1048576").End(xlUp).Row

82
Range("A2").Select

Do While ActiveCell.Row <= Ult_Linha


Range("A" & ActiveCell.Row & ":D" & ActiveCell.Row).Copy
Windows(Arq_Novo).Activate
Range("A1048576").End(xlUp).Offset(1, 0).Select
ActiveCell.PasteSpecial xlPasteValues
Windows(Arq_Produtos).Activate
ActiveCell.Offset(1, 0).Select
Loop
Application.CutCopyMode = False
Windows(Arq_Novo).Close savechanges:=True
Application.ScreenUpdating = True
MsgBox "Concluido.", vbInformation, "Exportação"

End Sub

83
OBRIGADO!
Excel - Macros com VBA

84

Você também pode gostar