Você está na página 1de 124

Imerso em Macros e

VBA - Excel

MARCELO VENSKE

CONSULTOR INSTRUTOR:
LOCAL E DATA:

Av. Paulista 2006 7 andar, Cjs. 703/705 So Paulo - SP CEP 01310-200


Tel.: (11) 3524-9222 - E-Mail: marcelo@fcavalcante.com.br

http://www.cavalcanteassociados.com.br/

Conhea o ExpressTraining: http://www.expresstraining.com.br

Imerso em Macros e VBA - Excel

NDICE
1. Visual Basic for Application - VBA ............................................................................... 5
1.1.
Macros Gravadas .................................................................................................... 5
1.2.
Macros Escritas....................................................................................................... 6
2. A Elaborao das Macros ........................................................................................... 7
2.1.
Macros Gravadas .................................................................................................... 7
2.1.1.
Gravao Absoluta e Relativa ............................................................................. 8
2.1.2.
Localizando uma Macro no editor do VBA. ........................................................ 10
2.2.
Entendendo Melhor a Programao ...................................................................... 13
2.2.1.
Rotinas ou Sub Rotina....................................................................................... 13
2.2.2.
Objetos das Rotinas .......................................................................................... 14
2.2.3.
Propriedades e Mtodos ................................................................................... 15
2.3.
Estrutura de Objetos do Excel ............................................................................... 17
2.4.
Objetos Range e Cells .......................................................................................... 18
2.5.
Deslocamento na planilha utilizando a propriedade Offset .................................... 20
2.6.
Objetos Sheets e Plan ......................................................................................... 22
2.7.
Uso da Instruo With ........................................................................................... 24
3. Caixas de Dilogo (MsgBox e InputBox) ................................................................. 25
3.1.
InputBox (Caixa de Entrada de Dados) ................................................................ 25
3.2.
MsgBox - (Caixa de Mensagem) ......................................................................... 27
4. Utilizando Variveis ................................................................................................... 30
4.1.
Tipos de Variveis ................................................................................................. 31
4.2.
Abrangncia ou Domnio das Variveis ................................................................. 34
5. Estruturas de Deciso ............................................................................................... 36
5.1.
Estrutura IF... Then ............................................................................................. 36
5.2.
Operadores And e Or em estruturas IF... Then .................................................... 39
5.2.1.
Operador And ................................................................................................... 39
5.2.2.
Operador Or ..................................................................................................... 40
6. Estruturas de Repetio (Loop)................................................................................. 41
6.1.
Estrutura Do While... Loop ................................................................................... 41
6.2.
Estrutura Do Until... Loop .................................................................................... 44
7. Macros Auto-Executveis.......................................................................................... 46
7.1.
Macro Auto Executvel de Planilha ....................................................................... 47
7.2.
Macro Auto Executvel em Clula de Planilha ...................................................... 49
7.3.
Macro Auto Executvel em Arquivo ....................................................................... 51
8.

Utilizao Funes de Planilha no VBA .................................................................... 56

9. Formatao no VBA .................................................................................................. 58


9.1.
Utilizao da Funo: Format ............................................................................... 58
9.2.
Utilizao da Funo: FormatNumber .................................................................. 59
9.3.
Utilizao da Funo: FormatPercent................................................................... 59
9.4.
Utilizao da Funo: FormatCurrency ................................................................ 60
10.

Tratamento de Erro em Tempo de Execuo ........................................................ 61

Imerso em Macros e VBA - Excel


10.1.
10.2.
11.

Utilizando a Instruo On Error Resume Next ................................................. 61


Utilizando a Instruo On Error GoTo ... ........................................................ 63
Chamando Programas Executveis pelo Excel ..................................................... 65

12.
Utilizando Funes do VBA ................................................................................... 67
12.1.
Funes Matemticas ....................................................................................... 67
12.2.
Funes de Data e Hora ................................................................................... 68
12.3.
Funes de Converso ..................................................................................... 69
12.4.
Funes de Informao ..................................................................................... 70
12.5.
Funes de Tratamento de Texto (String) ......................................................... 71
12.5.1. Funo: UCase ................................................................................................. 71
12.5.2. Funo: LCase .................................................................................................. 71
12.5.3. Funo: StrConv ............................................................................................... 72
12.5.4. Funo: Len ...................................................................................................... 72
12.5.5. Funo: Left ...................................................................................................... 73
12.5.6. Funo: Right .................................................................................................... 73
12.5.7. Funo: Mid ...................................................................................................... 74
12.5.8. Funo: InStr ..................................................................................................... 75
12.5.9. Funo: InStrRev .............................................................................................. 75
12.5.10.
Funo: StrReverse ....................................................................................... 76
12.5.11.
Funes: Trim / LTrim / RTrim ....................................................................... 77
12.5.12.
Funo: Space .............................................................................................. 78
12.5.13.
Funo: String ............................................................................................... 79
13.
13.1.
13.2.
13.3.
13.4.

Criao de Novas Funes de Planilha Via VBA................................................... 80


Exemplo prtico de elaborao de funes ....................................................... 81
Localizando e testando as funes criadas ....................................................... 83
Inserindo descrio e definindo a categoria da nova funo.............................. 85
Instalando no Excel as novas funes (Criando AddIn) ..................................... 87

14.
14.1.
14.2.
14.3.
14.4.

Criao e uso de Formulrios em VBA.................................................................. 90


Propriedade dos objetos.................................................................................... 92
Principais propriedades dos Objetos ................................................................. 93
Carregando e descarregando o formulrio pela planilha. .................................. 95
Criando a Lista de Itens para os objetos ComboBox e ListBox.......................... 97

15.
Conexo com Banco de Dados Via VBA ............................................................. 101
15.1.
Objetos de Conexo VBA ................................................................................ 101
15.2.
Utilizando o ADO para criar uma conexo. ...................................................... 102
15.2.1. Estabelecendo a referncia com biblioteca ADO ............................................. 102
15.2.2. Declarando o objeto e abrindo a Conexo....................................................... 103
15.2.3. Declarando o objeto e abrindo um Recordset .................................................. 105
15.2.3.1.
Configurao dos Parmetros do Recordset ............................................... 106
15.3.
Criando Uma Conexo com Access via ADO............................................... 108
15.3.1. Importando Registros do Access ..................................................................... 109
15.3.2. Inserindo Registros do Excel para o Access .................................................... 111
15.3.3. Editando Registros do Excel no Access .......................................................... 113
15.3.4. Excluindo Registros do Access Atraves do Excel ............................................ 115
15.4.
Criando Conexo com SQL Server via ADO ................................................ 117
15.5.
Criando Conexo com Outro Arquivo Excel via DAO .................................... 119
15.5.1. Estabelecendo a referncia com biblioteca DAO ............................................. 119
15.5.2. Importando Registros de Outro Arquivo Excel ................................................. 120

Imerso em Macros e VBA - Excel


15.5.3.

Exportando Registros para Outro Arquivo Excel.............................................. 121

16.

Proteo das rotinas de macros com senha de acesso ....................................... 122

17.

Melhorando a execuo das macros ................................................................... 124

Imerso em Macros e VBA - Excel

1. Visual Basic for Application - VBA


O VBA-Visual Basic for Application uma linguagem de programao comum para os
produtos da empresa que funciona sobre o Windows. O VBA se baseia no produto VB
(Visual Basic) de grande sucesso no mercado de programas.
A linguagem VBA aplica-se na criao de comandos de programao para os aplicativos
do pacote Office (Excel, Word, Access, Power-Point, Outlook).

Rotinas
Rotina uma seqncia de cdigos e instrues de programao com a finalidade de
executar uma ou vrias tarefas. As rotinas em VBA constuma-se chamar de macros.

Editor do Visual Basic (VBE)


um editor que est incorporado aos aplicativos Office, onde todas as rotinas em VBA
so elaboradas, editadas e armazenadas.

Macros
Costuma-se chamar de macro as rotinas (tarefas) de programao desenvolvidas dentro
dos aplicativos do pacote Office. Ento uma macro um pequeno programa que contm
um conjunto de instrues em linguagem VBA(Visual Basic for Application) dispostas de
forma lgica com a finalidade de automatizar tarefas ou aes dentro dos aplicativos
Office.

1.1.

Macros Gravadas

Macros gravadas so rotinas de programao em VBA(Visual Basic for Application) onde


os comandos(cdigos de programao) so gerados automaticamente a partir da
execuo dos procedimentos na prpria tela do aplicativo. Ou seja, o usurio executa os
procedimentos e o gravador de macros gera automaticamente os cdigos, desta forma o
usurio no necessita conhecer a estrutura da linguagem de programao, isto de uma
forma bom, porm limita as macros a receberem somente comandos que possam ser
executados a partir da planilha.
Obs.: A possibilidade de gerar macros gravadas s est disponvel nos aplicativos Excel
e Word. (Access e Power-Point possuem macros pr estabelecidas)

Imerso em Macros e VBA - Excel

1.2.

Macros Escritas

Macros escritas so as rotinas de programao escritas pelo usurio em VBA(Visual Basic


for Application), diretamente no Editor de Programao. Para isto necessita que o usurio
conhea as estruturas da linguagem VBA, suas sintaxes, cdigos e comandos. Fazendo
uso dessas estruturas de programao as possibilidades de desenvolvimento de rotinas
so praticamente ilimitadas.
Obs.: Todas as rotinas desenvolvidas neste treinamento so aplicadas somente ao
Aplicativo Microsoft Excel.

Imerso em Macros e VBA - Excel

2. A Elaborao das Macros


2.1.

Macros Gravadas

Fazendo uma analogia a criao das macros gravadas seguem o mesmo procedimento da
gravao de uma fita-K7 em um gravador, onde voc liga e a partir daquele momento,
tudo o que for feito ser gravado.
No caso da macro gravada o procedimento o mesmo, voc inicia a gravao e todos os
procedimentos que forem executados como exemplo: Formatar clulas, Copiar, Colar,
Ativar Planilha, Abrir e Fechar Arquivo, etc. ser gravado e quando a macro for executada
todos os procedimentos gravados sero repetidos.
Dessa forma durante a gravao, tenha a certeza que todos os procedimentos
necessrios a sua macro foram executados e aps todos os procedimentos feitos, nunca
esquea de parar a gravao.

Procedimentos para gravao


Para ligar o gravador necessrio estar no Excel (planilha) e no no VBE (Editor do VBA).
Selecione qualquer clula do Excel e siga esses procedimentos:
Clique em :
Ferramentas 

Macro  Gravar nova macro.

Nome do Macro: Deve conter at 255 caracteres sem espao em branco, iniciando com
caractere Alfa (Letras).
Tecla de Atalho: Ser a tecla utilizada para executar a macro (poder ser um boto, que
ser visto mais adiante)
7

Imerso em Macros e VBA - Excel


Armazenar Macro Em:
Esta Pasta de trabalho: Armazena a macro na pasta de trabalho ativa. a maneira
mais usual para armazenar macros.
-

Nova pasta de trabalho: Cria uma nova pasta de trabalho para armazenar a macro.

Pasta de Trabalho pessoal de macros: Esta opo armazenar sua macro numa
pasta chamada Pasta Pessoal de Macro, localizada no diretrio de inicio do Excel, desta
forma as macros armazenadas neste local estaro sempre disponveis quando o
programa Excel for inicializado.
Descrio: Opcional, um comentrio que voc pode inserir. Este poder ser importante
para que no seja esquecido o objetivo de funcionamento.

Clique em OK para iniciar a gravao da macro neste momento ser exibida uma
pequena barra de ferramentas, indicando o incio da gravao.

Para parar a gravao

Agora execute todos os procedimentos que devem ser gravados e quando terminar no
esquea de parar a gravao, clicando no boto em formato de um quadrado azul na
pequena barra chamada Para Gravao.
Dica!! Antes de iniciar a gravao da macro pratique os procedimentos sem
gravar, se for o caso anote em um papel todos os comandos que tero que ser
feitos, assim voc ter menos chance de errar e ter que refazer a gravao.

2.1.1.

Gravao Absoluta e Relativa

Toda vez que voc grava uma macro possvel determinar que tipo de gravao se
deseja em ralao ao posicionamento das clulas.
Existem dois tipos de gravao: As de endereo absoluto e de endereo relativo. Essa
escolha feita atravs da barra Parar Gravao na opo Referncia Relativa.

Referncia Relativa / Absoluta

Imerso em Macros e VBA - Excel


Gravao com Endereo Absoluto
Neste tipo de gravao os endereos de clulas que foram dadas como referencia sero
da forma absoluta, ou seja, se durante a gravao voc selecionou a clula A10 e clicou
copiar e logo em seguida selecionou a clula B20 e clicar colar e parar a gravao;
quando executar a macro os comandos sero feitos nas mesmas clulas A10 e B20, no
importando qual clula estiver selecionada naquele momento da execuo.

Gravao com Endereo Relativo


J neste tipo os endereos de clulas sero gravados pelo deslocamento (direo) em
que foram feitos.
Exemplo: Ao selecionar na clula A10 e clicar copiar e logo em seguida selecionar a
clula B20 e clicar colar, os endereos gravados das clulas no sero A10 e B20 e sim o
deslocamento que foi feito durante a gravao. Esse deslocamento ser repetido ao
executar a macro podendo o procedimento de copiar e colar ser feito em outras clulas.
A troca pela opo relativa e absoluta feita no mesmo boto (mostrado na figura acima)
e quantas vezes forem necessrias durante a gravao do macro.
Ateno: Caso voc encerre uma gravao em relativo; esta opo se manter para o
incio da prxima gravao.

Imerso em Macros e VBA - Excel

2.1.2.

Localizando uma Macro no editor do VBA.

Quando a macro gravada, os comandos so transformados em cdigo VBA, ou seja,


todos os procedimentos que foi realizado durante a gravao geraram os cdigos de
programao.
Para editar ou simplesmente ver os cdigos, clique em: Menu Ferramentas  Macro
 Macros.
Na Caixa que ser aberta, selecione a macro clicando em seu nome e logo em seguida
clique no boto EDITAR.

Ento ser aberto o Visual Basic Editor (VBE), exibindo o cdigo da macro selecionada.

Dica!!
O editor do VBA poder ser aberto clicando ALT + F11, porm dessa forma,
voc mesmo ter que localizar a macro desejada.

10

Imerso em Macros e VBA - Excel


Tela do Editor de Visual Basic

Caixa de Objetos

Caixa de Procedimento

Janela de Projeto

As macros so armazenadas em mdulos, se logo aps for criado uma nova macro,
essa nova macro ser armazenada no mesmo mdulo.
Porm, quando o arquivo for fechado, e posteriormente aberto, a nova macro ser
armazenada em um novo mdulo.

Botes de Macros
Outra maneira de iniciar a gravao e executar uma macro atravs de Botes de
Macro, para gravar uma macro iniciando pela insero do boto, faa o seguinte:
Exiba a barra de ferramentas formulrio, clicando em:
Ferramentas  Formulrios

Menu Exibir

 Barra de

11

Imerso em Macros e VBA - Excel


Na barra formulrio clique no objeto Boto e solte o mouse, logo aps clique no local da
planilha, onde deseja criar o boto.

Logo aps soltar o boto do mouse aparecer uma tela chamada Atribuir macro, nesta
tela clique no boto Gravar.
Neste momento em diante siga os procedimentos da gravao da macro detalhados
anteriormente.

12

Imerso em Macros e VBA - Excel

2.2.

Entendendo Melhor a Programao

A programao em VBA gerada pela gravao possui uma srie de cdigos, comandos,
comentrios, objetos, etc. O texto envolvido em cada procedimento dotado de uma
srie de cores diferentes, sendo que cada uma tem o seu significado, isto ajuda a
entender melhor os cdigos.
As Cores dos cdigos VBA
Cor

Significado

Azul

Palavras-Chave da linguagem. Ex: Sub, End Sub, Function, If, Then, Else, While, Loop,

Vermelho

Sempre que escreve uma linha em linguagem VBA, o editor vai retificar a sintaxe da
linguagem por forma a indicar se existe ou no algum erro de escrita. Se for detectado um
erro a linha fica em vermelho e exibida uma mensagem de erro, seno todas as palavras
so reconhecidas, coloridas da cor da respectiva categoria e alteradas para letras maisculas
ou minsculas, conforme esteja pr-definido.

Preto

Nome de variveis, procedimentos, valores, operadores,

Verde

Comentrios introduzidos no seio dos procedimentos. Estes comentrios servem para o


utilizador poder associar algumas explicaes aos procedimentos realizados. As palavras
com esta cor so ignoradas no procedimento, no produziro qualquer efeito na sua
execuo. Voc poder introduzir quantos comentrios achar necessrio para documentar
suas rotinas. Para introduzir comentrios bastar que o caractere ( ) anteceda o texto a
introduzir.

Amarelo

Um sombreado amarelo poder aparecer sobre a linha que identifica um procedimento. Esta
cor simboliza a ocorrncia de um erro na execuo do respectivo procedimento e o estado de
execuo do mesmo agora est parado, mas ainda em execuo. Quando isto acontecer
voc no dever voltar a dar ordem de execuo do procedimento, sem antes clicar em
redefinir na barra de ferramentas do VBE.

2.2.1.

Rotinas ou Sub Rotina

Cada macro criada d origem a uma Sub Rotina, ento se pode dizer que uma Sub
Rotina uma macro. As Sub Rotinas so aquelas cuja definio delimitada pelas
palavras-chave Sub e End Sub.

Exemplo:

Sub (nome_do_macro) ( )
(corpo_da_macro)

End Sub

13

Imerso em Macros e VBA - Excel

Exemplo prtico de uma rotina:

Comentrios da Macro acima


O comando acima faria com que a clula ativa ficasse com a cor de preenchimento em
cinza (15 a cor cinza no cdigo de cores do VBA) e a fonte em Branco (Cor n. 1)

Estas Sub-Rotinas so designadas pelo nome da macro que atribumos e tm como


funo desempenhar um conjunto de tarefas que compem o seu corpo.
O corpo do macro composto por um conjunto de instrues, sendo que cada instruo
diferente necessita estar numa linha diferente.

Dica!! Quando tratar de linha de instruo muito longa, voc poder fazer quebra de
linhas no cdigo introduzindo espao e underline e logo em seguida clicando ENTER.
Exemplo:

Espao e Underline

Sheets(1) . Range("A5") . EntireRow . Interior . _


ColorIndex = 50

2.2.2.

Objetos das Rotinas

Objetos so os elementos do aplicativo, tais como: Arquivo, Planilha, Clula, Grfico,


Barra de frmulas, barra de ferramentas, um intervalo de clulas etc.
Tudo que poder ser controlado pelo VBA ser chamado de Objeto. O Microsoft Excel
possui mais de 120 tipos diferentes de objetos.

14

Imerso em Macros e VBA - Excel


Alguns Exemplo de Objetos
Objeto
Workbooks
Sheets
Cells
Range
Charts
Columns
Rows

2.2.3.

Significado
Arquivo Excel
Planilha de arquivos
Clulas da planilha
rea de clulas
Grficos
Colunas
Linhas

Propriedades e Mtodos

Os objetos possuem uma hierarquia que deve ser entendida e respeitada para que os
comandos possam ser empregados corretamente.
Existem duas formas de apresentao hierrquica dos objetos. A Propriedade e o Mtodo.

Propriedades
So as caractersticas do objeto, tanto na aparncia (cor, tamanho, texto do objeto, etc),
quanto na posio dele no arquivo ou nas planilhas.

Exemplo de cdigo utilizando as propriedades


A clula A2 dever ter a cor de preenchimento amarelo, ento criamos o cdigo.
A sintaxe do cdigo para definir o valor da propriedade do objeto clula :
Range("a2").Interior.ColorIndex = 6 (o n. 6 corresponde a cor amarelo no VBA)

Nome do objeto

Propriedades

Valor da propriedade

A propriedade est vinculada a um objeto. Pode-se apontar como propriedade o fato de


uma janela estar maximizada ou minimizada. A Janela o objeto, o fato de estar
maximizada ou minimizada uma propriedade.
O Excel possui mais de 500 propriedades. Em sintaxe dever ser primeiro indicado o
objeto e depois suas propriedade: Objeto.Propriedade

15

Imerso em Macros e VBA - Excel

Mtodos
aquilo que o objeto faz, ou seja, as aes executadas pelo ou sobre o objeto.
No mesmo caso acima, que a clula A2 teve a cor de preenchimento alterada para
amarelo, agora a clula A2 sofrer a ao do mtodo, que ser o de limpar o contedo da
clula.
A sintaxe do cdigo para definir o contedo limpo da clula :
Range("a2").ClearContents

Nome do objeto

Mtodo

O Excel possui mais de 300 mtodos, que sero escritos da forma: Objeto . Mtodo

Alguns exemplos de propriedades de objetos e suas aplicaes


Ingls

Portugus

Name

Nome

ActiveCell

ClulaAtiva

Address

Endereo

Offset

Exemplo de Uso
a = ActiveSheet.Name

Armazena na varivel a o nome da


planilha ativa.

ActiveCell.Interior.ColorIndex = 15

Preenche a clula ativa com a cor


numero 15 (Cinza)

a = ActiveCell.Address

Armazena na varivel a o endereo


da clula ativa.

Deslocamento ActiveCell.Offset(1,0).Select

Seleciona a clula localizada a uma


linha e na mesma coluna da clula
ativa

a = ActiveSheet.Name

Armazena na varivel a o nome da


planilha ativa.

Clulas

Cells.Clear

Limpa o contedo e formatao de


todas a clulas da planilha

Limpar

Range("A1").Clear

Limpa o contedo e formatao,


apenas da clula A1

ActiveSheet

PlanilhaAtiva

Cells
Clear

ClearContents LimparContedo Range("A1").ClearContents


Copy

Resultado do Cdigo

Copiar

Range("A1").Copy

Limpa apenas o contedo da clula A1


D o comando de copiar na clula A1

16

Imerso em Macros e VBA - Excel


Cut

Recortar

EntireColumn

ColunaInteira

EntireRow

LinhaInteira

Hidden

Range("A1").Cut

D o comando de recortar na clula A1

Range("a1").EntireColumn.Delete

Excluir toda a coluna A da planilha


ativa

Range("A1").EntireRow.Clear

Limpa toda a linha 1 da planilha ativa

Oculta

Range("A1").EntireRow.Hidden =
True

Oculta a linha 1 da planilha ativa

Bold

Negrito

Range("A1").Font.Bold = True

Inseri o negrito na clula A1

Font

Fonte

Range("A1").Font.Italic = True

Inseri o itlico na clula A1

Activate

Ativar

Sheets(1).Activate

Ativa (seleciona) a primeira planilha do


arquivo

Visible

Visvel

Sheets(1).Visible = false

Oculta a primeira planilha do arquivo

Add

Adicionar

Sheets.Add

Adiciona uma nova planilha ao arquivo

Count

Contagem

a = Sheets.Count

Armazena na varivel a a
quantidade planilhas e existentes no
arquivo.

2.3.

Estrutura de Objetos do Excel

No podemos esquecer que todas as propriedades e mtodos estavam em uma


seqncia hierrquica no exemplo anterior, assim como os objetos tambm estavam.
A condio hierrquica ser sempre apresentada da esquerda para direita do nvel mais
alto para os objetos de nvel mais baixo O Excel contm uma rica coleo de objetos. A
seguir h o modelo da estrutura desses objetos.

17

Imerso em Macros e VBA - Excel


Hierarquia dos Objetos do Aplicativo Excel em cdigo VBA

2.4.

Objetos Range e Cells

So objetos que correspondem a rea de clulas e clulas respectivamente. Ambas tm


a mesma utilidade, porm com sintaxes diferentes.

Objeto Range
Permite selecionar uma rea de qualquer tamanho na planilha. Identificando a rea pelo
endereo da Clula. Ex : A1 ou A1:B20
Em todos os exemplos abaixo, o comando iria preencher a rea correspondente com o
nmero 50
Ex1: Selecionar o intervalo A10: B20
Range( A10: B20).Value = 50

18

Imerso em Macros e VBA - Excel


Ex2 : Selecionar 03 intervalos diferentes: A10:B20, C20:C25, H9:H100
Range(A10:B20, C20:C25, H9:H100).Value = 50

Ex3 : Selecionar o intervalo compreendido entre a Clula Ativa e B20


Range(ActiveCell, B20 ).Value = 50

Ex4: Selecionar as clulas A10 e A20 somente


Range(A10, A20).Value = 50

Ex5: As clulas podem ser referenciadas com intervalos nomeados. Este exemplo
selecionar 2 intervalos nomeados diferentes, Area1 e Area2
Range(Area1, Area2).Value = 50

Objeto Cells
Utiliza essa instruo quando quiser se basear na posio da clula na planilha e no pelo
nome da clula como no objeto Range.
A posio da clula dada primeiro pelo nmero da linha e depois o nmero da coluna
da clula a ser referenciada.
Ex1: Selecionar a clula B1
Cells(1, 2).Select

Ex2: Selecionar a clula E3


Cells(3, 5).Select

Ex3: Selecionar a clula C8 at a clula Ativa


Range(Cells(8, 3), ActiveCell).Select

19

Imerso em Macros e VBA - Excel

Obs.: Caso no seja especificado qual a clula a propriedade Cells executa em todas
as clulas.

Ex1 - No identificando uma clula em especfico.


Cells.Delete
Este comando far com que todas as clulas da planilha ativa sejam apagadas.

Ex2 - No identificando uma clula em especfico.


Cells.ClearContents
Este comando limpar o contedo (no incluindo a formatao) em todas as clulas da
planilha ativa.

2.5.

Deslocamento na planilha utilizando a propriedade Offset

A propriedade Offset deve ser empregada para determinar uma referncia de acordo com
um deslocamento, que pode ser um dos quatro sentidos: acima, abaixo, esquerda ou para
direita.
Offset uma propriedade das mais utilizada na criao de macros.
Sintaxe:
ActiveCell.Offset(Linha, Coluna).Propriedade

20

Imerso em Macros e VBA - Excel

Ex - Estas linhas de cdigo executam uma ao na qual selecionada a segunda clula


direita da clula ativa:
ActiveCell.Offset(0, 2).Select
Ou
ActiveCell.Offset(, 2).Select

Para selecionar a clula localizada trs linhas a cima da clula ativa, digitem:
ActiveCell.Offset(-3, 0).Select

Para selecionar a clula localizada uma coluna esquerda e uma linha acima da clula
ativa, a linha de cdigo ser:
ActiveCell.Offset(-1, - 1).Select

21

Imerso em Macros e VBA - Excel

2.6.

Objetos Sheets e Plan

Quando se tratar de identificar uma planilha poderemos fazer uso de trs mtodos
diferentes em VBA.
A) Identificando pelo nome da planilha
Utiliza-se o nome da planilha como referncia.
Sintaxe:

Sheets(Despesas).
Digita-se entre aspas e parntese o
nome da planilha

Neste procedimento voc ir utilizar o objeto Sheets precedido do nome da planilha.


Obs.: Caso o nome seja alterado na guia de planilhas, o mesmo no ocorrer
automaticamente no cdigo VBA, devendo ser feita a alterao no cdigo manualmente.

B) Identificando pela posio de ordem de planilha


Utiliza-se o nmero correspondente a posio seqencial da mesma.
Sintaxe:

Sheets(2).
Digita-se o nmero da posio da mesma na
guia de planilhas (sem aspas)

Neste procedimento voc ir utilizar o objeto Sheets precedido do nmero seqencial da


mesma na guia de planilha.
Obs.:
Caso a ordem das planilhas sejam alteradas, o mesmo no ocorrer
automaticamente no cdigo VBA, devendo ser feita a alterao no cdigo manualmente.

22

Imerso em Macros e VBA - Excel


C) Identificando pelo nome interno da planilha
Utiliza-se o nome de programao da planilha. Esse nome pode ser localizado no VBE
(Visual Basic Editor)
Sintaxe:
Plan2.
Digita-se apenas o nome correspondente
a planilha

Obs.: Neste caso a ordem das planilhas sejam alteradas, o mesmo no ocorrer
automaticamente no cdigo VBA, devendo ser feita a alterao no cdigo manualmente

Onde localizar o nome interno da planilha?


O nome interno se encontra na Janela de Projeto do VBE. O nome interno da planilha
vem precedido do nome dado planilha.

Exemplos da utilizao dos trs mtodos


Para exemplificar iremos criar um comando para excluir as linhas 1 a 5 da planilha
( .Rows("1:5").Delete ) chamada de Receitas.
Vamos trabalhar como o arquivo tendo 3 planilhas conforme a figura abaixo:

23

Imerso em Macros e VBA - Excel


 Primeiro Mtodo Nome da Planilha
Sheets("Receitas").Rows("1:5").Delete

 Segundo Mtodo Pela ordem seqencial (posio da mesma na guia de planilhas)


Sheets(2).Rows("1:5").Delete

 Terceiro Mtodo Pelo nome constante na Janela de Projetos dentro do editor do


VBA
Plan2.Rows("1:5").Delete

2.7.

Uso da Instruo With

fcil perceber que um objeto pode possuir diversas propriedades e diversos mtodos.
Nestes casos para facilitar a digitao e simplificao das instrues do cdigo,
poderemos utilizar a instruo With / End With da seguinte forma:

Esta macro alteraria vrias propriedades da mesma rea (cor, tamanho, negrito, itlico). A
instruo With permite agrupar para o objeto ActiveCell a propriedade Font que possui
vrios mtodos .
Ou seja, a instruo With permitiu reduzir a nossa digitao. Todas as propriedades
colocadas dentro da instruo With sero entendidas como da Activecell.Font., que est
no incio da instruo.

24

Imerso em Macros e VBA - Excel

3. Caixas de Dilogo (MsgBox e InputBox)


Para haver interao entre o usurio da macro e o sistema (programa) necessrio que
exista uma interface de comunicao. Essa interface poder ser mais ou menos complexa
e completa, contudo existem dois elementos bsicos para estabelecer esta ligao:
InputBox e MsgBox.

 InputBox uma funo que permite ao utilizador introduzir dados no programa

portanto um mecanismo de Input. (entrada de dados)

 MsgBox um mecanismo de Output (sada de dados) ou seja, permite que o sistema


comunique algo a pessoa que est utilizando.

3.1.

InputBox (Caixa de Entrada de Dados)

O que faz
1. Exibe uma janela com uma caixa de texto para a insero de dados.
2. Espera que o utilizador introduza os dados e/ou acione um dos botes.
3. Como uma funo, produz um valor final. Este consiste nos dados inseridos pelo
utilizador na forma textual - String.

Sintaxe da InputBox

InputBox (Texto Inteno , Texto do Ttulo , Texto Padro , Xpos, Ypos )

Obs.: Numa primeira avaliao da funo, pode-se dizer que a mesma possui diversos
parmetros, mas somente o primeiro obrigatrio, sendo que todos os outros quando
ignorados assumem valores atribudos por padro.
Veja a tabela a seguir para entender melhor esses parmetros.

25

Imerso em Macros e VBA - Excel


Parmetros da sintaxe da InputBox
Parmetro

Texto Inteno
(Obrigatrio )

Comentrio
Expresso textual exibida como mensagem na janela de input.
A dimenso mxima de 1024 caracteres.
Se pretender construir uma mensagem com mais de uma linha poder utilizar o
caractere Enter - Chr(13). A juno dos elementos que constituem a mensagem
realizada atravs do operador &.

Xpos
(Facultativo)

Exemplo:
"A Soma de 3 com 5 :" & Chr(13) & " 8 "
Titulo da janela de input. Se este for omitido, aparecer por padro o nome da
aplicao.
Expresso inserida por padro na caixa de insero de dados e constituir a
resposta se o utilizador no introduzir outra.
Se este parmetro for omitido, ficar vazia.
Nmero que identifica a distncia horizontal entre o lado esquerdo do cran e a
janela de input. Se este valor for omitido a janela aparecer centrada
horizontalmente.

Ypos
(Facultativo)

Nmero que identifica a distncia vertical entre o lado superior do cran e a


janela de input. Se este valor for omitido a janela ficar posicionada a 1/3 da
parte inferior do cran

Texto de Ttulo
(Facultativo)
Texto Padro
(Facultativo)

Exemplo Prtico

Na janela de input ser exibida a mensagem Introduza o Nome do Aplicativo:, o ttulo da


caixa ser CAIXA DE ENTRADA e o valor padro da caixa de insero ser Excel.
Resultado da caixa

26

Imerso em Macros e VBA - Excel

3.2.

MsgBox - (Caixa de Mensagem)

O que faz
1. Exibe na tela uma janela com uma mensagem.
2. Espera que o utilizador acione um dos botes.
3. Como uma funo produz um valor final. Devolve um nmero inteiro indicando o
boto que foi clicado.

Ttulo Caixa
Texto Caixa
Estilo Boto

Sintaxe da MsgBox

MsgBox Texto da caixa , Estilo botes , Titulo da Cx

Obs.: Tanto a MsgBox quanto a InputBox, possui diversos parmetros, mas somente o
primeiro obrigatrio, sendo que todos os outros quando ignorados assumem valores
atribudos por padro.

Parmetros da sintaxe
Parmetro

Texto da Caixa
(Obrigatrio)

Comentrio
Expresso textual exibida como mensagem na janela de Msgbox.
A dimenso mxima de 1024 caracteres.
Se pretender construir uma mensagem com mais do que uma linha poder
utilizar o caractere Enter Chr(13)
Exemplo:

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

Estilo Botes
(Facultativo)

Nmero que identifica o tipo de botes que se pretende visualizar na janela


de output. Ver tabela seguinte.
Se for omitido assumir o valor 0 por padro.

Titulo da Cx
(Facultativo)

Titulo da janela de Msgbox. Se este for omitido, aparecer por padro o


nome do aplicativo.

27

Imerso em Macros e VBA - Excel


Exemplo Prtico 1 - Criao de Msgbox

Na janela ser exibida a mensagem "Rotina Executada com Sucesso!!!", o estilo ser o
vbInformation boto OK e o titulo da janela ser SISTEMA CAVALCANTE.

Estilos da Caixa
Os estilos disponveis so vrios podendo ainda serem combinados. Voc
poder ainda informar os estilos pelo nmero cdigo. A tabela abaixo apresenta
todos os estilos que podero ser utilizados
Cdigos de Botes que podem se utilizados na construo da sintaxe
Estilo do Boto

Cod

Descrio

VbOKOnly
VbOKCancel
VbAbortRetryIgnore
VbYesNoCancel
VbYesNo
VbRetryCancel
VbCritical
VbQuestion
VbExclamation
VbInformation
VbDefaultButton1
VbDefaultButton2
VbDefaultButton3
VbDefaultButton4

0
1
2
3
4
5
16
32
48
64
0
256
512
768

VbApplicationModal

Exibe somente o boto de OK.


Exibe os botes OK e Cancelar
Exibe os botes Anular , Repetir, e Ignorar
Exibe os botes Sim, No, e Cancelar .
Exibe os botes Sim e No.
Exibe os botes Repetir e Cancelar.
Exibe o cone de Mensagem de Erro Fatal.
Exibe o cone de Questionamento.
Exibe o cone de Mensagem de Ateno.
Exibe o cone de Mensagem de Informao.
O primeiro boto o selecionado por padro.
O segundo boto o selecionado por padro.
O terceiro boto o selecionado por padro.
O quarto boto o selecionado por padro.
Application modal o utilizador s depois de responder MsgBox
que poder dar continuidade ao trabalho na aplicao corrente.
System modal - o utilizador s depois de responder MsgBox
que poder dar continuidade ao trabalho em qualquer aplicao em
curso no sistema.

VbSystemModal

4096

28

Imerso em Macros e VBA - Excel


Exemplo Prtico 2 - Criao de Msgbox (Combinando 2 estilos)

Resultado da Caixa

Exemplo Prtico 3 - Criao de Msgbox (Informando o estilo pelo nmero cdigo)

Resultado da Caixa

29

Imerso em Macros e VBA - Excel

4. Utilizando Variveis
Um dos recursos mais importantes na criao de programas so as variveis. A varivel
constitui num espao de memria utilizado para armazenar temporariamente informaes
(dados), que podero ser utilizados para diversos fins.
Toda varivel deve possuir um nome que no pode ter mais de 255 caracteres e necessita
comear por um caractere alfabtico.
aconselhvel que toda varivel seja declarada, para facilitar o entendimento da rotina e
evitar possveis conflitos entre cdigos do sistema.
A Declarao permite identificar a varivel para o sistema e definir qual o tipo informao
ela ir armazenar.
A declarao consiste de inserir a instruo Dim antes do nome da varivel.

Sintaxe da declarao da varivel:


Dim Varivel as Tipo

A declarao deve ser inserida no incio da Sub Rotina ou do Mdulo, dependendo da


abrangncia que ir ter.

30

Imerso em Macros e VBA - Excel

4.1.

Tipos de Variveis

O tipo de varivel est associado ao gnero (Numero, Texto, Data, etc.) de informao
que ser armazenada.

Principais Tipos de Variveis do VBA


Tipo

Tamanho

Descrio

Boolean

2 bytes

Permite armazenar valores Boolenos True ou False

Byte

1 Byte

Permite armazenar nmeros sem sinal entre 0 e 255

Currency

8 bytes

Permite armazenar moeda

Date

8 Bytes

Permite armazenar datas

Decimal

14 bytes

+/- 79.228.162.514.264.337.593.543.950.335 sem vrgula


decimal.

Double

8 bytes

Permite armazenar um numero real desde -1.79769313486232E308 at 4.94065645841247E-324


para
valores
negativos,
e
desde
1.79769313486232E308 at 4.94065645841247E-324 para valores positivos.

Integer

2 bytes

Permite armazenar nmeros inteiros entre -32.768 e 32767

Long

4 bytes

Permite armazenar nmeros inteiros entre -2 147 483 648 e 2 147 483 648

Object

4 bytes

Utilizado para fazer referncia a um objeto do Excel

Single

4 bytes

Permite armazenar um numero real desde -3.402823E38 at -1.4011298E-45,


para valores negativos e desde 3.402823E38 at 1.4011298E-45, para
valores positivos.

String

1 byte por
Permite armazenar conjuntos de caracteres em forma de texto.
caractere

Variant

16 bytes

Permite armazenar qualquer tipo de dados

31

Imerso em Macros e VBA - Excel


Exemplo de uso de variveis

Comentrio do cdigo acima


No incio da rotina foram declarado as variveis, cada uma com seu tipo: String (Texto),
Date (Data) e Single (Valor Numrico).
Logo abaixo as variveis foram carregadas com seus respectivos valores, na ltima linha
foi transferido todo o contedo das variveis para completar o texto da MsgBox.
Dica:
Note que na rotina acima foi colocada a instruo Option Explicit
Isto opcional, porm de grande valia pois isto ir forar que o sistema
exija que toda varivel seja declarada com a instruo Dim
Assim, se voc colocar um texto indevidamente ele no ser confundir com
uma varivel, e dessa forma o sistema dar um alerta com a seguinte
mensagem de erro:

Obs.: Quando no for declarado o Tipo da Varivel, esta assume por padro o tipo
Variant, conforme a tabela de variveis acima.

32

Imerso em Macros e VBA - Excel


Exemplo de declarao sem definir o tipo da varivel

Dim MinhaVariavel

No declarando um Tipo para uma varivel voc ter Prs e Contras


Prs
Diminui o nmero de linhas de cdigo.
No necessrio estar preocupado se a varivel est ou no declarada porque o VBA
automaticamente o faz.

Contras
Aumenta o tempo de execuo o VBA primeiro precisa reconhecer o tipo de dados
com os quais ir trabalhar.

O tipo Variante consome mais memria (uma vez que tem que alocar espao para
qualquer tipo de dados que lhe seja atribudo) 16 bytes mais um byte por caractere
se for String  problemas de performance para Sub Rotinas grandes.

No possvel saber o tipo de dados que uma determinada varivel contm,


dificultando a deteco de erros.

33

Imerso em Macros e VBA - Excel

4.2.

Abrangncia ou Domnio das Variveis

Abrangncia, domnio ou scopo de uma varivel, refere-se rea da aplicao na qual


essa varivel pode ser acessvel e utilizada, ou seja, at onde o elemento varivel ser
reconhecido.
O Domnio da varivel ser definido pelo local onde ela for declarada.
Existem 3 nveis de domnio para as variveis:

mbito do Procedimento ou Procedimental


mbito do Modulo ou Modular
mbito do Projeto

Ir depender de cada caso para que seja definido em qual domnio pertencer a varivel.
1 mbito de Procedimento: O nvel mais baixo. A varivel ter abrangncia apenas na
Sub Rotina aonde ela foi declarada, ou seja, no procedimento onde ela estiver.

Varivel declarada a mbito de


procedimento

2 - mbito de Mdulo: Esse nvel permite que a varivel seja reconhecida e utilizada em
todo o mdulo em que foi declarada. Para isso, a varivel deve ser declara na Seo de
Declaraes, que se localiza na parte superior dos mdulos.
Quando for declarar a varivel em nvel de modulo voc poder tambm utilizar a
instruo Private ao invs de Dim.

34

Imerso em Macros e VBA - Excel

Varivel declarada a mbito de mdulo

3 mbito de Projeto: Esse o nvel mais alto. Este nvel disponibiliza a varivel para
ser reconhecida em qualquer mdulo do seu projeto. Isso significa que, se a varivel for
declarada no Mdulo1, ela poder ser utilizada e reconhecida tambm no Mdulo2, assim
como em qualquer outro mdulo do projeto.
Para declarar variveis em nvel de projeto, utilize a instruo Public ou Global ao invs
de Dim tambm na seo de declaraes gerais do mdulo, podendo ser em qualquer
mdulo.

Varivel declarada a mbito de projeto,


com a instruo Public precedendo a
varivel.

35

Imerso em Macros e VBA - Excel

5. Estruturas de Deciso
As estruturas de deciso permitem efetivamente programar situaes aonde o sistema
seguir um ou outro caminho. No VBA existem duas formas de montar uma estrutura de
deciso, atravs das estruturas:
 IF... Then

5.1.

Estrutura IF... Then

Essa estrutura a mais conhecida. Toda linguagem de programao implementa esta


estrutura. O conceito simples: uma condio testada e se for verdadeira todas as
linhas de cdigo abaixo da linha de teste sero executadas at encontrar uma instruo
Else ou End If
Sintaxe da Estrutura IF... Then com 2 opes de retornos.

If (condio) Then
Else

(Instrues a ser realizadas se o teste acima for verdadeiro)


(Instrues a ser realizadas se o teste acima for falso)

End If
Comentrio sobre a sintaxe acima:
1. Avalia-se a condio, que dever ser uma expresso (Verdadeiro ou Falso) colocada
como primeiro parmetro;
2. Se a condio for Verdadeira, ento(Then) realiza as operaes colocadas no
segundo parmetro, abaixo da linha de teste.
3. Caso contrrio(Else), realiza as operaes que formam o terceiro parmetro, abaixo
da linha do Else.

Obs.: A palavra Else opcional, sendo que no caso de ser omitida, a avaliao negativa

da condio implica uma sada automtica da instruo IF, executando a linha logo abaixo
da instruo End If

Aplicao Prtica da Estrutura IF... Then


36

Imerso em Macros e VBA - Excel

Comentrio do Cdigo Acima


A macro testa se a data que est na clula A1 maior a data atual (Date), caso seja
maior o teste ser Verdadeiro e ento aparecer o texto A VENCER na clula B1 caso
contrrio o teste foi Falso ento a execuo ocorrer aps a instruo Else, ou seja,
aparecer na clula B1 o texto PAGAR

Sintaxe da Estrutura IF... Then com 3 ou mais opes de retornos

If (condio 1) Then
(Instrues a ser realizadas se o teste acima for verdadeiro)

ElseIf (condio 2) Then


(Instrues a ser realizadas se o teste acima for verdadeiro)

ElseIf (condio 3) Then


(Instrues a ser realizadas se o teste acima for verdadeiro)

ElseIf (condio 4 ) Then


(Instrues a ser realizadas se o teste acima for verdadeiro)

ElseIf (condio 5) Then


(Instrues a ser realizadas se o teste acima for verdadeiro)

Else
(Instrues a ser realizadas se nenhum teste acima for verdadeiro)

End If

37

Imerso em Macros e VBA - Excel


Esta instruo prope uma condio alternativa se o teste da condio anterior tiver tido
um resultado negativo o teste continuar sendo feito na prxima condio ElseIf.
Essa forma de estrutura propem instrues adicionais (ElseIf) quantas forem
necessrias para inserir todas as condies.

Aplicao Prtica da Estrutura IF... Then com 3 retornos possveis

Comentrio do Cdigo Acima


O teste agora consiste em 3 opes possveis de retorno. A VENCER, PAGAR e
PAGAR COM JUROS.
Dessa forma a estrutura deve utilizar a instruo adicional ElseIf para aumentar as
possibilidades de testes dentro da rotina.

Obs.: Poder ser colocado tantos ElseIf na estrutura, quanto for necessrio.

38

Imerso em Macros e VBA - Excel

5.2.

Operadores And e Or em estruturas IF... Then

Para testar vrias condies, na mesma linha do IF voc pode utilizar o operador And
e/ou o operadir Or aps cada condio adicionada.

5.2.1.

Operador And

Este operador far uma conjuno lgica, que determina que todas as condies inseridas
devem ser verdadeiras para que o resultado seja verdadeiro. Se uma das condies for
falsa o resultado ser falso.
Sintaxe da Estrutura IF... Then e And

If (Condio1) And (Condio2) And (Condio3) Then


(Instrues a ser realizadas se todas as condies forem verdadeiras)

Else
(Instrues a ser realizadas se uma ou mais condies forem falsas)

End If

Aplicao prtica do Operador AND

39

Imerso em Macros e VBA - Excel

5.2.2.

Operador Or

Este operador deve ser empregado quando for efetuar uma disjuno lgica, ou seja,
quando pelo menos uma das condies seja Verdadeira. Somente se todas as condies
forem Falsas o resultado ser falso.
Sintaxe da Estrutura IF... Then e Or

If (Condio1) Or (Condio1) Or (Condio1) Then


(Instrues a ser realizadas se uma ou mais das condies forem verdadeiras)

Else
(Instrues a ser realizadas se todas as condies forem falsas)

End If

Aplicao prtica do Operador Or

40

Imerso em Macros e VBA - Excel

6. Estruturas de Repetio (Loop)


Na elaborao de rotinas h situaes em que necessrio executar aes que devem se
repetir por vrias e vrias vezes, nestes casos para que no seja necessrio repetir o
cdigo centenas ou milhares de vezes, so utilizadas estruturas que fazem com que uma
determinada seqncia de cdigos se repita por quantas vezes for necessrio.
As estruturas de repetio mais utilizadas so:

6.1.

Do While.... Loop
Do Until Loop

Estrutura Do While... Loop

Realiza um loop (Repetio das linhas de cdigo) enquanto a condio da estrutura for
Verdadeira.
A estrutura Do While Loop pode assumir 2 maneiras diferentes. Com o teste da
condio sendo feito no incio ou com o teste no fim da estrutura.
Estrutura 1 - Teste no Incio da estrutura
Do While (condio)
(Instrues a realizar em cada interao)
Loop

Essa estrutura testa a condio no incio do loop e somente executa as instrues se a


condio for verdadeira. Se a condio for falsa, ser executada a instruo abaixo da
palavra-chave Loop

Exemplo Prtico

41

Imerso em Macros e VBA - Excel

Estrutura 2 - Teste no Final da estrutura


Do

(Instrues a realizar em cada interao)

Loop While (condio)

J essa forma, executa as instrues pelo menos uma vez visto que ela somente testa a
condio no final da estrutura. Caso seja verdadeira, o loop ser executado novamente
at que a condio seja falsa.
Exemplo Prtico

42

Imerso em Macros e VBA - Excel


Aplicaes Prticas
Utilizando a condio teste no inicio do Loop.
Caso Prtico
Objetivo criar uma rotina que transforme todos o textos contidos nas clulas da colunaA
em inicial maiscula. Ela ter que executar da primeira at a ultima clula preenchida
desta coluna.

Tabela Com os Textos que Sero Convertidos

Aplicao Do While Loop

Comentrios do Cdigo:
O Loop ocorrer, ou seja, os cdigos se repetiro, enquanto a clula testada seja
diferente de empty (vazio). Assim que a clula testada estiver vazia o Loop termina,
seguindo a leitura do cdigo para logo abaixo da palavra Loop.

43

Imerso em Macros e VBA - Excel

6.2.

Estrutura Do Until... Loop

Essa estrutura o inverso da estrutura Do While.. Loop, pois as instrues sero


executadas enquanto a condio for Falsa e no Verdadeira
Essa estrura tambm pode ser criada de 2 maneiras diferentes. Com o teste da condio
sendo feito no incio ou com o teste sendo feito no final da estrutura.

Estrutura1 - Teste no Incio da estrutura


Do Until (Condio)
(Instrues a realizar em cada interao)
Loop
Lembrando: Nesta estrutura, enquanto a condio for Falsa, o cdigo dentro do lao
ser executado at que a condio se torne Verdadeira. Sendo assim, se a condio for
Verdadeira j na primeira vez, o lao ser executado somente uma nca vez.

Exemplo Prtico

Comentrios do Cdigo Acima


O Loop insere uma nova linha enquanto a clula testada no tiver a propriedade negrito
da fonte False, ou seja, ser inserida uma nova linha sempre que a fonte estiver negrito.

44

Imerso em Macros e VBA - Excel


Estrutura 2 - Teste no Final da estrutura
Do
(Instrues a realizar em cada interao)
Loop Until (Condio)

Exemplo Prtico

Comentrios do Cdigo Acima


Esse cdigo executa a mesma ao de inserir linhas que no caso anterior, porm neste
caso uma linha ser inserida de qualquer maneira, j que o teste para verificar se a fonte
est em negrito s e feita no final do Loop.

Comentrio:
Geralmente a estrutura Do While Loop mais utilizada do que a estrutura
Do Until... Loop , visto que as duas so muitssimo parecidas, sendo a nica
diferena entre elas a lgica empregada.

45

Imerso em Macros e VBA - Excel

7. Macros Auto-Executveis
As macros auto executveis so aquelas que so executadas com a ocorrncia de um
evento ou ao.
Por Exemplo:
 Ao selecionar/ativar uma planilha
 Ao abrir um arquivo
 Ao fechar um arquivo
 Ao salvar um arquivo
 Ao selecionar uma clula
 Ao inserir dados em uma clula
A maneira de criar uma macro auto-executvel a mesma que criar uma macro comum
que chamada atravs de um boto, a diferena onde dever ser colocada a rotina.
Uma macro comum criada em pgina dentro de um mdulo, as macros autoexecutveis ficaram na pgina de cdigo dentro de uma planilha ou de um arquivo, ir
depender da opo que voc desejar. A seleo do objeto: Worksheet (planilha) ou
Workbook (arquivo) dever ser feita na Janela de Objetos e o evento na Janela de
Procedimentos ou Eventos.
Veja a figura abaixo:

Janela de Procedimento ou
Eventos
Janela de Objetos

46

Imerso em Macros e VBA - Excel

7.1.

Macro Auto Executvel de Planilha

Para criar uma macro auto executvel em planilha voc dever escrever o cdigo na
planilha onde a macro ser executada.
Exemplo de Macro Auto Executvel em Planilha
O exemplo ser feito na chamada Resultado. Ser inserida uma macro ao abrir essa
planilha.
Procedimentos:
1 - Abra o Editor do VBA.
2 - Na Caixa de Projetos ao lado esquerdo da tela, d um duplo clique na planilha de
deseja inserir a macro.(no caso a Resultado)
3 - Na Caixa de Objetos escolha a opo Worksheet
4 - Na Caixa de Eventos escolha a opo Activate

Cx. de Objetos

Cx. de Eventos

Caixa de Projetos

5 - Em seguida escreva o cdigo dentro da Private Sub que apareceu.

47

Imerso em Macros e VBA - Excel

Obs.: Essa macro ser executada quando a planilha Resultado por ativada/selecionada e
ela ir desabilitar o cabealho de linha e coluna e tambem exibir a planilha em tela
inteira.
Como desejamos que essas opes sejam somente para a planilha Resultado, ento
devemos criar outra macro para voltar tudo como antes.
Para isso devemos criar outra macro, agora com ela ser executada quando sair dessa
planilha.

Procedimentos da 2 rotina
1 - Na Caixa de Eventos escolha a agora a opo Deactivate
2 - Em seguida escreva o cdigo dentro da Private Sub que apareceu.

Resultado da Macro:
Quando trocar a seleo dessa planilha por outra ou seja desativ-la (Deactivate), o
processo ser o inverso da macro anterior, os cabealhos de linha e coluna voltaro a
aparecer e a tela ser exibida em formato normal.

48

Imerso em Macros e VBA - Excel

7.2.

Macro Auto Executvel em Clula de Planilha

As macros auto executveis de clulas devero ser feitas dentro da pgina de


programao correspondente a planilha onde pertence s clulas. A escolha do evento
que ir definir quando que ocorrer a execuo.

Exemplo1 - Macro Clula da Planilha


Neste exemplo a macro ser executada em uma rea especfina no caso na clula Clula
B10 da Resultado e ser executada quando sair dessa clula aps haver digitado algo.

Procedimentos:
1 - Abra o Editor do VBA.
2 - Na Caixa de Projetos ao lado esquerdo da tela, d um duplo clique na planilha de
deseja inserir a macro.(no caso a Resultado)
3 - Na Caixa de Objetos escolha a opo Worksheet
4 - Na Caixa de Eventos escolha a opo SelectionChange
5 - Em seguida escreva o cdigo dentro da Private Sub Worksheet_SelectionChange
que apareceu.

Obs.: Target a varivel padro do evento SelectionChange e representa a rea onde


foi digitado algo naquele momente.

49

Imerso em Macros e VBA - Excel


Exemplo2 - Macro em Clula de Planilha
Neste caso ser executada a macro quando houver troca de valores ou textos em clulas
da coluna F que corresponde a coluna de nmero 6. O evento agora ser o Change.

Resultado da Macro:
Toda vez que digitar algo em clulas da coluna 6 ( F ), aparecer na clula da direita a
data e horrio da digitao.
Obs.: Como voc pode perceber a escolha do evento fundamental, por ele que o
sistema sabe quando a macro dever ser executada. Abaixo apresentado uma tabela
com todos os eventos para planilha.
Tabela de Eventos de Planilha que o VBA disponibiliza

Evento

Descrio

Activate

Ocorre quando uma planilha ou folha de grfico ativado (selecinado)

Deactivate

o inverso do evento Activate, ocorrendo quando uma planilha ou folha de


grfico desativado (perde a seleo)

Change

Ocorre quando alterada uma clula da planilha, seja pelo usurio ou por um
vnculo externo

BeforeDoubleClick

Ocorre ao dar um duplo clique em uma planilha ou folha de grfico.

BeforeRightClick

Ocorre ao clicar com o boto direito do mouse em uma planilha ou folha de


grfico.

Calculate

Ocorre antes da planilha ser recalculada.

FollowHyperlink

Ocorre quando clicar em um hyperlink na planilha

SelectionChange

Ocorre quando for modificada a seleo em uma clula da planilha. Exemplo: Se


a clula B10 estiver selecionada e voc clicar em outra clula, desta forma
ocorreu o evento, pois a seleo foi modificada

50

Imerso em Macros e VBA - Excel

7.3.

Macro Auto Executvel em Arquivo

Exemplo 1 - Macro Auto Executvel em Arquivo


No exemplo a seguir a macro far com que toda vez que o arquivo for aberto primeira
planilha da guia seja selecionada/ativada (Sheets(1).Activate) e um teste com uma
estrutura Select Case ser feito para verificar a hora atual do sistema e dessa forma
surgir uma caixa de mensagem informando Bom Dia!! ou Boa Tarde!! ou Boa
Noite!!.
Procedimentos:
1 - Abra o Editor do VBA.
2 - Na Caixa de Projetos ao lado esquerdo da tela, d um duplo clique em Esta Pasta de
Trabalho. (verso em portugus)
3 - Na Caixa de Objetos escolha a opo Workbook
4 - Na Caixa de Eventos escolha a opo Open

Caixa de Projetos

Cx. de Objetos

Cx. de Eventos

51

Imerso em Macros e VBA - Excel


Exemplo 2 - Macro Auto Executvel em Arquivo
Neste exemplo iremos exibir uma barra de Ferramentas Personalizada, somente quando o
arquivo chamado Meu Sistema for ativado ou seja selecionado.
Procedimentos:
1 Antes de criar a macro, crie primeiro uma barra de ferramentas personalizada.
Clicando no Menu Ferramas  Personalizar

2 D o nome para a barra de: MinhaBarra


3 Insira na barra alguns botes de atalho. Clique no Comando desejado e arraste para a
Barra.

52

Imerso em Macros e VBA - Excel


4 Anexe a nova barra ao arquivo, cliando no boto Anexar...

5 Selecione o nome da barra na caixa da esquerda e Clique no boto Copiar >>

6 Feche a tela personalizar.


7 Agora chegou a hora de criar a macro. Abra o Editor do VBA.
8 - Na Caixa de Projeto ao lado esquerdo da tela, d um duplo clique em Esta Pasta de
Trabalho. (verso em portugus)
9 - Na Caixa de Objetos escolha a opo Workbook
10 - Na Caixa de Eventos escolha a opo Activate e insira o cdigo abaixo

Cx. de Objetos

Cx. de Eventos

53

Imerso em Macros e VBA - Excel


Essa macro ir fazer que toda a vez que o arquivo for selecionado a barra seja visvel.
Bom, ento tambm devemos criar outra macro para fazer o contrrio, ou seja, quando o
arquivo perder a seleo a barra MinhaBarra seja oculta.
Seguindo ento:
11 - Na Caixa de Eventos escolha agora a opo Deactivate e insira o cdigo abaixo

Comentrio do Cdigo Acima


Trabalhamos com a propriedade .Visible
Quando ocorrer o evento Activate a propriedade .Visible da Barra MinhaBarra se
tornar True , assim a barra estar disponvel para o usurio.

Application.CommandBars("MinhaBarra").Visible = True

Ocorrer o contrrio quando ocorrer o evento Deactivate . A propriedade .Visible


passar a ser False, dessa forma a barra no estar mais disponvel para o usurio.

Application.CommandBars("MinhaBarra").Visible = False

54

Imerso em Macros e VBA - Excel


Tabela de Eventos de Arquivo(pasta de trabalho) que o VBA disponibiliza

Evento

Descrio

BeforeClose

Ocorre quando a pasta de trabalho fechada

Open

Ocorre quando a pasta de trabalho aberta

BeforePrint

Ocorre antes que a pasta de trabalho seja impressa.

BeforeSave

Antes que a pasta de trabalho seja salva

Deactivate

Quando uma planilha, grfico ou a pasta de trabalho desativada

NewSheet

Quando uma nova planilha inserida na pasta de trabalho

SheetBeforeDoubleClick

Quando clicar duas vezes em uma planilha

SheetBoforeRightClick

Quando clicar com o boto direito do mouse em uma planilha

SheetCalculate

Quando ocorrer qualquer reclculo na pasta de trabalho

SheetChange

Quando for alterada qualquer clula de qualquer planilha da pasta de


trabalho

SheetDeactivate

Quando qualquer planilha da pasta de trabalho desativada

SheetFollowHyperkink

Quando qualquer hyperlink da pasta de trabalho for clicado

SheetSelectionChange

Quando alterar a seleo de qualquer planilha da pasta de trabalho

WindowActivate

Quando for ativada qualquer janela da pasta de trabalho

WindowDeactivate

Quando for desativa qualquer janela da pasta de trabalho

WindowResize

Quando for redimensionada qualquer janela da pasta de trabalho

DICA!!
Para que uma macro Auto_Open ou Auto_Close no seja executada,
mantenha pressionada a tecla SHIFT ao abrir ou fechar o arquivo.

55

Imerso em Macros e VBA - Excel

8. Utilizao Funes de Planilha no VBA


possvel no VBA-Excel utilizar qualquer funo de planilha em seu cdigo. A praticidade
se torna grande em virtude da sintaxe das funes serem as mesmas que quando
aplicadas diretamente na planilha.
O detalhe que devemos tomar cuidado que as funes no VBA sero em ingls
tambem necessrio que sejam precedidas do Objeto Application e da Propriedade
WorksheetFunction para logo em seguida o nome da funo (em ingls).

Exemplo1
Utilizando a funo de planilha SOMA para somar os valores do intervalo A2:A50 e
retornando o resultado na clula A1.
Na planilha:

=SOMA(A2:A50)
No VBA:

Range("a1") = Application.WorksheetFunction.Sum(Range("A2:A50"))
Obs.: A funo Soma chama-se Sum em ingls

Exemplo2
Utilizando a funo de planilha MEDIA para calcular a mdia aritimtica dos valores do
intervalo A2:A50 e D2:D50 e retornando o resultado na clula A1.
Na planilha:

=MDIA(A2:A50 ; D2:D50)

No VBA:

Range("A1") = Application.WorksheetFunction.Average(Range("A2:A50, D2:D50"))


Obs: A funo Media chama-se Average em ingls.

56

Imerso em Macros e VBA - Excel

Exemplo3
Utilizando a funo de planilha PROCV para localizar o valor contido na clula A5 da
planilha ativa no intervalo das colunas A:B da planilha chamada TABELA DIARIA e
retornando o resultado na clula A1 da planilha ativa.
Na planilha:

=PROCV(A5;'TABELA DIARIA'!A:B;2;FALSO)
No VBA:

Range("A1") = Application.WorksheetFunction.VLookup(Range("A5"), _
Sheets("TABELA DIARIA").Range("A:B"), 2, False)

Obs: A funo Procv chama-se VLookup em ingls.

Principais Funes de Planilha - Portugus / Ingls


Portugus

Ingls

Portugus

Ingls

CONT.VALORES

CountA

ARRED

Round

CONT.NUM

Count

DIA.DA.SEMANA

Weekday

CONT.SE

CountIf

ESCOLHER

Choose

MEDIA

Average

BDSOMAR

DSum

MAXIMO

Max

BDCONTAR

DCount

MINIMO

Min

BDMEDIA

DAverage

SOMASE

SumIf

MENOR

Small

SOMARPRODUTO

SumProduct

MAIOR

Large

PROCV

VLookup

PROJ.LIN

LinEst

PROCH

HLookup

TENDENCIA

Trend

CORRESP

Match

PGTO

Pmt

LOCALIZAR

Seach

TAXA

Rate

INDICE

Index

TIR

Irr

ORDEM

Rank

VPL

Npv

57

Imerso em Macros e VBA - Excel

9. Formatao no VBA
Voc poder formatar valores textos diretamente no VBA, para isso existem algumas
funes para executar isso.

9.1.

Utilizao da Funo: Format

A funo Format possibilita que voc defina o tipo de formatao que deseja, como por
exemplo: apresentar ou no o smbolo da moeda, quantidades de casas decimais, formato
percentual, etc. Format reconhecida por qualquer verso do Office.

Sintaxe: Format (Expressao, Forma)


Argumentos:
Expressao  Obrigatria. Qualquer expresso vlida.
Forma
 Uma expresso de formato vlida.
Exemplos:
Valor = Format (15404.72, "###,##0.00")
Retorna  15.404,72
Valor = Format (15404.72, "R$###,##0.00")

Exemplo quando for moeda com smbolo.

Retorna  R$15.404,72
Valor = Format (15404.72, "###,###.0000")
Retorna  15.404,7200
Valor = Format (15404.72, "###,##0,0")
Retorna  15.405
Valor = Format (15404.72, "###,###,000")
Retorna  15.405
Valor = Format (0.5, 0.00%" )
Retorna  50,00%
ATENO:

1) A diferena entre # e 0 que o # representa valor no obrigatrio e o O(zero)


faz com que se no houver nenhum nmero aparea o O(zero)
2) Cuidado com a , (vrgula) e o . (ponto) na formatao. Vrgula separa
casas centesimais e ponto as casas decimais (padro americano)

58

Imerso em Macros e VBA - Excel

9.2.

Utilizao da Funo: FormatNumber

(ATENO: s reconhecido nas verses Office2000 em diante)

Maneira mais rpida de formatar a quantidade de casas decimais.

Sintaxe: FormatNumber ( Expressao , NumDigitos )


Argumentos:
Expressao  Obrigatria. Valor ou expresso a ser formatada.
NumDigitos  Opcional. Indica quantas casas direita da decimal sero exibidas. Se
no for informado nada, ser apresentado na forma da configurao regional do
computador.

Exemplos:
Valor = FormatNumber (15.8, 2 )
Retorna  15,80
Valor = FormatNumber (15.8845, 1)
Retorna  15,9
Valor = FormatNumber (15.8, 0)
Retorna  16

9.3.

Utilizao da Funo: FormatPercent

(ATENO: s reconhecido nas verses Office2000 em diante)

Sintaxe: FormatPercent ( Expressao , NumDigitos )


Argumentos:
Expressao  Obrigatria. Valor ou expresso a ser formatada.
NumDigitos  Opcional. Indica quantas casas direita da decimal sero exibidas. Se
no for informado nada, ser apresentado na forma da configurao regional do
computador.

59

Imerso em Macros e VBA - Excel

Exemplos:
Valor = FormatPercent (0.58, 1)
Retorna  58,0%
Valor = FormatPercent (0.0058, 3)
Retorna  0,580%
Valor = FormatPercent (1, 0)
Retorna  100%

9.4.

Utilizao da Funo: FormatCurrency

(ATENO: s reconhecido nas verses Office2000 em diante)

Sintaxe: FormatCurrency ( Expressao , NumDigitos )


Argumentos:
Expressao  Obrigatria. Valor ou expresso a ser formatada.
NumDigitos  Opcional. Indica quantas casas direita da decimal sero exibidas. Se
no for informado nada, ser apresentado na forma da configurao regional do
computador.

Exemplos:
Valor = FormatCurrency (100 , 2)
Retorna  R$ 100,00
Valor = FormatCurrency (100.5 , 2)
Retorna  R$ 100,50
Valor = FormatCurrency (100.58 , 0)
Retorna  R$ 101

60

Imerso em Macros e VBA - Excel

10.

Tratamento de Erro em Tempo de Execuo

Durante o desenvolvimento de um projeto, encontrar e corrigir erros constitui uma etapa


fundamental, caso contrrio suas rotinas no tero um resultado satisfatrio.
Os problemas que podem ocorrer no so necessariamente erros por parte do
programador. Existe alguns erros que so esperados que ocorra e por isto importante
saber o que fazer para que eles no afetem ou interrompam a execuo da sua macro.
Tipos de Erros


Erro de Sintaxe O mais fcil de interceptar, pois enquanto ainda estiver escrevendo
o cdigo aparecer uma mensagem e a cor da linha de cdigo ser alterada para
vermelha.

Erro de Lgica - O pior erro, pois todos os comandos so executados perfeitamente,


porm o resultado no o esperado. Um exemplo: quando inserimos uma condio
em uma estrutura condicional e, ao invs de digitar o sinal >(maior) digitamos >=
(maior ou igual).

Erro no retorno de WorksheetFunction - So erros de retorno de uma funo


chamada pelo VBA, seria o mesmo erro que acontece quando se executa um clculo
na planilha e como resposta aparea #VALOR! ou #REF! ou #ND! . Exemplo: em
uma Procv quando no encontrado o valor acontecer um erro do tipo #ND! (no
disponvel).

Erro em Tempo de Execuo (Run Time) No um erro de sintaxe, tambm de


fcil interceptao. Ocasionado por exemplo, quando tentar abrir um arquivo cujo
caminho est errado, ou tentar excluir uma clula em uma planilha protegida, entre
outros.

O objetivo desta parte tratar os dois ltimos tipos de erro: Erro no retorno de
WorksheetFunction e Erro em Tempo de Execuo
Tratar erro em tempo de execuo na realidade antever um possvel erro que poder
ocorrer e dessa forma definir para o sistema o que deve ser feito, para que assim seja
evitado a interrupo da execuo da macro.

10.1.

Utilizando a Instruo On Error Resume Next

Para tratamento de erros genricos, pode se utilizar a instruo On Error Resume


Next, que desvia a execuo do cdigo para a linha imediatamente seguinte que
causou o erro.
Seria como se nos falssemos ao sistema: Em caso de erro, ignore e siga em frente...

61

Imerso em Macros e VBA - Excel


Exemplo:
No exemplo abaixo a rotina executa uma Procv e caso o retorno da Procv for #ND! (item
no disponvel), o erro no ir interromper a execuo da rotina porque acima foi inserida
a instruo de On Error Resume Next

Essa instruo bastante simples e fcil de utilizar, pois assim que o sistema leia a
instruo On Error Resume Next todos os erros dali em diante, at o final da rotina, sero
simplesmente ignorados e assim a execuo no ser interrompida.
Como voc pode perceber essa instruo arriscada, visto que enquanto estamos na
fase de construo de uma rotina importante que erros apaream para que possamos
identific-los e dessa forma corrigi-los. Ento o ideal manter a interrupo dos erros por
algumas linhas de cdigo apenas e depois fazer com que os erros voltem a serem
detectados, para isso voc poder utilizar uma instruo que uma forma de antdo
anterior ou seja, desativa a On Error Resume Next, essa instruo On Error GoTo 0.

Exemplo da utilizao do On Error GoTo 0

No exemplo acima foi desativado a instruo On Error Resume Next duas linhas depois,
incluindo a instruo On Error Goto 0
possvel introduzir essas instrues quantas vezes forem necessrias em uma rotina.
Ateno: Aps o Goto 0(zero) e no a letra O

62

Imerso em Macros e VBA - Excel

10.2.

Utilizando a Instruo On Error GoTo ...

Essa instruo permite um tratamento mais sofisticado, podendo por exemplo abrir uma
caixa de mensagem explicando ao usurio o que ocorreu.
Para entendermos melhor necessrio saber que cada erro que ocorre durante a
execuo tem um nmero de identificao. Atravs da instruo Err.Number possivel
detectar o nmero desse erro e direcionar ou avisar o usurio o que foi que aconteceu.
Exemplo
A macro a seguir, o valor de X definido como 10 e Y como resultado de uma InputBox

No caso acima, enquanto o divisor no for 0 (zero), no haver problemas, porm caso
seja informado 0 (zero) o sistema no ter como executar a rotina, e ento ser
interrompida, surgindo a seguinte mensagem:

Observe que nessa mensagem aparece o nmero do erro, no caso 11. O erro de
execuo nmero 11 ento o erro de diviso por Zero. Todos tero um nmero que
voc poder ento utilizar para detectar o que ocorreu.

63

Imerso em Macros e VBA - Excel


Veja agora como ficaria o cdigo, evitando o interrompimento da execuo e informando o
problema que ocorreu ao usurio.

Detalhes da linha de deteco de erro - On Error GoTo Pule


On Error GoTo  a instruo para detectar o erro e desviar a execuo para um
outro ponto especfico do cdigo
Pule  uma referncia criada (poderia ser qualquer nome) para informar o ponto da
rotina para onde a execuo deve ir automaticamente.
Obs: A referncia Pule poderia ser qualquer outro texto que voc quisesse.
Logo aps a referncia Pule: existe uma estrutura IF para testar o nmero do erro e
dessa forma fornecer a mensagem mais adequada ao usurio.

64

Imerso em Macros e VBA - Excel

11.

Chamando Programas Executveis pelo Excel

Voc poder necessitar em algum momento chamar algum programa executvel a partir
de uma planilha do Excel, como por exemplo, a calculadora do Windows, um arquivo
Word, arquivo do bloco de notas, etc
Nestes casos a forma mais fcil e rpida utilizando o comando Shell
Voc dever inserir o comando Shell e logo em seguida entre aspas () o nome e o
endereo completo do programa que dever ser executado. Voc poder ainda definir a
forma que a janela do programa ser apresentada:






vbMaximizedFocus  Janela maximizada com foco (selecionada)


vbMinimizedNoFocus  Janela minimizada sem foco (no selecionada)
vbNormalFocus  Janela com tamanho que havia sido deixada da ultima vez
que foi utilizado o programa e ter o foco sobre ela (selecionada)
vbNormalNoFocus  Idem anterior sem o foco

Obs.: Caso no seja informado o tipo da janela, ela ser carregada no formato
vbMinimizedFocus

Exemplo 1 - Chamando o programa Bloco de Notas e a Calculadora


Obs.: Para alguns programas no necessrio informar o endereo completo, pois o
Windows possui um atalho para eles, o caso do Notepad (Bloco de Notas) e o Calc
(Calculadora)
Sub Chama_BlocoDeNotas( )
Shell "Notepad", vbNormalFocus
End Sub

___________________________________________________
Sub Chama_Calculadora( )
Shell "calc"
End Sub

___________________________________________________
Exemplo 2 - Chamando um arquivo especfico. No caso o arquivo se chama
MinhaAnotacao
Sub Chama_UmArquivoSalvo1( )
Shell "Notepad C:MinhaAnotacao.txt", vbNormalFocus
End Sub

___________________________________________________

65

Imerso em Macros e VBA - Excel


Exemplo 3 - Chamando um arquivo especfico. No caso o arquivo se chama Relatrio
que pertence ao programa Word
Sub Chama_UmArquivoSalvo2( )
Shell "WINWORD.EXE C: \ Meus Documentos \ Relatorio.doc", vbMaximizedFocus
End Sub

___________________________________________________

66

Imerso em Macros e VBA - Excel

12.

Utilizando Funes do VBA

O Visual Basic Of Application possui vrias funes que voc poder utilizar em diversas
situaes. As funes no VBA so parecidas com as funes de planilhas, elas podero
ser utilizadas para: arredondar valores numricos, efetuar clculos matemticos, capturar
do sistema horas e datas atuais, manipular e converter seqncias de textos, etc.

12.1.

Funes Matemticas

Funo

Descrio

Exemplo

Abs

Retorna o valor absoluto de um nmero.

Abs ( -5)

Atn

Retorna o arco tangente de um nmero


informado

Atn ( 10 )  1,471127...

Cos

Retorna o cosseno de um ngulo.

Cos ( 0 )

Exp

Retorna a base dos logaritmos naturais


elevado a potencia de um nmero

Exp ( 2 )  7,38905...

Fix

Arredonda um nmero decimal positivo ou


negativo para baixo.

Int

Arredonda um nmero decimal positivo


para baixo e um negativo para cima.

 5

 1

Fix ( 70.8 )

 70

Fix ( -15.4 )  -15


Int ( 70.8 )  70
Int ( -15.4 )  -16

Comentrios sobre as funes: Fix e Int


Tanto Int como Fix removem a parte fracionria de um nmero e retornam o valor inteiro resultante.
A diferena entre Int e Fix que, se nmero for negativo, Int retorna o primeiro inteiro negativo que
seja menor ou igual a nmero, enquanto Fix retorna o primeiro inteiro negativo maior ou igual a
nmero. Por exemplo, Int converte -8,4 para -9, e Fix converte -8,4 para -8.

Log

Retorna o
nmero.

logaritmo

natural

de

um

Rnd

Retorna um nmero aleatrio entre 0 e 1

Rnd( )

Round (valor ,numdecimais)

Round

Retorna o nmero informado arredondado


com a quantidade especfica de casas
decimais. Se a prxima casa decimal for
at 5 arredonda para baixo, caso
contrrio para cima.

Sgn

Retorna o sinal de um nmero. Se for


positivo, o valor de retorno ser 1, se for
negativo -1 e se for 0 o retorno ser -0

Sgn ( 25 )  1
Sgn ( - 25 )  -1
Sgn ( 0 )  0

Sin

Retorna o seno de um ngulo

Sin ( 2 )

Sqr

Retorna a raiz quadrada de um nmero.

Tan

Retorna a tangente de um ngulo

Log ( 9 )  2,197224...
 Um numero aleatrio

Round ( 10.746 , 2)  10,75


Round ( 10.743 , 2)  10,74

 0,909297...

Sqr (16 )  4
Sqr ( 100 )  10
Sqr ( 0 )
 0
Tan ( 2 )  -2,1850...

67

Imerso em Macros e VBA - Excel

12.2.

Funes de Data e Hora

Funo

Descrio

Date

Retorna a data do atual do sistema

DateDiff

Retorna o intervalo de tempo entre


duas datas especificadas.

Exemplo
Date  Data atual
DateDiff (interval, date1, date2)
DateDiff("m", "01/01/06", "01/01/07") 12

Comentrios sobre a funo: DateDiff


interval o intervalo de tempo usado no clculo pode ser: d (para dias), m (para ms), y (ano)
date1 data inicial informada
date2 data final informada

Day

Retorna um nmero inteiro entre 1 e


31 representando o dia de uma data

Month

Retorna um nmero inteiro entre 1 e


12 representando o ms de uma data

Year

Retorna um nmero inteiro entre 1 e


100 representando o ano de uma data

Day (date)  O dia atual


Day (now)  O dia atual
Month (date)  O ms atual
Month (now)  O ms atual
Year (date)  O ano atual
Year (now)  O ano atual
Now  Data e hora atual

Retorna a data e horrio atual do


sistema
Retorna a data composta a partir do
ano, ms e dia especificados.

DateSerial(98, 4, 5)  05/04/1998

DateValue

Retorna a data representada por um


texto (string)

DateValue(Now)
forma de texto

Weekday

Retorna um nmero de 1 a 7
representando o dia da semana de
uma data

WeekdayName

Retorna o nome do dia da semana


(abreviado ou por extenso)

Weekday(Now)
 O nmero do dia
da semana atual. Domingo ser 1 assim
em diante at sbado 7.
WeekdayName (weekday, abbreviate,
firstdayofweek)

Now
DateSerial

 A data atual em

WeekdayName(2, True, 1)  Seg


Comentrios sobre a Funo: WeekdayName
Weekday o nmero do dia da semana cujo o nome se deseja obter.
Abbreviate pode ser True, indicando que o dia da semana dever ser abreviado, com Ex. Dom, Seg, .
Caso seja False (ou omitido), o retorno do dia no ser abreviado, como Ex.: Domingo, Segunda, ...
Firstdayofweek representa o primeiro dia da semana. Se for omitido ser 1 para domingo e 7 para
sbado.
MonthName (month, abbreviate)

MonthName

Retorna o nome do ms

Hour

Retorna um nmero inteiro entre 0 e


23 representando a hora de um
horrio

Hour (now)

atual do sistema

Minute

Retorna um nmero inteiro entre 0 e


59 os minutos de um horrio

Minute (now)

O numero dos
minutos da hora atual do sistema

MonthName(3, False)  Maro


O numero da hora

68

Imerso em Macros e VBA - Excel


Second

Retorna um nmero interiro entre 0 e


59 representando os segundos de um
horrio

Time

Retorna o horrio do sistema

Timer
TimeValue
TimeSerial

12.3.

Retorna a quantidade de segundos


existentes desde meia-noite
Retorna um horrio a partir de um
valor de texto
Retorna um horrio a partir de uma
hora,
minuto
e
segundo
especificados.

Second (now)

O numero dos
segundos da hora atual do sistema
Time  A hora atual completa do
sistema (horas, minutos, segundos)
Timer

A quantidade de minutos
existente deste a meia-noite desse dia.
TimeValue("4:35:17 PM")  Retorna
16:35:17 em formato hora
TimeSerial(14, 30, 55)  14:30:55

Funes de Converso

Funo

Descrio da Converso

CBool

Converte para tipo Boleano. (True


ou False)

CByte

Converte para tipo Byte

CCur

Converte
(Moeda)

CDate

Converte para tipo Date (Data)

para

tipo

Exemplo
CBool (1)
CBool (0)

 True
 False

Currency
CDate ("5/8/1989")  05/05/1989

Comentrios sobre a Funo: CDate


A CDate converte uma data que est em formato texto para o formato data e dessa forma interpretada
pelo sistema.
CDate reconhece os formatos de data de acordo com a configurao de localidade de seu sistema. A
ordem correta de dia, ms e ano poder no ser determinada se for fornecida em um formato diferente
das configuraes de data reconhecidas.
Dica: Utilize CDate para converter datas informadas em caixa de texto de formulrio, que a princpio
so lidas como texto, para serem convertidas em formato data.

CDbl
CDec

CInt

CLng

Converte uma expresso de forma


numrica ou textual para um valor de
tipo Double
Converte uma expresso de forma
numrica ou textual para um valor de
tipo Decimal.
Converte uma expresso de forma
numrica ou textual para um valor de
tipo integer.
Converte uma expresso de forma
numrica ou textual para um valor de
tipo Long.

CInt (4.5)
CInt (3.5)
CInt (3.6)
CInt (3.5)






4
4
4
4

CLng (25427.45 )
CLng (25427.55 )

 25427
 25428

Comentrios sobre as Funes: CInt e CLng


As funes CInt e CLng arredondam sempre para o nmero par mais prximo. Ento por exemplo,
0,5 arredondado para 0 e 1,5 para 2 .

69

Imerso em Macros e VBA - Excel

CStr

Converte para tipo String

CSng

Converte para tipo Single (nmero)

CVar

Converte para tipo Variant

Val

Converte um valor texto em um valor


numrico.

12.4.

(Texto)

Val ("3588")
 3588
Val ("3 58 8")  3588
Val ("35 e 88")  3588

Funes de Informao

So funes que retornam um tipo de informao a partir de um valor informado.


Funo

Descrio

IsDate

Retorna True se a expresso do tipo Date. False caso contrrio.

IsEmpty

Retorna True se nenhum valor foi atribudo varivel.

IsError

Retorna True se a expresso contiver um erro.

IsNull

Retorna True se a expresso representar o valor NULL.

IsNumeric

Retorna True se a expresso for numrica.

IsObject

Retorna True se tratar de um objeto.

StrComp

Realiza a comparao de duas strings, produzindo True ou False conforme


sejam ou no iguais.

Comentrios sobre a funo: StrComp


Sintaxe: StrComp (string1, string2)
Descrio dos Argumentos:
String1 = 1 Expresso de seqncia que deseja comparar.Pode ser valor, texto, data, etc.
String2 = 2 Expresso de seqncia que deseja comparar.Pode ser valor, texto, data, etc.
Resposta que ocorrer:
StrComp possui os seguintes valores de retorno
string1
string1
string1
string1

for
for
for
ou

menor que string2


igual a string2
maior que o string2
string2 for Null

TypeName






Retorna:
Retorna:
Retorna:
Retorna:

-1
0
1
Null

Retorna o tipo de dados de uma varivel.

70

Imerso em Macros e VBA - Excel

12.5.

Funes de Tratamento de Texto (String)

As funes de tratamento de texto podem transformar uma seqncia de caracteres em


formato maisculo, minsculo, inicial maisculo, extrair uma cadeia de caracteres de um
texto, contar a quantidade de caracteres, determinar a posio de uma cadeira de
caracteres, entre outras opes.
As funes desse tipo sero explicadas detalhadamente com exemplos, em razo das
mesmas possurem sintaxes diferentes e algumas complexas

12.5.1.

Funo: UCase

Converte uma cadeira de caracteres em letras maisculas.


Sintaxe:

UCase (string)

Argumentos:
String  a seqncia de texto a ser convertido
Exemplo:
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = UCase (texto)

_____________________________________________________
Este exemplo converte a seqncia para CAVALCANTE CONSULTORES.

12.5.2.

Funo: LCase

Converte uma cadeira de caracteres para letras minsculas.


Sintaxe:

LCase (string)

Argumentos:
String  a seqncia de texto a ser convertido
Exemplo:
_____________________________________________________
Texto = Cavalcante Consultores

71

Imerso em Macros e VBA - Excel


Range(A1) = LCase (texto)

_____________________________________________________
Este exemplo converte a seqncia para cavalcante consultores.

12.5.3.

Funo: StrConv

Converte uma cadeira de caracteres em um formato que pode ser: tudo maisculo, tudo
minsculo ou a apenas a inicial de cada palavra maiscula.
Sintaxe:

StrConv(string, conversion)

Argumentos:
string
 seqncia de texto a ser convertido
conversion  O tipo de formato para o qual ser convertida a string. Pode ser:
1 (vbUpperCase) - Tudo maisculos;
2 (vbLowerCase) - Tudo minsculos;
3 (vbProperCase) - Primeira letra de cada palavra em maiscula.
Exemplo:
_____________________________________________________
Texto = CAvALcanTE coNSULToReS
Range(A1) = StrConv( texto, vbProperCase)

_____________________________________________________
Este exemplo ir converter a seqncia para Cavalcante Consultores. Ou seja, a
primeira letra de cada palavra em maisculo.

12.5.4.

Funo: Len

Este comando retorna a quantidade de caracteres (incluindo os espaos vazios) de uma


cadeira de caracteres.
Sintaxe:

Len (string)

Argumentos:
String 

A seqncia de texto a ser contado

72

Imerso em Macros e VBA - Excel

Exemplo:
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = Len (Texto)

_____________________________________________________
Este exemplo faz com que retorne o nmero 22 para clula A1, visto que 22 a
quantidade de caracteres do texto Cavalcante Consultores, incluindo os espaos.

12.5.5.

Funo: Left

Extrai a partir da esquerda um determinado nmero de caracteres de uma cadeia de


caracteres.
Sintaxe:

Left(string, length)

Argumentos:
string  A seqncia de texto a ser convertido
length  A quantidade de caracteres a serem extrados
Exemplo:
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = Left (Texto , 5 )

_____________________________________________________
Este exemplo faz com que retorne a seqncia Caval para clula A1, visto que foi
pedida a extrao de 5 caracteres a partir da esquerda (Left).

12.5.6.

Funo: Right

Extrai a partir da direita um determinado nmero de caracteres de uma cadeia de


caracteres
Sintaxe:

Right (string, length)

73

Imerso em Macros e VBA - Excel


Argumentos:
string  a seqncia de texto a ser convertido
length  A quantidade de caracteres a serem extrados.
Exemplo:
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = Right (Texto , 11 )

_____________________________________________________
Este exemplo faz com que retorne a seqncia Consultores para a clula A1, visto que
foi pedida a extrao de 11 caracteres a partir da direita (Right)

12.5.7.

Funo: Mid

Extrai de uma cadeira de caracteres um nmero especfico de caracteres, da esquerda


para a direita, a partir de uma determinada posio informada.
A diferena entre a funo Mid e a funo Left, que a funo Mid extrai essa quantidade
de caracteres a partir de uma posio determinada.
Sintaxe:

Mid (string, start, length)

Argumentos:
string  Seqncia de caracteres onde ser feita a pesquisa
start  A posio do primeiro caractere a ser extrado
length  A quantidade de caracteres a serem extrados a partir da esquerda

Exemplo:
_____________________________________________________
Texto = Hoje dia 30 de Dezembro de 2005
Range(A1) = Mid (Texto , 8, 6 )

_____________________________________________________
Este exemplo faz com que retorne a seqncia dia 30 para a clula A1, visto que foi
pedida 6 caracteres a partir do 8 caractere da seqncia dada com: Hoje dia 30 de
Dezembro de 2005
74

Imerso em Macros e VBA - Excel

12.5.8.

Funo: InStr

Pesquisa a partir da esquerda a posio de uma seqncia de caracteres pesquisados e


retorna o nmero que representa a posio da primeira ocorrncia da seqncia dentro
do texto.

Sintaxe:

InStr(start, string1, string2)

Argumentos:
start  Argumento opcional. Define a posio inicial de cada pesquisa. Se omitido, a
pesquisa iniciar na posio do primeiro caractere.
string1  Obrigatrio. Texto de onde ser feita a pesquisado
string2  Obrigatrio. Texto ou a seqncia de caracteres procurada

Exemplo:
_____________________________________________________
Texto = Lanamento dia 25/11/05
Range(A1) = InStr (1, Texto , dia )

_____________________________________________________
Este exemplo faz com que retorne o nmero 12 para a clula A1, visto que 12 representa
a posio onde inicia a seqncia de caracteres procurada dia dentro da cadeia de
caracteres: Lanamento dia 25/11/05.
Obs.: Caso no seja encontrada a seqncia procurada, a funo InStr retornar o valor
0 (zero).

12.5.9.

Funo: InStrRev

Essa funo o contrrio da InStr, ela pesquisa a partir da direita (do final da seqncia)
a posio de uma seqncia de caracteres e retorna o nmero que representa a posio
da primeira ocorrncia da seqncia dentro do texto.
Sintaxe:

InStrRev(string1, string2, start)

Argumentos:
string1  Obrigatrio. Texto de onde ser feita a pesquisa
string2  Obrigatrio. Texto ou a seqncia de caracteres procurada
75

Imerso em Macros e VBA - Excel


start  Argumento opcional. Define a posio inicial de cada pesquisa. Se omitido, a
pesquisa iniciar na posio do primeiro caractere.

Ateno: Observe que a sintaxe da funo InstrRev no igual sintaxe da


funo Instr.

Exemplo:
_____________________________________________________
Texto = "Lanamento dia 25/11/05"
a = InStrRev(Texto, "dia ")

_____________________________________________________
Este exemplo faz com que retorne o nmero 12 para a clula A1, visto que o nmero 12
representa a posio onde inicia a seqncia de caracteres procurada dia dentro da
cadeia de caracteres: Lanamento dia 25/11/05.
Obs.: 1) Caso no seja encontrada a seqncia procurada, a funo InStrRev retornar o
valor 0 (zero).
2) S haver diferena nas pesquisas entre InStr e InStrRev se houver no texto
pesquisado duas ou mais seqncias iguais pesquisadas.

12.5.10. Funo: StrReverse


Retorna a ordem inversa de uma cadeia de caracteres.
Sintaxe:

StrReverse ( string )

Argumentos
string  Seqncia de caractere que ser invertida

Exemplo:
_____________________________________________________
Texto = planilhas
Range(A1) = StrReverse ( Texto )

_____________________________________________________

76

Imerso em Macros e VBA - Excel

Este exemplo faz com que retorne a seqncia sahlinalp, que representa o inverso do
texto planilhas, ou seja, planilhas de traz para frente.

12.5.11. Funes: Trim / LTrim / RTrim


As funes Trim / LTrim / RTrim removem espaos vazios de uma cadeia de caracteres, a
diferena entre elas so:

Trim

 Remove os espaos esquerda e a direita de uma cadeira de caracteres

LTrim  Remove os espaos somente esquerda de uma cadeira de caracteres


RTrim  Remove os espaos somente direita de uma cadeira de caracteres

Sintaxe:

Trim ( string )

Argumento:
string  Seqncia de caracteres de onde ser excludo os espaos vazios

Exemplo: Trim
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = Trim( Texto )

_____________________________________________________
O retorno ser Cavalcante Consultores

Exemplo: LTrim
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = LTrim( Texto )
_____________________________________________________
O retorno ser Cavalcante Consultores

77

Imerso em Macros e VBA - Excel

Exemplo: RTrim
_____________________________________________________
Texto = Cavalcante Consultores
Range(A1) = RTrim( Texto )

_____________________________________________________
O retorno ser

Cavalcante Consultores

12.5.12. Funo: Space


Insere uma quantidade especfica de espaos vazios.
Sintaxe:

Space ( number )

Argumento:
number  A quantidade de espaos que deseja inserir

Exemplo:
_____________________________________________________
Range(A1) = Cavalcante & Space( 10 ) & Consultores

_____________________________________________________
Este exemplo retorna para a clula A1 a seqncia Cavalcante
Consultores,
visto que foi pedido para inserir 10 espaos vazios entre Cavalcante Consultores.

78

Imerso em Macros e VBA - Excel

12.5.13. Funo: String


Retorna uma seqncia de caracteres repetidos um determinado nmero de vezes.
Sintaxe:

String ( number, character )

Argumentos
number
 Nmero de vezes que o caractere ser repetido
character  O caractere que ser repetido

Exemplo:
_____________________________________________________
Range(A1) = Valor R$ 10.000,00 & String (10, x)

_____________________________________________________
Este exemplo faz com que retorne a seqncia Valor R$ 10.000,00xxxxxxxxxx, ou
seja, repete-se 10 vezes o caractere x aps a seqncia informada.

79

Imerso em Macros e VBA - Excel

13.

Criao de Novas Funes de Planilha Via VBA

Alm das funes pertencentes originalmente ao Excel, possvel atravs de


programao VBA criar novas funes personalizadas.

Porque Criar Novas Funes?


Isto importante quando necessitamos de funes em que o Excel no possui, dessa
forma utilizando o VBA, poderemos elaborar novas personalizadas para uso em nosso
trabalho e disponibiliza-las para que ns mesmos ou outras pessoas utilizem.
relativamente simples criar funes personalizada atravs de recurso de programao

Veja a sintaxe de comando que dever ser utilizada


Function Nome da Funo ( parmetro, parmetro, parmetro)
Nome da Funo = ( frmula desenvolvida )
End Function

Definio dos termos utilizados

 Function: Instruo obrigatria para iniciar a sintaxe


 Nome da Funo: Qualquer nome que voc deseja dar a nova funo.
 Parmetros: So os parmetros(infomaes) necessrias na elaborao do clculo.

Ex. Para calcular o Valor Futuro de uma operao devemos informar o


VP, TAXA, PRAZO e NUMPERIODOS. Esses termos so os parmetros para o
clculo. Os nomes dos parmetros podero ser criados por voc.

 End Function: Instruo obrigatria para encerrar sintaxe

80

Imerso em Macros e VBA - Excel

13.1.

Exemplo prtico de elaborao de funes

Como exemplo prtico criaremos algumas funes que o Aplicativo Excel no possui em
sua ferramenta Colar Funo
Exemplo 1
Iremos criar uma funo para calucular o Valor Futuro de uma operao
Simples

a Juros

Procedimentos:
1. Estando em qualquer planilha do Excel clique em Menu Ferramentas  Macro 
Editor do VBA

Ou clique a tecla de atalho: ALT + F11

2. Estando no Editor do VBA clique em Inserir  Mdulo

3. No Mdulo que abrir digite os cdigos conforme a figura abaixo.

81

Imerso em Macros e VBA - Excel

Pronto!!! Isto suficiente para que essa funo esteja criada.

Para entender melhor os elementos da Funo




Function - instruo obrigatria para iniciar as linhas de cdigo

VFJS - o nome da funo (lembre-se, voc que dar um nome).

VP, TAXA, PRAZO - So os parmetros(variveis) que a funo necessitar para


fornecer o resultado do calculo(voc criar os nomes)

VFJS = ( VP * (1 + TAXA * PRAZO) ) - a expresso matemtica da formula (o


calculo que ser realizado). Primeiro repete-se o nome da funo dada anteriormente e
iguala a expresso matemtica

End Function - instruo obrigatria para encerrar as linhas de cdigo

A
T
E
N

Obs.1 : Foi dado o nome para a funo de VFJS, significando: Valor Futuro a
Juros Simples. O nome poderia ser qualquer outro que voc quisesse, desde
que no possusse espaos e caracteres do tipo: / , ?, % , # etc.
Obs.2 : Os parmetros foram dados como VP, TAXA, PRAZO. Poderiam
tambm ser qualquer outro texto que voc quisesse, desde que tambm no
utilizasse espao e caracteres do tipo: /, ?, %, # etc.

Exemplo 2
Criao da funo Raiz Ensima
nmero a qualquer base.

- Essa funo ir permitir calcular a raiz de qualquer

Procedimentos
Se voc j estiver no Editor do VBA com um mdulo aberto, basta inserir os cdigos
(procedimento de nmero 3 ) da nova funo, abaixo da funo anterior.
Caso voc j tenha fechado o Editor do VBA, execute os procedimento 1 e 2 descritos na
elaborao da funo anterior.

82

Imerso em Macros e VBA - Excel

3. No Mdulo que abrir digite os cdigos da 2. Function, conforme a figura abaixo.

Pronto!!! Agora voc possui duas novas funes

13.2.

Localizando e testando as funes criadas

Uma vez criada as funes no Editor do VBA, necessrio testa-las quando ao seu
funcionamento.

Procedimentos
1. Volte para uma planilha qualquer.
2. Clique em Inserir  Funo
3. Escolha a Categoria Definida pelo usurio
4. Observe que as funes aparecero na tela da esquerda com os nomes que voc
definiu para elas.

83

Imerso em Macros e VBA - Excel

5. Escolha uma delas e clique OK - Para nosso teste escolha a funo VFJS
6. Preencha os argumentos conforme a figura abaixo.

7. Clique OK e verifique o resultado na clula da planilha.


Resultado desse clculo dever ser 16.000

84

Imerso em Macros e VBA - Excel

13.3.

Inserindo descrio e definindo a categoria da nova funo

possvel inserir uma descrio para cada nova funo, possibilitando assim descrever a
funo para as pessoas que iro utiliz-las, dessa forma dando um toque totalmente
profissional.
Alem disso ainda possvel definir em qual categoria a funo criada deve aparecer na
caixa de inserir funo do Excel. Poder ser inserida na categoria: Financeira,
Matemtica Trigonomtrica, Estatstica, Lgica, etc.

Procedimentos
Para inserir a descrio e definir a categoria, necessrio elaborar uma nova rotina em
VBA.
1. Abra o editor do VBA. Caso tenha esquecido como isto se faz, veja nos procedimentos
anteriores.
2. J dentro do Editor do VBA clique em Inserir  Mdulo

3. Digite os cdigos conforme a figura abaixo.

85

Imerso em Macros e VBA - Excel


Comentrio:
Description - a instruo para definir a descrio da funo. A descrio poder ser
qualquer texto
Category
numeradas

a categoria que a funo dever ser anexada. As categorias so

4. Depois de encerrada a insero dos cdigos dentro do Editor do VBA, necessrio


executar uma vez essa rotina. Para isto selecione qualquer caractere dessa rotina e
clique em Executar  Executar Sub / UserForm ou simplesmente clique na tecla
F5.

Pronto!! Essas instrues j foram incorporadas.

86

Imerso em Macros e VBA - Excel

13.4.

Instalando no Excel as novas funes (Criando AddIn)

As funes que voc criou estaro sempre disponveis para uso, desde que o arquivo
onde elas foram criadas e salvas esteja ativo, ou seja, aberto.
Porm possvel disponibilizar as funes no aplicativo Excel atravs da criao e
instalao de um AddIn.
AddIns so suplementos(*.xla) que podem ser disponibilizados para o Microsoft Excel.

Procedimentos para Criao e Instalao de um AddIn (Suplemento)


1. No arquivo em que foi criado as Funes clique em menu Arquivo  Salvar Como.
2. Na caixa de dilogo Salvar Como
-

Na opo Nome do arquivo: digite um nome que voc desejar para o arquivo.

- Na opo Salvar como tipo: escolha Suplemento do Microsoft Excel(*.xla) conforme


figura abaixo.

3.. Clique Salvar


Neste momento, voc criou o suplemento (*.xla) com o nome do arquivo que voc havia
dado, porm isto no quer dizer que ele j esteja instalado e as funes disponibilizadas.

87

Imerso em Macros e VBA - Excel

Procedimentos para Instalar e disponibilizar o arquivo suplemento


1. Dentro de uma planilha clique em Menu Ferramentas  Suplementos

2. Na Caixa Suplementos procure pelo nome do arquivo que voc havia criado o
suplemento e marque a opo do nome do arquivo, logo em seguida clique em OK.

Pronto!! Feito isto voc disponibilizou as funes criadas em VBA neste aplicativo.

88

Imerso em Macros e VBA - Excel

Desinstalando e/ou Excluindo da mquina as funes criadas


Em um determinado momento voc poder querer desinstalar as funes do aplicativo.
Para isto o suplemento dessas funes deve primeiro ser desmarcado e caso queira
deletar por completo, o arquivo dever ser excludo da pasta suplementos.

Procedimentos para desinstalar o arquivo suplemento


1. Clique em Ferramentas  Suplementos
2. Desmarque a opo pelo nome do arquivo e clique OK

Procedimentos para excluir o arquivo suplemento


1. Localize a pasta Suplementos. Voc poder utilizar o Localizar do Windows para
encontrar essa pasta em seu sistema.
2. Dentro da pasta Suplementos localize o arquivo pelo nome e delete.

89

Imerso em Macros e VBA - Excel

14.

Criao e uso de Formulrios em VBA

Formulrios so telas criadas para interagir com o usurio, fazendo com que a aplicao
seja customizada, bem mais fcil e segura que aquela em que o usurio atua diretamente
na planilha.
No VBA, a interface dos formulrios so criadas atravs de UserForms, nos quais voc
pode inserir os controles que desejar e colocar botes para responder aos controles,
tornando a aplicao personalizada.

Criando um Formulrio (UserForms)


Dentro do Editor do VBA clique em menu Inserir  UserForm
Ir aparecer uma tela com o nome UserForm1. Esse o formulrio onde ser
desenvolvida a tela com os botes e comandos de ao.

Formulrio

Caixa de Ferramentas

Propriedades do Objeto

90

Imerso em Macros e VBA - Excel


Para inserir os objetos (Botes, Caixa de Texto, Caixa de Combinao, Rtulos, etc) no
formulrio, basta clicar no objeto desejado localizado na Caixa de Ferramentas e arrastar
para posio que desejar dentro do formulrio.
Logo em seguida redimensione o objeto, aumentando ou diminuindo seu tamanho.

91

Imerso em Macros e VBA - Excel

14.1.

Propriedade dos objetos

A utilizao dos objetos do formulrio muitas vezes requer alteraes em relao a Cor,
Texto, alinhamento, Nome, Etc. Essa alteraes so feitas pela tela de propriedades.
Para alterar as propriedades, selecione o objeto a ser modificado para que a janela
Propriedades exiba as caractersticas desse objeto.
Essa janela encontra-se no canto inferior esquerdo do editor do VBA. Caso essa janela
no aparea, clique em Exibir  Janela Propriedades
Por exemplo, caso voc selecione o objeto Label1, na janela de propriedades aparecer
as propriedades desse objeto.

92

Imerso em Macros e VBA - Excel

14.2.

Principais propriedades dos Objetos

Obs.: Vale ressaltar que essa uma lista geral de propriedades, e que os objetos
possuem algumas propriedades, no possuindo outras.

Propriedade
Name
Accelerator
AutoSize
AutoTab

AutoWordSelect

Descrio
Nome do objeto. Esse nome far referncia ao objeto no cdigo
a tecla de atalho, fazendo com que o controle seja acessado pelo teclado.
Exemplo Accelerator F : Ao pressionar ALT+F o controle ser acionado
Indica se o objeto ser redimensionado de acordo com o tamanho do seu rtulo,
fazendo com que o texto possa ser lido. Pode ser True ou False
Especifica se haver tabulao automtica ao digitar o nmero mximo de
caractere em um TextBox ou na parte da caixa de texto de um ComboBox,
mudando o foco para outro objeto. Pode ser True (ocorre tabulao) ou
False(no ocorre tabulao)
Especifica o modo de seleo de palavras em um TextBox ou ComboBox. Se
True, ao arrastar o mouse pelos caracteres de uma palavra para selecionar,
quando iniciar a seleo da prxima palavra, ambas ficaro automaticamente
selecionadas. Se False, ao arrastar o mouse para selecionar, somente sero
selecionados os caracteres, no selecionando automaticamente a palavra inteira.

BackColor

a cor de preenchimento (fundo) do objeto

BackStyle

Define o estilo do fundo, podendo ser:


0 (zero) - Transparente
1 - Opaco
Se definido como transparente a propriedade BackColor no ter efeito

BorderColor

Define a cor da borda do objeto

BoundColumn
Cancel

Define qual coluna de um ComboBox ou ListBox de vrias colunas contm o


dado a ser armazenado
Se True, o boto de comando ser o boto Cancelar do formulrio, que o boto
a ser executado ao pressionar a tecla ESC
Somente um boto no formulrio poder ter essa propriedade como true

Caption
ColumnCount
ControlSource
ControlTypeText
Default

DragBehavior

Rtulo ou ttulo do objeto.


Especifica quantas colunas sero exibidas em um ComboBox ou ListBox. Se for
(zero), nenhuma coluna da lista ser exibida e 1 exibe todas as colunas
Indica o local onde sero armazenados ou definidos os valores do controle. Por
exemplo, ao digitar um texto em um TextBox, voc pode especificar que este
texto seja armazenado na clula A1 da planilha Plan1, definido essa propriedade
como Plan1!A1. Tambm pode ser uma clula nomeada.
Define o texto que aparece quando o mouse for posicionado sobre o objeto sem
clicar
True far com que o boto em questo seja acionado quando for pressionada a
tecla ENTER do teclado.
Especifica se o sistema ativa o recurso arrastar-e-soltar de um texta de uma
caixa para outra de um TextBox ou ComboBox.
0 - No permite a ao de arrastar-e-soltar (padro).
1 - Permite a ao de arrastar-e-soltar

Enabled

True (Objeto Habilitado) ou False(Objeto no habilitado)

Font

Formato da fonte do texto do objeto

ForeColor

a cor da fonte

Height

Define a altura do objeto em pontos 1 ponto = 0,0353cm


True o texto selecionado no permanece realado quando o objeto perde o foco.
False, aps selecionar um texto e ativar outro controle, o texto selecionado ainda
permanece selecionado.

HideSelection

93

Imerso em Macros e VBA - Excel


Left
ListRows
Locked

MatchEntry

MatchRequired

Define a posio do objeto a partir da borda esquerda do objeto em que est


contido.
Especifica a quantidade de linhas a serem exibidas em uma lista; Se uma
ListBox tiver 10 itens e esta propriedade for defina como 5. sero exibidos 5 itens
ao abrir a lista. Havendo mais itens na lista que o nmero de linhas exibido,
surgir ao lado direito do objeto uma barra de rolagem
Indica se o objeto pode ser modificado. Se o valor desta propriedade for True o
objeto no pode ser alterado, False o objeto poder ser alterado
Define como ser feita uma pesquisa em uma ComboBox ou ListBox. Quando
exibida uma caixa de listagem conforme voc digita na sua caixa de texto, ser
exibida uma entrada de acordo com o texto. Por exemplo, se digitar a letra J,
surgir primeira palavra iniciada por esta letra. Esta propriedade define a maneira
como feita a pesquisa e seu valor pode ser:
0 (zero) - A pesquisa feita de forma que ser exibida a primeira palavra
iniciada com o caractere digitado. Se digitar J, ser exibido Janeiro. Se em
seguida digitar A, ser exibido Abril.
1 - A pesquisa feita conforme a seqncia de caracteres digitado. Se digitar J,
ser exibido Janeiro. Quando digitar em seguida a letra A, ser exibido Janeiro.
Se digitar J e depois U, ser exibido Junho.
2 - No h correspondncia na pesquisa. Se digitar J, ser exibido o prprio J.
Determina se o texto digitado na caixa de texto de uma ComboBox deve ser igual
a um item da lista do controle. Pode ser True, indicando que o texto deve existir
na lista ou False, que aceita qualquer valor. Se for True, o usurio poder sair
do controle enquanto o texto no corresponder a um item da lista.

Max

O valor mximo aceito por um SpinButton ou ScrollBar

MaxLenght

Quantidade mxima de caracteres que podem ser digitados em um TextBox ou


ComboBox

Min

O valor mnimo aceito por um SpinButton ou ScrollBar

MouseIcon

O cone personalizado para o mouse . Para que essa propriedade seja vlida
preciso que o valor da propriedade MousePointer seja 99

MousePointer
MultiLine
PasswordChar
Picture
Source

ScrollBars

Define o formato do ponteiro do mouse ao posiciona-lo sobre o objeto. O valor


dessa propriedade varia de 0 a 15 e tambm 99
True, o objeto exibe vrias linhas de texto. False o texto exibido em apenas
uma linha
Define o caractere a ser exibido ao digitar em um TextBox. Essa propriedade
geralmente utilizada quando for necessrio digitar uma senha em uma caixa de
texto.
Define uma figura a ser exibida no objeto
Define o local em que esto os dados s serem listados por uma ComboBox ou
ListBox. Pode ser um intervalo de clulas, como A2:A5
Determina se um objeto possui barra de rolagem horizontal, vertical ou ambas.
0(zero) no exibe barras de rolagem
1
Exibe a barra de rolagem horizontal
2 Exibe barra de rolagem vertical
3 Exibe as duas barras de rolagem

SmallChange

o valor da mudana incrementar de um SpinButton ou ScrollBar

SpecialEffect

Define a forma como o objeto ser apresentado. O valor varia de 0 a 6

94

Imerso em Macros e VBA - Excel

14.3.

Carregando e descarregando o formulrio pela planilha.

Aps concluir o formulrio com todos os objetos, voc ir querer cham-lo atravs de um
boto de acionamento na planilha.
Veja o formulrio modelo abaixo. Neste formulrio foi dada a propriedade name como
FrmMeses

Tipo: Rtulo
Tipo: Caixa de Texto
Tipo: Moldura

Tipo: Boto de Comando

Elaborao do cdigo para chamar o formulrio pela planilha.


O cdigo para chamar o formulrio deve ser feito em um mdulo. Voc pode utilizar um
mdulo que j exista ou criar um novo.
Para criar um novo clique em Inserir  Mdulo

95

Imerso em Macros e VBA - Excel


Neste mdulo escreva a seguinte rotina

Obs.1: O nome da Sub rotina foi dada como Chama_Formulrio_Meses, mas poderia ser
qualquer outro nome.
Obs.2: A nica linha de cdigo diz o Nome do formulrio seguido da propriedade .Show
Feito isto, basta agora criar um boto de macro na planilha e atribuir a macro
Chama_Formulrio_Meses a ele.
Agora toda vez que for acionado esse boto a tela ir aparecer na planilha.

Elaborao do cdigo para descarregar o formulrio da planilha


recomendvel ter um boto na tela do formulrio que descarregue o mesmo da planilha.
Isto realmente simples de se fazer.
O comando de descarregar o formulrio ser executado quando acionar o boto chamado
SAIR .
Procedimentos
1. Dentro do editor do VBA, d duplo clique sobre o boto SAIR. A pgina de
programao ser aberta.
96

Imerso em Macros e VBA - Excel

2. Escreva como cdigo o comando Unload Me .

14.4.

Criando a Lista de Itens para os objetos ComboBox e ListBox

Existem dois objetos para uso em formulrios que permitem fornecer uma relao de itens
em forma de lista.

ComboBox

ListBox

97

Imerso em Macros e VBA - Excel


Para criar essa lista de itens existem duas maneiras possveis:
Maneira 1
Nesta maneira no necessita criar cdigos, necessrio apenas definir a propriedade dos
objetos.
1) - Digite a lista de itens em alguma rea da planilha e selecione a rea.
2) - Defina um nome para essa rea. Clique em: Inserir  Nome  Definir
e digite o nome que desejar. Em nosso exemplo foi dado o nome de meses.
Logo em seguida clique OK

3) - No Editor do VBA, clique uma vez no objeto ComboBox


4) - Na Janela de Propriedades procure pela propriedade RowSource
5) - Digite nesta propriedade o nome da rea, em nosso caso meses

98

Imerso em Macros e VBA - Excel

Propriedade: RowSource

Pronto!!
Agora sempre ir ser mostrado na caixa de a lista de itens da rea nomeada de meses.

99

Imerso em Macros e VBA - Excel


Maneira 2
A segunda maneira de inserir itens no objeto atravs de programao. Ento
necessrio criar cdigos com estrutura de Repetio que ir adicionado item a item na
lista do ComboBox.
Procedimentos:
Voc ir desejar que quando carregar o formulrio na planilha, a caixa ComboBox seja
preenchida, ento siga os procedimentos.
1) - D um duplo clique na parede do formulrio.
2) - Troque o evento da rotina para Activate. Isto deve ser feito na caixa de eventos.
3) - Dentro da nova Private Sub que ir surgir digite os cdigos conforme figura abaixo.

Comentrio do cdigo acima




Foi criado um looping Do While... Loop


estiver vazia (empty).

que ser repetido enquanto a clula no

A cada loop o ComboBox ser adicionado com o contedo da clula

Caixa de Eventos

100

Imerso em Macros e VBA - Excel

15.

Conexo com Banco de Dados Via VBA

Uma grande vantagem de se trabalhar com VBA-Excel a opo de criar conexes entre
planilhas Excel e Banco de Dados verdadeiros do tipo Access, SQL Server, Oracle e
tambm de arquivo texto ou do prprio Excel.
O Excel por si s j possui ferramentas que possibilitam importar dados rapidamente,
porm so limitada e no possibilita exportar dados, ou seja, as ferramentas do Excel
acaba sendo de um nico sentido, no caso importao. Criando conexes VBA, voc
poder: importar, exportar, atualizar, incluir, excluir, etc., ou seja, mover registros em todas
as direes possibilitando assim um gerenciamento total de dados sem sair do Excel.

15.1.

Objetos de Conexo VBA

Para criar as conexes voc ir necessitar um conjunto de ferramentas, chamadas objetos


de conexo. Basicamente o VBA disponibiliza 2 objetos:
 ADO (ActiveX Data Objects)
 DAO (Data Access Objects)

O ADO(ActiveX Data Objects) mais novo que o DAO(Data Access Objects), mas ambos
so seqncias de comandos e cdigos para manipular bibliotecas de objetos de banco
de dados isto , colees de objetos que voc pode utilizar no cdigo VBA. Voc pode
utilizar para isso o ADO ou DAO, mas nunca os dois simultaneamente.
Como foi dito ambos os objetos podem ser utilizados, mas voc pode estar perguntando
qual a diferena entre eles e qual o melhor para utilizar??
O DAO tem uma abordagem mais antiga, onde o principal mecanismo de conexo era o
Jet. O mecanismo de banco de dados do Access chamado de mecanismo Jet. e o DAO
otimizado para trabalhar com banco de dados Jet.. O que vale dizer ento que quando
voc est trabalhando com banco de dados Access o melhor objeto de conexo para
utilizar seria o DAO.
Se voc nunca fosse lidar com bancos de dados diferentes daqueles que usam o Jet,
haveria uma razo para utilizar apenas o DAO. Mas a Microsoft tem se distanciado do Jet
no, porm do Access. A Microsoft desenvolveu outros produtos mais novos, entre eles
o SQL Server, que foi planejado para fornecer um mecanismo mais robusto e tratar muito
mais trfego de usurio do que o Jet. e o DAO ineficaz para trabalhar com o SQL Server
entre outros.
Ento voc dever saber trabalhar com um objeto de conexo que possa trabalhar alm
do Access com outros programas tambm, como o prprio SQL Server por exemplo. Esse
objeto ento ser o ADO(ActiveX Data Objects).
Neste nosso treinamento daremos nfase ao objeto ADO pela sua capacidade de
trabalhar tanto com o Access quanto com outros programas de banco de dados mais
novos.

101

Imerso em Macros e VBA - Excel

15.2.
15.2.1.

Utilizando o ADO para criar uma conexo.


Estabelecendo a referncia com biblioteca ADO

Antes de inserir no VBE(Visual Basic Editor) os cdigos de conexo via ADO, voc
primeiro ter que estabelecer uma referencia a biblioteca ADO no seu arquivo. Para isso
v ao VBE e clique em Ferramentas  Referncia ...

Na tela que ir aparecer escolha uma referencia ao ADO(Microsoft ActiveX Data


Objects). Normalmente melhor escolher o nvel de verso mais alto disponvel, mas
lembre-se que caso voc for utilizar essa macro em uma verso Office onde ainda no
tenha a referncia da qual voc escolheu, escolha ento uma verso mais baixa.

Obs.: Cuidado ao marcar a opo na caixa. No basta apenas selecionar a opo,


necessita marcar o pequeno quadrado a esquerda e da sim clicar o boto OK.
Se o objeto de conexo que voc estiver utilizando for o DAO, procure as referncias
Microsoft DAO x.x Object Library

102

Imerso em Macros e VBA - Excel

15.2.2.

Declarando o objeto e abrindo a Conexo

Declarando o Objeto de conexo


Voc declara um objeto Connection de modo muito parecido com o que voce declara
qualquer variavel no VBA.

Detalhes do cdigo:
Conex  a varivel para o objeto ADODB.Connection. Poderia ser dado qualquer
nome a varivel ao invs de Conex.

Abrindo a conexo
Depois de ter declarado uma varivel de objeto como ADODB.Connection, voc deve criar
uma nova instncia dela.

Comentrio sobre o cdigo:


A instruo Set como voc j viu nesse treinamento utilizada para carregar variveis de
objetos. Neste nosso caso o objeto um New ADODB.Connection

103

Imerso em Macros e VBA - Excel

Conectando com o Banco de Dados


Para conectar a fonte de dados necessrio configurar o objeto Connection. A
propriedade Connection possui uma propriedade chamada ConnectionString, que voc
utiliza para informar ao ADO o provedor de conexo e o endereo do banco de dados.
Conectando e abrindo o Banco de dados

Comentrio sobre o cdigo:


Conex.ConnectionString  Nessa propriedade ConnectionString definido o provedor
de conexo (cada conexo ao banco de dados necessita de um Provider(Provedor) que
deve ser declarado), em nosso exemplo foi conectado a um banco de dados Access, o
provedor do Access Microsoft.Jet.OLEDB.4.0.
tambm informado o Data Source (O endereo completo do Banco de Dados) em nosso
exemplo o endereo foi C:\banco_teste.mdb
Conex.Open  o comando para efetivamente abrir a conexo.

Comentrio: Talvez a maior dificuldade que o usurio possa ter no momento de


montar a String de Conexo, pois nela que informado o provedor e todas as
informaes necessrias para criar a conexo. Por isso dediquei um tpico nessa
apostila chamado - Criando String de Conexo Atravs de Arquivos UDL - onde
ensina uma forma fcil de obter essas String.

104

Imerso em Macros e VBA - Excel

15.2.3.

Declarando o objeto e abrindo um Recordset

Para voc poder manipar e gerenciar os registros efetivamente no basta apenas criar e
configurar um objeto de conexo com o banco de dados, como j foi explicado
anteriormente, voc ainda ir necessitar de um outro objeto que possua a biblioteca de
manipulao dos dados. Esse objeto ser um Redordset que agora iremos entender.

Declarando o Objeto Recordset


Voc declara um objeto Recordset
ADODB.Connection.

de modo muito parecido como voc declara um

Ateno: Voc s poder utilizar um objeto Recordset em uma rotina, quando j tenha
sido criado e configurado uma objeto de Conexo nessa mesma rotina.
Veja o Exemplo
Este exemplo apresenta a criaao de uma conexo ADODB e tambm do Recordset.
Neste tpico iremos apenas nos ater a criao e configurao do Recordset.

Comentrio sobre o cdigo circulado acima


Dim Rs As ADODB.Recordset

Nessa linha declarada uma varivel com o nome de Rs sendo ela um Recordset.
sempre melhor fazer as declaraes de variveis na parte superior da rotina.

Set Rs = New ADODB.Recordset

Agora a varivel Rs carregada com uma nova instncia de Recordset. Lembre-se, a partir dessa
instruo a varivel de objeto Rs agora um Recordset e necessita ser configurado.

Rs.ActiveConnection = Conex

Aqui definido a conexo ADODB que o Recordset ir utilizar. Foi informado que a conexo ser
o objeto Conex. Lembre-se que no cdigo a varivel de objeto Conex j estaria configurada com
todas as informaes necessrias relacionadas ao Provedor utilizado, Endereo do banco de
dados, Senha de Acesso entre outros.

Rs.Open "TVenda"

105

Imerso em Macros e VBA - Excel


Neste momento o Recordset aberto(.Open) e aps um espao vazio definida a tabela do
arquivo que ser conectada para a manipulao dos dados. Neste caso a tabela se chama
TVenda

Muito Importante!!
 Um Recordset s poder conectar uma tabela de cada vez. Caso necessite trabalhar
com duas tabelas em uma mesma rotina, voc dever criar outra Connection e um outro
Recordset.

15.2.3.1.

Configurao dos Parmetros do Recordset

Quando se abre um Recordset, alguns parmetros devem ser configurados para que a
manipulaao dos dados ocorram perfeitamente. Esses parametros so definidos no
mtodo Open do Recordset e apresentam as seguinte propriedades:

Rs.Open Source, CursorType, LockType

Essas propriedades esto relacionados a:


- Source (relacionado procura dos dados que ser feita):
tabela do banco de dados ou uma consulta SQL

Pode ser o nome da

- CursorType (relacionado ao tipo do cursor): Define a performance e a maneira dos


registros sero trazidos.
- LockType (relacionado ao tipo de bloqueio): Abertura somente leitura ou com
posibilidade de ediao dos registros (excluso, inserso, alterao, etc.)

Possibilidade que cada propriedade pode assumir


Propriedade Source
Propriedade Obrigatria. Determina qual tabela do banco de dados ser aberta

Propriedade CursorType
A propriedade CursorType determina se alteraes que outros usurios poderiam fazer
nos registros da fonte aparecem em seu Recordset e se todos os campos e registros so
trazidos para o Recordset quando for aberto.

106

Imerso em Macros e VBA - Excel


 AdOpenDynamic  Esse tipo de cursor permite acessar, navegar, editar ou excluir um
registro recuperados. Toda as alteraes feitas na fonte por outros usurios so
refletidas no Recordset. Esse tipo de cursor produz uma demanda maior de recurso do
que os outros tipos.
 AdOpenForwardOnly  Essa a configurao padro. Voc no tem acesso as
alteraes que outros usurios poderiam fazer. Voc deve utiliz-la somente para
avanar no Recordset; dependo das condies, voc poderia encontra erros se tentasse
se mover entre os registros. Esse tipo permite uso mais eficiente dos recursos do
sistema que os outros tipos de cursor.
 AdOpenKeyset  Como AdOpenDynamic, o tipo Keyset inicialmente recupera chaves
apenas. Se outros usurios editam valores de campos em registros, essas modificaes
aparecem quando voc recupera um registro completo. Os registros recm-adicionados
a fonte por outros usurios no so adicionados ao recordset.
 AdOpenStatic  Se outros usurios fizerem alteraes, o cursor no ir refletir essas
alteraes at que voc feche a abra a conexo novamente.

Propriedade LockType
A propriedade LockType permite controlar se e como possvel ao cdigo alterar os
dados na fonte do recordset. H quatro valores possveis:
 AdLockBatchOptimistic  Todas as edies que seu cdigo poderia fazer no
Recordset so salvas at que um mtodo Updatebatch seja encontrado. Nesse ponto,
as edies so salvas na fonte do Recordset. Isso no feito necessariamente registro
por registro. Voce poderia, por exemplo, editar cada registro no Recordset antes de
uma atualizao fazer com que as alteraes fossem salvas.
 AdLockOptimistic  Neste caso durante o processo de edio, o registro no
bloqueado e pode ser editado por outros usurios. Ele bloqueado durante a
atualizao de Recordset e ento liberado novamente.
 AdLockPessimistic  Neste caso outro usurio no pode editar um registro que voc
j comeou a editar at depois de voc ter atualizado o Recordset.
 AdLockReadOnly  Essa a configurao padro. Ou seja se no for informando
nada essa informaco ser este caso outro usurio no pode editar um registro que
voc j comeou a editar at depois de voc ter atualizado o Recordset.

107

Imerso em Macros e VBA - Excel

15.3.

Criando Uma Conexo com Access via ADO

Nos prximos tpicos vamos trabalhar com conexes Excel

Access

Para ficar mais fcil e dinmico o aprendizado, iremos trabalhar com um mesmo arquivo
Access e uma mesma tabela para todos dos casos. As informaes quanto ao arquivo e
suas tabelas esto abaixo:
O nome do arquivo: BaseDados.mdb
Local do Arquivo: C:\Pasta Principal\BaseDados.mdb
Tabelas contidas no arquivo: TFuncionario e TVenda
Tabela: TFuncionario - com seus respectivos campos e registros

Tabela: TVenda - com seus respectivos campos e registros

108

Imerso em Macros e VBA - Excel

15.3.1.

Importando Registros do Access

Neste caso iremos criar uma rotina para importar todos os registros da tabela TVenda

Comentrio sobre o cdigo:


Etapa: Declarando as variveis
Varivel Conex  Varivel para a conexo ADO
Varivel Rs  Varivel para RecordSet para que seja possvel o manuseio dos registros na
tabela TVendas
Varivel Endereo Arquivo  Para guardar o endereo completo do banco de dados.
Varivel Provedor  Para armazenar o provedor de conexo que ser utilizado. Neste caso o
provedor foi o Jet, j que o arquivo do banco de dados Access.

109

Imerso em Macros e VBA - Excel


Etapa: Carregando as variveis
EndereoArq  Recebe o endereo completo do arquivo banco de dados. O endereo um
texto, ou seja, uma string (entre aspas )
Provedor  Recebe a definio do provedor de acesso ao arquivo. A definio do provedor um
texto, ou seja, uma string (entre aspas )

Etapa: Abre a Conexo


Set Conex = New ADODB.Connection
nova (New) estncia de ADO de conexo.

 Carrega a varivel de objeto Conex, abrindo uma

Conex.ConnectionString = Provedor & EnderecoArq


 Define a String de conexo onde foi
informado o Provedor utilizado e o Endereo do Arquivo do Banco de Dados. Ambas informaes
so essenciais para que o arquivo seja aberto. (Observe que a varivel Provedor est
concatenada (&) com a varivel EnderecoArq - isto necessrio para formar a string de conexo
para abertura do arquivo.
Conex.Open  A conexo aberta (.Open).

Etapa: Abre o Recordset


Set Rs = New ADODB.Recordset
estncia ADO do Recordset.

 Carrega a varivel de objeto Rs, abrindo uma nova (New)

Rs.ActiveConnection = Conex  Define a conexo ADO que ser utilizada. Neste caso est
utilizando a Conex - lembre-se que nessa varivel j contem todas as informaes da conexo.
Rs.Open TVenda  O Recordset aberto (.Open), e logo em seguida informado a Tabela
do arquivo Access que ser manipulada (TVenda) s pode ser uma tabela por Recordset.

Etapa: Limpando a rea da planilha


Range("A1:J500").Clear
ativa.

Essa instruo limpa a rea entre a clula A1:J500 da planilha

Etapa: Importando os registros para a planilha


Range("A1").CopyFromRecordset Rs  A instruo CopyFromRecordset, copia todos os
registros da base de dados Rs para a planilha Excel. Lembre-se que na varivel de objeto Rs
contem todas as informaes necessrias quanto as dados que ser importada.

Etapa: Fecha a Conexao


Conex.Close  Essa instruo fecha a conexo, ou seja encerra a conexo. Essa instruo
importante para que o sistema no fique disponibilizando recursos desnecessrios em uma
conexo aberta que no est sendo mais utilizada.

110

Imerso em Macros e VBA - Excel

15.3.2.

Inserindo Registros do Excel para o Access

Neste exemplo iremos enviar os registros contidos numa planilha para uma tabela Access.
Para isso voc j deve ter a tabela no Access criada e configurada com seus respectivos
campos. No exemplo a tabela do Access se chama TVenda
Os procedimentos de declarao das variveis e abertura da conexo so os mesmos do
caso anterior, o que ir mudar a partir da Abre o Recordset. Os comentrios desse
cdigo seguem aps a figura.
Cdigo completo da Rotina

111

Imerso em Macros e VBA - Excel


Comentrio sobre o cdigo:
Etapa: Abre o Recordset
Set Rs = New ADODB.Recordset
estncia de ADO do Recordset.

 Carrega a varivel de objeto Rs, abrindo uma nova (New)

Rs.ActiveConnection = Conex  Define a conexo ADO que ser utilizada. Neste caso est
sendo utilizado a Conex - lembre-se que nessa varivel j contem todas as informaes da
conexo.
Rs.Open TVenda  O Recordset aberto (.Open), e logo em seguida informado a Tabela
do arquivo Access que ser manipulada (TVenda) s pode ser uma tabela por Recordset.

Etapa: Carrega a varivel Lin


Lin = 2
 Essa instruo carrega a varivel Lin com o nmero 2. Essa varivel ir controlar em
qual linha da planilha Excel estar o registro que ser enviado para o Access. 2 porque o primeiro
registro a ser enviado est na linha dois da planilha.

Posiciona o Recordset no o ltimo registro da tabela do Access


On Error Resume Next
Rs.MoveLast
On Error GoTo 0
Rs.MoveLast  Move o Recordset para o ltimo registro, assim haver certeza que os registros
inseridos ficaro aps os que j existem no Access.
Obs.: Foi includa uma instruo de tratamento de erro para evitar o caso em que o cursor j
esteja no ltimo registro do Access, pois isso ocasionaria um erro no sistema se envissemos o
cursor novamente ao ltimo registro.

Etapa: Insere os registros na tabela do Access


Essa a ltima etapa do cdigo. Um loop Do While faz com que cada linha da planilha
(um registro) seja inserida na Tabela do Access. Os campos no Access so identificados
com Rs(Nome do Campo).
Existem ainda dois comandos dentro do loop:
Rs.AddNew - Abre um novo registro na tabela do Access para receber o registro.
Rs.Update - Atualiza a tabela do Access assim que o registro tenha sido transferido.

112

Imerso em Macros e VBA - Excel

15.3.3.

Editando Registros do Excel no Access

Neste exemplo iremos editar registros contidos em uma tabela Access atravs do Excel.
Para isso voc dever ter os registros em uma planilha no Excel. No nosso exemplo, a
tabela do Access se chama TVenda
Os procedimentos de declarao das variveis e abertura da conexo e do Recordset so
os mesmos do caso anterior, o que ir mudar a partir da Localizao e Edio dos
Registros. Os comentrios desse cdigo seguem aps a figura.

Cdigo completo da Rotina

113

Imerso em Macros e VBA - Excel

Comentrio do Cdigo Acima


Etapa: Localiza e Edita os registros

Existem 2 loops nessa parte do cdigo. O primeiro Loop controla a linha da planilha onde est o
registro a ser editado. O segundo utilizado para fazer a procura do registro na tabela do Access.
Lin = 2
Carrega a varivel Lin com 2, pois o primeiro registro a ser editado est na segunda linha da
planilha.
Do While Cells(Lin, 1) <> Empty
Inicia o primeiro loop o qual dever ser feito enquanto a clula testada da planilha for diferente(< >)
de Empty (Vazio)
Rs.MoveFirst
Move o cursor do Recordset para o primeiro registro (MoveFirst) da tabela do Access.
Do While Not Rs.EOF
Inicia o segundo Loop que deve ser feito enquanto no (Not) for o fim dos registros da
tabela.(Rs.EOF) . EOF quer dizer End Of File ou seja final do Arquivo
If Rs("Fatura") = Cells(Lin, 1) Then
Esse IF testa se a informao contida no campo Fatura daquele registro da tabela Access igual
a informao contida na clula da planilha. Se for igual significa que esse o registro que deve ser
alterado e ento a alterao inicia, campo por campo. Caso contrrio ser executado a instruo
que est aps o End If que a Rs.MoveNext (mover para o prximo registro).
Rs("DtVenda") = Cells(Lin, 2)
Rs("Produto") = Cells(Lin, 3)
Rs("Cliente") = Cells(Lin, 4)
Rs("Cidade") = Cells(Lin, 5)
Rs("Prazo") = Cells(Lin, 6)
Rs("Quant") = Cells(Lin, 7)
Rs("Vendedor") = Cells(Lin, 8)
A etapa da edio dos registros efetivamente. Os campos no Access so identificados pelo seu
nome, ento fundamental que voc conhea a tabela do Access e seus campos para pod-los
identificar.
Exit Do
Essa instruo encerra o loop. Foi colocada visto que uma vez localizado e editado o registro no
necessita que o loop continue.
End If
Encerra o bloco If
Rs.MoveNext
Move o cursor do Recordset para o prximo registro do Access. Essa instruo ser feita at que
se localize o registro que deve ser editado.
Loop
Encerra o a estrutura Loop interna.
Lin = Lin + 1
Incrementa a varivel Lin. Essa varivel controla numero da linha onde est o registro na planilha
Excel.
Loop
Encerra o a estrutura Loop externa.

114

Imerso em Macros e VBA - Excel

15.3.4.

Excluindo Registros do Access Atraves do Excel

Neste exemplo iremos excluir registros que esto numa tabela do Access.
Neste cdigo a localizao do registro no Access ser feita pelo nmero da Fatura. A
tabela do Access ser a mesma dos casos anteriores chamada de TVenda .
Os procedimentos de declarao das variveis e abertura do ADODB.Connection e do
Recordset so os mesmos dos casos anteriores. A parte do cdigo onde possui as
instrues para Localizao e Excluso do Registro ser comentado abaixo, porem
muito semelhante do caso anterior.

Cdigo completo da Rotina

115

Imerso em Macros e VBA - Excel

Comentrio do Cdigo Acima


Etapa: Localiza e Exclui o registro
Essa etapa do cdigo praticamente igual ao cdigo anterior, para atualizao de
registros. A nica diferena a insero da instruo Rs.Delete no lugar das instrues
que alterava as informaes da tabela.

116

Imerso em Macros e VBA - Excel

15.4.

Criando Conexo com SQL Server via ADO

O procedimento para elaborar uma conexo com uma base SQLServer utilizando o
ADO(ActiveX Data Objects) praticamente igual ao que foi visto no caso do Access.
O que ir ocorrer que a String de Conexo com SQLServer necessita mais informaoes
do que no caso do Access. Isso porque o SQLServer um banco de dados Cliente /
Servidor e necessita de informacoes complementares.
Para montar a String de Conexo voc vai ter que informar:
- Provedor  No caso poder ser o SQLOLEDB.1
- Servidor  O endereo do seu SQL Server
- Arquivo  O nome do arquivo que ser acessado da base SQLServer
- Usuario  A identificaao do usuario para o Login
- Senha  Senha de acesso do usuario
O Cdigo abaixo mostra a abertura da conexo e do Recordset de um arquivo do
SQLServer, chamado NorthWind.
A tabela para o Recordset desse arquivo foi a
Products.

Comentrio sobre o cdigo acima


Etapa: Carrega as variveis para montar a conexo com a base
Nessa parte cdigo as variveis so carregadas com as informaes necessria para
montar a String de Conexo, observe que em cada informao transferida para a varivel
possui um nome antes. Esse nome refere-se ao nome da propriedade, assim para voc

117

Imerso em Macros e VBA - Excel


informar o provedor voc dever colocar antes Provider= , para o servidor o texto Data
Source= , para o arquivo Initial Catalog= e assim para todos.

Codgo completo para Importaao de dados de Base SQL Server

ATENO

Outros exemplos de conexo com SQL Server, onde registros so inseridos,


excluidos, editados voc ir encontrar no material complementar em CD desse
treinamentos.

118

Imerso em Macros e VBA - Excel

15.5.

Criando Conexo com Outro Arquivo Excel via DAO

A conexo e importao de dados de outro arquivo Excel pode ser feita utilizando tambm
o ADO(ActiveX Data Objects) mas voc ficar limitado a apenas importar dados sem ter a
possibilidade de enviar dados para o outro arquivo. Em razo desse detalhe usaremos o
objeto DAO(Data Access Objects) para essa conexo, e assim alm de importar, enviar
dados entre arquivos Excel.
Obs.: O objeto ADO e DAO no do suporte para voc editar ou excluir registros de
uma planilha Excel, ficando assim limitado apenas a importar e exportar registros entre
arquivos Excel.

15.5.1.

Estabelecendo a referncia com biblioteca DAO

Como agora voc ir utilizar uma conexo DAO voc primeiro ter que estabelecer agora
uma referncia a biblioteca DAO no seu computador. Para isso v ao VBE e clique em
Ferramentas  Referncia ...

Na tela que ir aparecer escolha uma referencia ao Microsoft DAO 3.6 Objects Library
Caso voc no encontre a verso 3.6 em seu computador, voc poder escolher uma
verso mais baixa.

119

Imerso em Macros e VBA - Excel

15.5.2.

Importando Registros de Outro Arquivo Excel

Neste caso iremos criar uma rotina para importar todos os registros localizados da planilha
chamada FUNCIONRIOS de um arquivo chamado BaseDados.xls

DICA:
Ao invs de utilizar o nome da planilha para identificar a rea que ser
importada, voc poder utilizar o nome da rea dado a ela. Dessa forma voc
iria substituir [FUNCIONRIOS$] por simplesmente o Nome de rea, sem
colchetes [ e sem o cifro $

120

Imerso em Macros e VBA - Excel

15.5.3.

Exportando Registros para Outro Arquivo Excel

Neste caso iremos criar uma rotina para exportar um registro que est na 2 linha da
planilha ativa, enviando para a planilhas chamada INDICE_DIARIO e um arquivo
chamado BaseDados.xls

Obsero:
Todos os exemplos de conexo apresentados nessa apostila esto disponveis
no CD entregue aos participantes desse treinamento.

121

Imerso em Macros e VBA - Excel

16.

Proteo das rotinas de macros com senha de acesso

Assim como pode ser inserida senha de proteo de arquivo e de planilha, possvel
tambm inserir senha no VBE(Visual Basic Editor).
Este procedimento importante para que seus cdigos fiquem protegidos contra
alteraes por outros usurios.

Procedimentos para insero da senha de proteo


1. Dentro do editor do VBA na janela de projetos, clique com o boto direito do mouse em
VBAProject (correspondente a pasta que desejar proteger).
2. No menu de opes que aparecer clique em Propriedades de VBAProject...

Clique com boto direito do mouse

3. Na Janela Propriedades do projeto, clique na guia Proteo e marque a opo Bloquear


projeto para exibio.
4. Abaixo Insira a Senha e em seguida confirme a Senha.

122

Imerso em Macros e VBA - Excel

5. Clique OK e em seguida Salve o arquivo.

Os cdigos estaro protegidos assim que o arquivo for aberto novamente

123

Imerso em Macros e VBA - Excel

17.

Melhorando a execuo das macros

1 - Impedindo a atualizao da tela durante a execuo da macro


Quando uma macro est sendo executada, todos os procedimentos so visto na tela, tais
como: abrir arquivos, copiar, colar, etc. Para que os procedimentos no sejam
apresentados, escreva essa linha de cdigo no incio da sua rotina.

Application.ScreenUpdating = False

2 - Impedindo a abertura da caixa de dilogo


Durante a execuo de uma macro poder ser aberta algumas caixas de dilogo do
prprio Excel, do tipo: Salvar, Atualizar Vnculos, etc. isto poder atrapalhar sua rotina
interrompendo a macro para evitar a abertura de caixasde dialogo, digite essa instruo.

Application.DisplayAlerts = False

3 - Impedindo a interrupo da execuo da macro


Se durante a execuo de uma macro for pressionada a tecla ESC ou CTRL+BREAK a
macro ser interrompida. Para impedir que a interrupo ocorra, insira no incio da rotina
esta linha de cdigo.
Ateno!!! as vezes a interrupo do cdigo pelo usurio se faz necessria.

Application.EnableCancelKey = xlDisabled

124