Apostila Excel Macros Com Vba
Apostila Excel Macros Com Vba
Apostila Excel Macros Com Vba
AVISO DE RESPONSABILIDADE
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.
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.
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.
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:
Gravador de Macros.
Indo na guia do Desenvolvedor, selecionar a seguinte sequencia:
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
Uma vez criada e salva a macro podemos vincular esta a um botão ou imagem, na opção
inserir da barra do desenvolvedor:
6
Para visualizar a macro gravada, na guia desenvolvedor teclar a opção Visual
Basic.
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.
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:
Exemplo 1:
Exemplo 2
11
PROPRIEDADES
MÉTODOS
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
13
Para confirmar a escolha da opção pressione a
tecla TAB.
Observe:
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:
Ocorre quando o arquivo passa a ser o arquivo ativo por ação do método Activate.
Ocorre quando é inserida uma nova planilha (Sh referencia a nova planilha).
14
Procedimentos e Funções
Sub <nome_da_macro> ( )
<corpo_da_macro>
End Sub
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:
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.
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.
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.
Exemplo 3
19
Exemplo 4
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:
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.
FUNÇÃO MSGBOX
Sintaxe
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:
22
Exemplos:
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
O SELEÇÃO SIMPLES
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
25
O SELEÇÃO COMPOSTA
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
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:
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.
Exemplo:
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:
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
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:
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
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:
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.
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:
32
Range.Address(RowAbsolute, ColumnAbsolute): - Endereço do range.
Exemplo:
PROPRIEDADE NAME
PROPRIEDADE VALUE
Exemplo1:
Exemplo2:
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.
Exemplo:
34
PROPRIEDADE CELLS
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.
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
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.
Alinhamento Vertical:
38
Exemplo1:
As macros abaixo mostram recursos para alterar o tipo da fonte para Tahoma, tamanho
12, cor azul, estilo Negrito e alinhamento centralizado.
39
Exemplo do uso da propriedade PatternColorIndex.
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
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
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.
Exemplo:
Observação:
PROPRIEDADE RESIZE
Exemplo:
43
PROPRIEDADE ADDRESS
PROPRIEDADE OFFSET
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
Exemplo:
44
MÉTODO ACTIVATE
O exemplo abaixo torna “C5” à célula ativa. Após a mesma recebe o formato negrito.
MÉTODO COPY
Exemplo:
MÉTODO DELETE
Exemplo:
45
MÉTODO MERGE
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
MathCase – é para uma classificação sensitiva, onde letras minúsculas têm prioridade
sobre as maiúsculas.
46
Exemplo:
47
Objeto Worksheet
Exemplos:
48
Métodos e eventos aplicados aos objetos Worksheets.
PROPRIEDADE CODENAME
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:
49
PROPRIEDADE VISIBLE
Exemplos:
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:
51
MÉTODO ADD
Exemplo 1:
Exemplo 2:
Exemplo 3:
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
Exemplos:
53
O exemplo abaixo exclui a última planilha da Coleção WorkSheets.
MÉTODO MOVE
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
Exemplo:
EVENTO BEFOREDOUBLECLICK
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:
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
Exemplo1:
Exemplo2:
Exemplo3:
59
PROPRIEDADE PATH
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:
MÉTODO ACTIVATE
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:
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
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
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:
EVENTO NEWSHEET
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
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
Exemplo1:
65
Exemplo2:
Exemplo3:
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.
Sintaxe:
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:
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.
68
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
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
73
Private Sub OK_Click()
Dim Linha As Integer
Range("A65536").End(xlUp).Offset(1, 0).Select
Linha = ActiveCell.Row
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.
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.
75
Quadro (Frame1) – Muito utilizado como contêiner de controles, tais como, Botão de Opção e
Caixa de Seleção.
MÉTODOS DE UM USERFORM
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.
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
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
Application.ScreenUpdating = False
Arq_Atual = ActiveWorkbook.Name
Dados.Select
Range("A2:I1048576").ClearContents
Range("A1").Select
Arq_Dados = ActiveWorkbook.Name
Range("A1048576").End(xlUp).Offset(0, 0).Select
Ult_Linha = ActiveCell.Row
Range("A2").Select
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
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.
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
Arq_Novo = ActiveWorkbook.Name
Range("A2:D1048576").ClearContents
Windows(Arq_Produtos).Activate
Ult_Linha = Range("A1048576").End(xlUp).Row
82
Range("A2").Select
End Sub
83
OBRIGADO!
Excel - Macros com VBA
84