Vous êtes sur la page 1sur 360

Excel VBA - Mdulo I

TE 1621/1_WEB
Excel VBA - Mdulo I
Crditos

Copyright TechnoEdition Editora Ltda.

Todos os direitos autorais reservados. Este manual no pode ser copiado, fotocopiado,
reproduzido, traduzido ou convertido em qualquer forma eletrnica, ou legvel por qualquer
meio, em parte ou no todo, sem a aprovao prvia, por escrito, da TechnoEdition Editora Ltda.,
estando o contrafator sujeito a responder por crime de Violao de Direito Autoral, conforme o
art.184 do Cdigo Penal Brasileiro, alm de responder por Perdas e Danos. Todos os logotipos
e marcas utilizados neste material pertencem s suas respectivas empresas.

As marcas registradas e os nomes comerciais citados nesta obra, mesmo que no sejam assim identificados,
pertencem aos seus respectivos proprietrios nos termos das leis, convenes e diretrizes nacionais e internacionais.
Crdito das imagens: Banco de Imagens Digital Juice, Inc.

Excel VBA - Mdulo I


Coordenao Geral Atualizao
Marcia M. Rosa Beatriz Silva Ramos

Coordenao Editorial Reviso Ortogrfica


Henrique Thomaz Bruscagin e Gramatical
Maria Rosa Carnicelli Kushnir
Superviso Editorial
Simone Rocha Arajo Pereira Diagramao
Shelida Letcia Lopes

Edio n 1 | Cd.: 1621/1_WEB


Outubro/2013

Este material constitui uma nova obra e uma derivao da seguinte obra original, produzida por TechnoEdition
Editora Ltda. em Out/2010:
Excel 2010 VBA Mdulo I
Autoria:
Viviane Martins Ferreira

4
Sumrio

Informaes sobre o treinamento...............................................................................................9

Captulo 1 - Manipulao de Macros........................................................................................ 11


1.1. Introduo ao VBA..................................................................................12
1.2. Macros...................................................................................................12
1.3. Editor do Visual Basic.............................................................................12
1.3.1. Janela Project Explorer............................................................................17
1.3.2. Janela Verificao imediata.....................................................................18
1.4. Objetos..................................................................................................20
1.4.1. Propriedades e mtodos.........................................................................20
1.4.2. Colees................................................................................................21
1.4.3. Hierarquia de objetos.............................................................................21
1.5. Elaborando macros no Visual Basic.........................................................22
1.5.1. Automacros............................................................................................23
1.5.2. Macros em diferentes pastas de trabalho................................................25
1.5.3. Pontos de interrupo............................................................................25
1.6. Sistema de ajuda....................................................................................27
1.7. Pesquisador de objeto............................................................................28
Teste seus conhecimentos.......................................................................................................... 31
Mos obra!....................................................................................................................................... 35

Captulo 2 - Programao de macros...................................................................................... 37


2.1. Introduo..............................................................................................38
2.2. Inserindo macros sem o gravador...........................................................39
2.3. Propriedades e mtodos de alguns objetos.............................................46
2.3.1. Application.............................................................................................47
2.3.1.1. Propriedades..........................................................................................47
2.3.1.2. Mtodos.................................................................................................52
2.3.2. Workbooks.............................................................................................52
2.3.2.1. Propriedades..........................................................................................52
2.3.2.2. Mtodos.................................................................................................53
2.3.3. Worksheets............................................................................................55
2.3.3.1. Propriedades..........................................................................................55
2.3.3.2. Mtodos.................................................................................................58
2.3.4. Range.....................................................................................................61
2.3.4.1. Propriedades..........................................................................................61
2.3.4.2. Mtodos.................................................................................................62
2.3.5. Referenciando uma clula ou um intervalo de clulas.............................65
2.3.6. Referenciando uma clula ativa ou seleo de clulas.............................66
2.3.7. Referenciando de acordo com um deslocamento....................................66
2.4. Caixas de entrada (InputBox)..................................................................72
2.5. Instrues With e End With.....................................................................74

5
Excel VBA - Mdulo I

2.6. Formatando propriedades......................................................................78


2.6.1. Cor do preenchimento............................................................................78
2.6.2. Fonte......................................................................................................80
2.6.3. Alinhamento...........................................................................................82
2.6.4. Bordas....................................................................................................85
2.6.5. Nmero..................................................................................................88
2.7. Caixa de mensagem (MsgBox)................................................................90
2.7.1. Exibindo uma caixa de mensagem..........................................................91
2.7.2. Constantes utilizadas nas caixas de mensagem......................................93
2.7.3. Identificando o boto clicado..................................................................95
2.8. Mtodo GetOpenFilename......................................................................96
2.9. Mtodo GetSaveAsFilename....................................................................98
2.10. Caixas de dilogo do Excel.....................................................................99
2.10.1. Controlando a exibio dos itens da janela...........................................102
2.10.2. Operador NOT......................................................................................104
2.10.3. Trabalhando em linhas e colunas inteiras.............................................106
2.10.3.1. Inserindo e excluindo linhas, colunas e clulas.....................................106
2.10.3.2. Ajustando a largura e a altura de linhas e colunas................................107
Teste seus conhecimentos....................................................................................................... 111
Mos obra!.................................................................................................................................... 115

Captulo 3 - Operadores e variveis..................................................................................... 119


3.1. Introduo............................................................................................120
3.2. Operadores..........................................................................................120
3.2.1. Operadores aritmticos........................................................................121
3.2.2. Operadores de comparao..................................................................122
3.2.3. Operadores lgicos..............................................................................123
3.2.4. Operadores de concatenao................................................................124
3.2.5. Ordem das operaes...........................................................................125
3.3. Variveis..............................................................................................125
3.3.1. Declarando variveis.............................................................................128
3.3.1.1. Declarando no procedimento................................................................130
3.3.1.2. Declarando no mdulo.........................................................................133
3.3.1.3. Declarando no projeto..........................................................................134
3.3.1.4. Option Explicit.....................................................................................135
Teste seus conhecimentos....................................................................................................... 137
Mos obra!.................................................................................................................................... 141

Captulo 4 - Estruturas de deciso e repetio................................................................ 145


4.1. Introduo............................................................................................146
4.2. GoTo....................................................................................................146
4.3. If e suas estruturas...............................................................................147
4.3.1. If...Then...............................................................................................148
4.3.2. If...Then...Else......................................................................................152
4.3.3. If aninhado...........................................................................................158

6
Sumrio

4.3.4. Inserindo vrias condies com And e Or.............................................160


4.4. Select Case...........................................................................................163
4.5. Loop e suas estruturas.........................................................................165
4.5.1. Do...Loop.............................................................................................165
4.5.1.1. Do While...Loop....................................................................................166
4.5.1.2. Do Until...Loop.....................................................................................169
4.6. While...Wend........................................................................................171
4.7. For...Next e For Each...Next..................................................................172
Teste seus conhecimentos....................................................................................................... 179
Mos obra!.................................................................................................................................... 183

Captulo 5 - Funes.................................................................................................................... 189


5.1. Introduo............................................................................................190
5.2. Funes matemticas...........................................................................190
5.3. Funes de data e hora........................................................................191
5.4. Funes de tratamento de strings.........................................................198
5.5. Funes de converso..........................................................................205
5.6. Utilizando funes de planilha do Excel................................................206
5.7. Criando funes...................................................................................210
5.7.1. Utilizando as funes criadas...............................................................211
5.8. Utilizando funes em diversas pastas de trabalho...............................212
5.9. Assistente de Funo............................................................................215
Teste seus conhecimentos....................................................................................................... 219
Mos obra!.................................................................................................................................... 223

Captulo 6 - Formulrios (UserForms).................................................................................. 225


6.1. Importncia dos formulrios.................................................................226
6.2. Criando formulrios.............................................................................226
6.2.1. Inserindo controles em um formulrio..................................................228
6.2.1.1. Caixa de ferramentas...........................................................................229
6.2.2. Configurando as propriedades dos controles........................................233
6.2.3. Configurando a aparncia dos controles...............................................241
6.2.4. Aplicando cdigos aos controles..........................................................242
6.2.5. Elaborando um formulrio....................................................................248
6.2.6. Exibindo um formulrio........................................................................274
Teste seus conhecimentos....................................................................................................... 279
Mos obra!.................................................................................................................................... 283

Captulo 7 - Eventos no associados a objetos............................................................... 285


7.1. Introduo............................................................................................286
7.2. Mtodo OnKey......................................................................................286
7.3. Mtodo OnTime....................................................................................290
Teste seus conhecimentos....................................................................................................... 295
Mos obra!.................................................................................................................................... 299

7
Excel VBA - Mdulo I

Captulo 8 - Variveis arrays.................................................................................................... 301


8.1. Arrays..................................................................................................302
8.1.1. Declarando arrays................................................................................303
8.1.2. Arrays multidimensionais.....................................................................305
8.1.3. Arrays dinmicos..................................................................................308
Teste seus conhecimentos....................................................................................................... 311
Mos obra!.................................................................................................................................... 315

Captulo 9 - Tratamento de erros........................................................................................... 317


9.1. Introduo............................................................................................318
9.2. Tipos de erros......................................................................................318
9.3. Tratamento em tempo de execuo......................................................319
9.3.1. Erros interceptveis..............................................................................325
9.4. Depurador do VBA................................................................................331
9.4.1. Pontos de interrupo..........................................................................331
9.4.1.1. Janela Verificao imediata...................................................................336
9.4.1.2. Janela Inspees de variveis................................................................339
Teste seus conhecimentos....................................................................................................... 343
Mos obra!.................................................................................................................................... 347

8
Informaes sobre o treinamento

Para que os alunos possam obter um bom aproveitamento deste


curso de Excel VBA - Mdulo I, imprescindvel que eles tenham
participado dos nossos cursos de Excel - Mdulo II e Introduo
Lgica de Programao, ou possuam conhecimentos equivalentes.

9
Manipulao
de Macros
1
99 Introduo ao VBA;
99 Macros;
99 Editor do Visual Basic;
99 Objetos;
99 Elaborando macros no Visual Basic;
99 Sistema de ajuda;
99 Pesquisador de objeto.
Excel VBA - Mdulo I

1.1.Introduo ao VBA
Neste captulo, abordaremos a aplicao dos recursos do VBA no Excel. O VBA,
um acrnimo para Visual Basic for Application, uma linguagem de programao
visual orientada a objetos cujos recursos so semelhantes aos recursos da
linguagem Visual Basic.

1.2.Macros
As macros tm a funo de otimizar rotinas, ou seja, conjuntos de tarefas que
so realizadas frequentemente. Para exemplificar, podemos utilizar macros para
aperfeioar rotinas de formatao ou filtragem de dados no Excel, fazendo com
que vrias aes sejam executadas em uma determinada ordem por meio de
um nico atalho de teclado, simplificando um processo que frequentemente
executado e tornando-o muito mais rpido. As macros podem executar rotinas
das mais simples s mais complexas e podem ser criadas com o gravador de
macros ou com o editor de Visual Basic que incorporado ao Excel.

1.3.Editor do Visual Basic


O Editor do Visual Basic, ou VBE, uma aplicao em que podemos escrever e
editar macros em VBA. Apesar de ser uma aplicao independente, necessrio
que o Excel esteja aberto para utilizarmos o VBE. Para acessarmos o VBE, basta
clicarmos na guia Desenvolvedor e, em seguida, no boto Visual Basic do
grupo Cdigo, ou utilizarmos o atalho ALT + F11. Para voltar tela do Excel,
podemos pressionar ALT + F11 novamente.

12
Manipulao de Macros
1
A imagem a seguir ilustra a janela do VBE:

Barra de menus Barra de ferramentas

Janela Cdigo

Project Explorer

Janela Propriedades

Janela Verificao imediata

Para ativarmos a guia Desenvolvedor, devemos acessar a


guia Arquivo e clicar em Opes. Em seguida, basta clicar em
Personalizar Faixa de Opes e ativar o item Desenvolvedor,
contido na caixa Personalizar a Faixa de Opes.

13
Excel VBA - Mdulo I

Barra de menus

A barra de menus do VBE possui aparncia semelhante s barras de menus


que encontramos na maioria dos programas. Por meio dos menus, temos
acesso aos comandos que podemos utilizar com os componentes exibidos
no VBE.

Barra de ferramentas padro

A barra de ferramentas padro, localizada abaixo da barra de menus, exibe


os principais comandos do programa, descritos na tabela a seguir:

Comando Descrio

(Exibir Microsoft Retorna para a janela do Excel.


Excel)
Insere um UserForm, um mdulo, um mdulo de
(Inserir UserForm) classe ou um procedimento.

Salva a pasta de trabalho.


(Salvar ...)
Recorta o texto ou o objeto selecionado, movendo-o
(Recortar) para a rea de transferncia.

Copia o texto ou o objeto selecionado na rea de


(Copiar) transferncia.

Cola o contedo da rea de transferncia.


(Colar)

Abre a caixa de dilogo Localizar.


(Localizar)

Desfaz o ltimo comando executado.


(Desfazer)

14
Manipulao de Macros
1
Comando Descrio

Refaz o ltimo comando desfeito.


(Refazer)

Executa o procedimento no qual o cursor est


(Executar Sub/ localizado ou o UserForm.
UserForm)

Pausa a execuo do procedimento.


(Interromper)

Interrompe a execuo da macro.


(Redefinir)

Ativa o modo de criao, no qual nenhum evento


disparado.
(Modo de criao)

Exibe a janela Project Explorer.


(Project Explorer)

Exibe a janela Propriedades.


(Janela Propriedades)

Exibe o Pesquisador de objeto.


(Pesquisador de
Objeto)

Ativa ou desativa a exibio da caixa de ferramentas.


Este boto s disponibilizado quando um UserForm
(Caixa de
selecionado.
Ferramentas)

Abre a ajuda do VBA.


(Ajuda do Microsoft
VBA)

15
Excel VBA - Mdulo I

Janela Project Explorer

Exibe todas as pastas de trabalho do Excel atualmente abertas. A exibio


feita em uma estrutura hierrquica que inclui outros itens aptos a serem
adicionados no VBE, como mdulos ou formulrios. Caso essa janela no
esteja visvel, para exibi-la, podemos clicar no comando Project Explorer
do menu Exibir, clicar no boto Project Explorer ( ) ou utilizar o atalho
CTRL + R.

Janela Propriedades

Exibe as propriedades de um objeto selecionado na janela Project Explorer.


Caso essa janela no esteja visvel, podemos clicar na opo Janela
Propriedades do menu Exibir, clicar no boto Janela Propriedades ( )
ou utilizar o atalho F4.

Janela Cdigo

Exibe o cdigo VBA para o item que selecionado com um clique duplo na
janela Project Explorer. Essa janela tambm exibida quando selecionamos
um item na janela Project Explorer e clicamos no boto Exibir cdigo ( ).

Janela Verificao imediata

Utilizada para executarmos instrues VBA diretamente ou para depurarmos


o cdigo. Caso essa janela no esteja visvel, podemos clicar na opo Janela
Verificao imediata do menu Exibir ou utilizar o atalho CTRL + G.

16
Manipulao de Macros
1
1.3.1.Janela Project Explorer
A janela Project Explorer, ilustrada na imagem a seguir, apresenta trs botes
e uma rea principal, que exibe, em uma estrutura hierrquica, os projetos
carregados, incluindo todos os seus itens e referncias:

Os trs botes da janela Project Explorer so descritos a seguir:

Exibir cdigo: Abre a janela Code, utilizada para gravar e editar cdigo
para o item selecionado;

Exibir objeto: Abre a janela Objeto para o documento ou UserForm


selecionado;

Alternar pastas: Exibe ou oculta as pastas. Quando as pastas ficam


ocultas, seus contedos ainda ficam visveis.

17
Excel VBA - Mdulo I

A lista a seguir descreve os itens que a rea principal pode exibir. Podemos
expandir ou contrair a exibio dos itens utilizando os botes de mais (+) e
menos (-):

: Representa um projeto;

: Representa um UserForm (arquivos .frm do projeto);

: Representa um mdulo (arquivos .bas do projeto);

: Representa um mdulo de classe (arquivos .cls do projeto);

: Representa ActiveX Designers, ou seja, os criadores (arquivos .dsr do


projeto);

: Representa as referncias de outros projetos, definidas com o comando


Referncias do menu Ferramentas.

Os documentos so representados por cones diferenciados,


de acordo com seu tipo.

1.3.2.Janela Verificao imediata


Podemos utilizar a janela Verificao imediata para verificar resultados de
variveis durante a execuo de uma macro. Alm disso, possvel testar
funes dentro da janela Verificao imediata.

No exemplo a seguir, com a utilizao do comando debug.print, ser enviada


para a janela Verificao imediata uma informao (data e horrio do sistema).

Sub Exemplo()
Debug.Print Date
Debug.Print Time
End Sub

18
Manipulao de Macros
1
Aps executarmos a macro (tecla de funo F5), teremos o seguinte resultado:

Estando com o cursor posicionado dentro da janela Verificao imediata,


possvel executarmos o resultado de uma funo. Para isso, basta utilizarmos
o ponto de interrogao (?) seguido da funo desejada e pressionarmos a
tecla ENTER. A resposta ao comando aparecer na linha inferior, conforme o
exemplo seguinte:

19
Excel VBA - Mdulo I

1.4.Objetos
Os objetos so partes integrantes de um aplicativo. No caso do Excel, so
exemplos de objetos os grficos, as planilhas e as clulas, entre muitos outros
que podem ser controlados pelo VBA. Todos os objetos possuem propriedades e
mtodos e esto organizados em uma hierarquia. Os conceitos de propriedade,
mtodo e hierarquia sero abordados a seguir.

1.4.1.Propriedades e mtodos
Uma propriedade uma caracterstica de um objeto, como posicionamento,
cor ou tamanho. Podemos transportar esse conceito para qualquer objeto do
mundo real; uma bola, por exemplo, possui valores de propriedades como
tamanho, cor e peso.

A sintaxe utilizada para definir um valor de propriedade NomeDoObjeto.


Propriedade = ValorDaPropriedade. Assim, se o objeto bola do exemplo
anterior pudesse ser gerenciado pelo Visual Basic, sua propriedade cor poderia
ser definida com a sintaxe bola.cor = amarelo.

Utilizando um exemplo de objeto do Excel, podemos definir o valor 15 para


clula B2 com a sintaxe Range(B2).Value = 15, em que Range(B2) um
objeto, no qual consta a clula B2, e Value o nome da propriedade que define
o contedo de uma clula.

Para obtermos o valor de uma propriedade de um objeto, a sintaxe


NomeDoObjeto.Propriedade. Assim, utilizando o exemplo da clula B2, para
obtermos seu valor como retorno, determinamos a sintaxe Range(B2).Value.

Um mtodo qualquer ao executada com um objeto. Transferindo esse


conceito para o objeto bola, exemplificado anteriormente, podemos dizer que
jogar, encher e esvaziar so mtodos aplicveis ao objeto.

A sintaxe utilizada para um mtodo NomeDoObjeto.Mtodo. Assim, se o


objeto bola do exemplo anterior pudesse ser gerenciado pelo Visual Basic,
seu mtodo jogar utilizaria a sintaxe Bola.Jogar. Utilizando um exemplo de
objeto do Excel, o cdigo que limpa o contedo da clula B2 Range (B2).
ClearContents, em que ClearContents o mtodo responsvel por limpar o
contedo.

20
Manipulao de Macros
1
1.4.2.Colees
Uma coleo um objeto que rene objetos da mesma categoria. Podemos
entender esse conceito utilizando exemplos do mundo real, como um edifcio
residencial, que um objeto que rene vrios objetos que pertencem mesma
categoria, os apartamentos. No Excel, existem diversas colees de objetos,
como a coleo de clulas de uma planilha, a coleo de planilhas de uma pasta
de trabalho e a coleo de pastas de trabalho abertas. Todas essas colees
so teis quando construmos um cdigo que faz referncia a vrios objetos de
uma mesma categoria.

Podemos saber quantos objetos existem em uma coleo por meio de sua
propriedade Count. Assim, para saber quantas linhas existem na coleo Rows,
podemos utilizar a sintaxe Rows.Count (para exibir esse resultado na clula
A1, por exemplo, utilizamos Range(A1).Value = Rows.Count).

Podemos fazer referncia a um objeto de uma coleo mencionando seu nmero,


como em Sheet(1), ou seu nome, como em Sheets(Sheet 1).

1.4.3.Hierarquia de objetos
O Excel, assim como outras aplicaes, possui vrios objetos organizados de
forma hierrquica. No topo da hierarquia desses objetos est o prprio Excel.
Assim, temos um objeto principal, a prpria aplicao, que contm vrios outros
objetos que, por sua vez, incluem outros, e assim sucessivamente.

Essa estrutura bem complexa por conter muitos objetos, porm, os objetos
mais utilizados representam um nmero pequeno; a maioria dos objetos
disponveis raramente utilizada.

Se quisermos alterar o estilo da fonte da clula A2, j estando posicionados na


planilha desejada, podemos utilizar o seguinte comando:

Sub Alterafonte1()
Range(a2).Font.Name = tahoma
Range(a2).Font.ColorIndex = 3
End Sub

21
Excel VBA - Mdulo I

Automaticamente, o Excel identifica que o comando ser executado na planilha


selecionada do arquivo em questo.

Deixando explcita a hierarquia dos objetos, podemos atingir o mesmo objetivo


com o comando adiante:

Sub alterafonte2()
Application.Workbooks(pasta1.xlsm). _
Worksheets(plan1).Range(a2).Font.Name = tahoma
End Sub

Podemos observar a sequncia hierrquica de objetos que antecedem o objeto


Range:

Application (Aplicativo Excel )


Workbooks (Pasta de trabalho)
Worksheets (Planilha)
Range (Clula)

1.5.Elaborando macros no Visual Basic


Para criarmos uma macro utilizando o Visual Basic, voc deve seguir os passos
adiante:

1. Clique na guia Desenvolvedor e, em seguida, no comando Visual Basic do


grupo Cdigo. A janela do editor do Visual Basic ser aberta;

2. Clique no comando Mdulo do menu Inserir, caso necessrio (os mdulos


so criados de forma automtica para todas as planilhas da pasta de trabalho);

3. Digite ou copie o cdigo de macro na janela Cdigo do mdulo;

4. Pressione F5 para executar a macro a partir da janela de mdulo.

22
Manipulao de Macros
1
1.5.1.Automacros
possvel fazer com que uma macro seja executada automaticamente ao
abrirmos ou fecharmos uma pasta de trabalho do Excel, sem a necessidade de
utilizarmos comandos para executar a macro.

Para que uma macro seja executada automaticamente logo aps a abertura da
pasta de trabalho que a contm, devemos definir seu nome como Auto_Open.

Sub auto_Open()
MsgBox Bem Vindo ao Sistema, vbInformation, Data: & Date
End Sub

Neste exemplo, ao ser aberto o arquivo (pasta de trabalho), ser exibida a


seguinte mensagem:

Observemos outro exemplo, que solicitar uma senha ao usurio no momento


da abertura do arquivo. Se a senha estiver correta, ser selecionada a planilha
Dados, caso contrrio, o arquivo ser fechado:

Sub auto_Open()
Dim senha As String
senha = InputBox(Digite a Senha)
If senha = 123 Then
MsgBox Bem Vindo ao Sistema
Sheets(Dados).Select
Else
MsgBox Senha Invlida
Workbooks(teste.xls).Close
End If
End Sub

23
Excel VBA - Mdulo I

Logicamente que ao utilizar a macro em questo, o cdigo em VBA tambm


dever estar protegido para que o usurio no consiga visualizar a programao.
Devemos notar tambm que foram utilizados alguns comandos novos, os quais
sero detalhados em captulos posteriores.

Para que uma macro seja executada de forma automtica antes do fechamento
da pasta de trabalho, seu nome deve ser definido como Auto_Close.

Sub auto_close()
MsgBox At Breve!
End Sub

Ao fechar o arquivo ser exibida automaticamente a mensagem adiante:

Podemos impedir que macros Auto_Open e Auto_Close


sejam executadas mantendo a tecla SHIFT pressionada
quando abrirmos ou fecharmos a pasta de trabalho.

24
Manipulao de Macros
1
1.5.2.Macros em diferentes pastas de trabalho
Quando duas ou mais pastas de trabalho esto abertas, estas so exibidas pelo
VBE na janela Project Explorer. Para visualizar as macros de qualquer pasta
de trabalho aberta, basta clicarmos na pasta Mdulos da pasta de trabalho
correspondente. Para visualizar o cdigo do mdulo, devemos clicar duas vezes
sobre o mesmo, ou selecion-lo e clicar no boto Exibir cdigo, exibido na
parte superior da janela Project Explorer.

Contas.xlsm

Pasta1.xlsx

1.5.3.Pontos de interrupo
Pontos de interrupo so pontos do cdigo em que a ocorre a interrupo
da execuo das instrues de um procedimento. Podemos definir pontos de
interrupo para tornar a anlise de erros e a depurao do cdigo mais fceis.

Para inserir ou remover um ponto de interrupo, voc deve posicionar o ponto


de insero na parte do cdigo em que deseja interromper a execuo e, em
seguida:

1. Clique na opo Ativar/Desativar pontos de interrupo do menu Depurar;

2. Pressione F9;

25
Excel VBA - Mdulo I

3. Clique no boto Ativar/Desativar pontos de interrupo ( ) da barra de


ferramentas Depurar ou clique ao lado da linha do cdigo, na barra indicadora
de margem.

Para acessar a barra de ferramentas Depurar clique no menu Exibir, em seguida


clique em Barra de ferramentas e Depurar.

importante lembrarmos que a interrupo sempre ocorrer na primeira


instruo da linha caso esta contenha vrias instrues separadas por dois-
pontos (:).

A formatao aplicada s linhas que contm pontos de


interrupo definida na guia Formato do editor da janela
Opes, acessada por meio do comando Opes do menu
Ferramentas.

Para removermos todos os pontos de interrupo de uma nica vez, devemos


clicar na opo Limpar todos os pontos de interrupo do menu Depurar ou
utilizar o atalho CTRL + SHIFT + F9.

Os pontos de interrupo no so salvos junto com


o cdigo.

26
Manipulao de Macros
1
1.6.Sistema de ajuda
Podemos acessar o sistema de ajuda do VBA, exibido a seguir, posicionando o
ponto de insero na palavra do cdigo sobre a qual desejamos informaes e,
em seguida, pressionando a tecla F1 ou, ainda, acessando o menu Ajuda e, em
seguida, clicando na opo Visual Basic For Applications.

27
Excel VBA - Mdulo I

1.7.Pesquisador de objeto
O Pesquisador de objeto uma ferramenta disponvel no VBE que permite
localizar objetos por meio da navegao na estrutura hierrquica de objetos
da aplicao. Para acessar essa ferramenta, cuja aparncia ilustrada a seguir,
basta clicar na opo Pesquisador de objeto do menu Exibir ou pressionar a
tecla F2.

A primeira caixa, localizada na parte superior esquerda, quando clicada, exibe


uma lista com todas as bibliotecas de objetos disponveis. Para visualizarmos os
objetos do Excel, devemos selecionar a opo Excel. Na segunda caixa abaixo
da primeira, podemos inserir palavras-chave para buscar objetos. Para obter
mais informaes sobre qualquer item pesquisado, podemos selecion-lo e
pressionar F1.

28
Manipulao de Macros
1
Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

O VBA uma linguagem de programao visual orientada a objetos cujos


recursos so semelhantes aos recursos da linguagem Visual Basic;

As macros tm a funo de otimizar rotinas, ou seja, conjuntos de tarefas


que so realizadas frequentemente;

O Editor do Visual Basic, ou VBE, uma aplicao em que podemos escrever


e editar macros em VBA;

A janela Project Explorer exibe os projetos em uma estrutura hierrquica,


incluindo todos os seus itens e referncias;

Todos os objetos possuem propriedades e mtodos e esto organizados


em uma hierarquia. Enquanto uma propriedade uma caracterstica de um
objeto, como posicionamento, cor ou tamanho, um mtodo qualquer ao
executada com um objeto;

Uma coleo um objeto que rene objetos da mesma categoria;

Podemos acessar o sistema de ajuda do VBA posicionando o ponto de


insero na palavra do cdigo sobre a qual desejamos informaes e, em
seguida, pressionando a tecla F1;

O Pesquisador de objeto uma ferramenta disponvel no VBE que permite


localizar objetos por meio da navegao na estrutura hierrquica de objetos
da aplicao.

29
Manipulao de
Macros
1
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Onde possvel escrever e editar macros?

a) Na prpria planilha.

b) Na guia Desenvolvedor.

c) No Visual Basic Editor (VBE).

d) Na janela Project Explorer.

e) Na janela Propriedades ou utilizando ALT + F4.

2. Para que serve a propriedade de um objeto?

a) Para definir a caracterstica de um objeto.

b) Para executar a macro no modo Interromper.

c) Para definir a ao de um objeto.

d) Objetos no possuem propriedades.

e) Para cancelar a execuo de uma macro.

32
Manipulao de Macros
1
3. Indique a alternativa correta:

a) Mtodos so utilizados para indicar as aes dos objetos.

b) Podemos indicar pontos de interrupo com a utilizao da tecla


de funo F1.

c) Todos os objetos possuem propriedades e mtodos e esto


organizados em uma hierarquia.

d) O atalho CTRL + F11 ativa a janela do VBE.

e) Alternativas A e B esto corretas.

4. Qual das alternativas a seguir refere-se ao local em que so


exibidos os projetos carregados, em uma estrutura hierrquica,
incluindo todos os seus itens e referncias?

a) Janela Propriedades

b) Guia Desenvolvedor

c) Janela Verificao imediata

d) Barra de ferramentas

e) Janela Project Explorer

33
Excel VBA - Mdulo I

5. Qual das alternativas a seguir est incorreta?

a) O atalho CTRL + R exibe a janela Project Explorer.

b) Na guia Desenvolvedor, encontramos opes para gravao de


macros e acesso ao VBE.

c) As macros tm a funo de otimizar rotinas e tarefas que so


realizadas frequentemente.

d) A linguagem VBA no considerada uma linguagem de


programao.

e) Ao pressionar a tecla F1, temos acesso ajuda do VBA.

34
1
Manipulao de
Macros
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Conhecendo o Visual Basic Editor e seus componentes

1. Acesse o editor VBE;

2. Caso estejam abertas, feche as seguintes janelas:

Project Explorer;

Verificao imediata;

Propriedades.

3. Deixe as janelas Propriedades e Project Explorer visveis.

36
Programao de
macros
2
99 Introduo programao de macros;
99 Inserindo macros sem o gravador;
99 Propriedades e mtodos de alguns objetos;
99 Caixas de entrada (InputBox);
99 Instrues With e End With;
99 Formatando propriedades;
99 Caixa de mensagem (MsgBox);
99 Mtodo GetOpenFilename;
99 Mtodo GetSaveAsFilename;
99 Caixas de dilogo do Excel.
Excel VBA - Mdulo I

2.1.Introduo
Quando desejamos criar macros, o melhor recurso que temos disposio
o gravador de macros do Excel. Ao utiliz-lo, o processo de desenvolvimento
de aplicaes bastante otimizado, uma vez que gastamos bem menos tempo
com digitao. Alm disso, o gravador de macro pode ser considerado como
um recurso para o aprendizado, pois, por meio dele, podemos conhecer os
cdigos correspondentes aos comandos.

Devemos atentar para o fato de o gravador ter um limite de quantidade de


gravao. Quando desejamos inserir uma condio em uma macro, caixas de
entrada, caixas de mensagem, entre outras operaes, o gravador no ser
capaz de suportar tantas informaes, ento torna-se necessrio digitar os
comandos no mdulo.

Ao gravamos uma macro, muitas informaes so criadas, porm, podemos


omitir muitas delas sem que isso cause efeitos negativos no produto final.
Quando, por exemplo, alteramos o tipo de fonte de uma clula, o cdigo que
o gravador gera contm todas as informaes da caixa Fonte do Excel, ficando
demasiado extenso. Temos adiante uma representao do cdigo que gerado
quando simplesmente escolhemos o tipo de fonte Tahoma:

Sub Tipo_de_Fonte()

Tipo_de_Fonte Macro

With Selection.Font
.Name = Tahoma
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight1
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
End Sub

38
Programao de macros
2
Como podemos notar, o cdigo gerado determina todas as propriedades da
fonte da clula ativa, porm, nem todas elas so necessrias quando o que
queremos apenas alterar o tipo de fonte. Poderamos, ento, usar uma macro
mais resumida, como mostrado a seguir:

Sub Tipo_de_Fonte()
Selection.Font.Name = Tahoma
End Sub

Ao excluirmos informaes desnecessrias, a leitura do cdigo torna-se mais


simples e sua execuo mais rpida.

O gravador de macros pode ser muito til quando no


conhecemos um determinado comando no Excel (por
exemplo, se precisamos atribuir uma cor em uma clula,
mas no sabemos que comando utilizar). Apesar de
gerar um cdigo extenso, podemos empregar apenas o
comando principal, desprezando as linhas de comandos
desnecessrias.

2.2.Inserindo macros sem o gravador


O gravador muito til para a criao de macros, porm, tambm podemos
cri-las sem o uso dele.

As macros so digitadas dentro de um mdulo. Caso necessrio, pode-se criar


mais mdulos alm do primeiro, os quais sero disponibilizados na pasta
Mdulos. Os mdulos subsequentes sero nomeados como Mdulo2, Mdulo3
e assim sucessivamente.

possvel alterar o nome de um mdulo seguindo os procedimentos adiante:

1. Clique no menu Exibir do VBE e, em seguida, na opo Janela Propriedades;

39
Excel VBA - Mdulo I

2. Digite o nome do mdulo dentro da propriedade Name.

Os mdulos, alm de armazenarem as macros, podem ser utilizados para


organizar o projeto. Podemos, por exemplo, criar um mdulo em que estaro
disponveis todas as macros referentes formatao do projeto, e outro mdulo
em que estaro somente os clculos realizados.

40
Programao de macros
2

Para criarmos uma macro sem o uso do gravador, devemos seguir os


procedimentos adiante:

1. Crie um arquivo no Excel;

2. Abra o editor de Visual Basic pressionando ALT + F11;

3. Crie a pasta Mdulos seguindo um dos procedimentos adiante:

Clique no menu Inserir, opo Mdulo;

Clique com o boto direito o mouse sobre a janela Project Explorer e


selecione, no menu de atalho que surgir, Inserir / Mdulo.

Ento, a pasta Mdulos ser criada e, dentro dela, teremos o Mdulo1 ativo.

41
Excel VBA - Mdulo I

4. Dentro do mdulo, crie uma macro com o nome Teste. Digite a palavra-
chave Sub, insira um espao, digite Teste e pressione ENTER. Essa ao faz
com que surjam dois parnteses aps o nome da macro. A instruo End Sub
surgir abaixo, indicando o final do procedimento, como mostrado a seguir:

Sub Teste()

End Sub

Devemos inserir o procedimento entre as duas instrues,


portanto, o cursor deve estar posicionado na linha
imediatamente abaixo do nome da macro.

5. Opcionalmente, insira um comentrio dentro do procedimento. Para tanto,


inicie a informao a ser comentada com um apstrofo (). Preferencialmente, o
comentrio deve ser escrito em uma linha anterior ao cdigo a ser comentado,
conforme o exemplo da macro Comentario1(), mostrada a seguir. No entanto,
tambm possvel inserir o comentrio na mesma linha de um cdigo, o qual
est exemplificado a seguir, na macro Comentario2():

Sub Comentario1()
Teste de seleo de clula
Range(a2).select
End Sub

Sub Comentario2()
Range(a2).select Teste de seleo de clula
End Sub

6. Pressione a tecla TAB para criar um recuo. Isso faz com que o incio e o final
do procedimento fiquem destacados e o procedimento recuado. recomendvel
criar as macros recuando as linhas que devem ser lidas como integrantes
de um mesmo bloco de instrues. Perceberemos a importncia do recuo
principalmente na utilizao de estruturas de decises e laos que veremos
nos prximos captulos;

42
Programao de macros
2
7. Digite a seguinte linha:

Range (

Depois de digitar o parntese, poderemos visualizar uma lista de parmetros e


argumentos do objeto, o que, de certa forma, facilita a digitao e diminui as
chances de digitarmos argumentos errados. Apenas o argumento que estiver
sendo editado no momento aparecer em negrito, enquanto os nomes dos
demais argumentos aparecero em itlico. Argumentos opcionais aparecem
entre colchetes. O tipo de objeto mostrado ao final dos nomes dos argumentos,
que, neste caso, As Range.

Quando os argumentos retornam um valor especfico na sintaxe de alguns


mtodos e funes, eles devem estar entre parnteses. Porm, se o retorno tiver
que ser ignorado, deve-se excluir os parnteses. Mais adiante, esse assunto
ser abordado com detalhes.
Argumentos
do comando
Range

8. Digite o endereo da clula A2 entre aspas, feche o parntese e digite um


ponto, como mostrado a seguir:

Range(A2).

Depois de digitar o ponto, poderemos visualizar uma lista exibindo em ordem


alfabtica os mtodos e propriedades do objeto. Devemos lembrar que, sempre
que digitarmos um ponto depois do nome de um objeto, essa lista ser exibida.
Os mtodos so identificados por uma figura verde esquerda, e as propriedades,
pelo smbolo de uma mo.

9. Digite select em letras minsculas e pressione ENTER para criar uma linha de
espao entre a linha atual e o final da macro.

43
Excel VBA - Mdulo I

Em vez de digitar o comando, pode-se clicar na propriedade ou mtodo


exibido na lista. Outra opo digitar a letra inicial do comando para que,
automaticamente, seja direcionada a opo mais prxima contida na lista. Em
seguida, basta pressionar a tecla de espao. O comando ser preenchido no
cdigo.

Mtodos e
propriedades do
objeto Range

recomendvel digitar as palavras-chave em letras


minsculas, pois, quando pressionamos a tecla ENTER e
o cursor muda de linha, a primeira letra da palavra-chave
obrigatoriamente fica maiscula. Essa uma forma de
sabermos que digitamos a palavra corretamente.

A macro deve estar da seguinte forma:

Sub Teste()
Utilizando o objeto Range
Range(a2).Select
End Sub

44
Programao de macros
2
Agora, podemos testar a macro (que tem como objetivo selecionar a clula A2)
posicionando o cursor em qualquer lugar do cdigo entre as instrues Sub e
End Sub e pressionando a tecla F5. Ento, a macro ser executada e poderemos
confirmar isto ativando o Excel e constatando que a clula A2 est selecionada.

A tecla F5, sempre que pressionada, faz com que a macro na


qual o cursor est posicionado seja executada.

45
Excel VBA - Mdulo I

A macro j est criada, porm, ainda podemos acrescentar mais comandos a


ela, por exemplo, para determinar o contedo ou valor da clula. Nesse caso,
devemos realizar os seguintes passos:

1. Posicione o cursor aps a palavra Select e pressione ENTER. Uma nova linha
ser criada;

2. Determine o contedo ou valor da clula selecionada, como a palavra Produto,


digitando a seguinte linha:

ActiveCell.Value = Produto

Em que:

ActiveCell: Indica que a propriedade ou o mtodo ser aplicado na clula


ativa (A2);

Value: a propriedade que retorna ou define o valor da clula.

A macro contextualizada em nosso exemplo est pronta para ser executada:

Sub Teste()
Utilizando o objeto Range
Range(a2).Select
ActiveCell.Value = Produto
End Sub

2.3.Propriedades e mtodos de alguns objetos


O VBA apresenta diversos objetos, propriedades e mtodos diferentes, de
modo que seria impossvel memorizar todos eles. Na sintaxe de uma funo ou
mtodo, os argumentos vm separados por vrgulas e so definidos de acordo
com seu nome ou posio.

A seguir, sero apresentados propriedades e mtodos de alguns objetos.

46
Programao de macros
2
2.3.1.Application
O primeiro objeto a ser abordado o Application, que o prprio aplicativo,
ou seja, o Excel. Este o mais importante na hierarquia de objetos do Excel.

2.3.1.1. Propriedades

Algumas das propriedades do objeto Application so as seguintes:

Caption

Esta propriedade retorna ou define o texto da barra de ttulos do Excel.

Podemos definir a barra de ttulos com um texto de nossa escolha, por


exemplo, Oramentos. Ento, devemos usar o seguinte cdigo:

Application.Caption = Oramentos

Podemos fazer a barra de ttulos exibir o texto original novamente, definindo


para essa propriedade o valor Empty. Nesse caso, usaramos o seguinte
cdigo:

Application.Caption = Empty

Podemos capturar o texto da barra de ttulos do Excel usando o seguinte


cdigo:

Application.Caption

47
Excel VBA - Mdulo I

Segue exemplo que exibe o contedo da barra de ttulos em uma caixa de


mensagem:

Sub titulo()
MsgBox Application.Caption
End Sub

ActiveCell

Esta propriedade retorna a clula ativa. importante lembrar que, para


trabalhar com a clula ativa, ela deve estar na janela ativa.

Observemos os seguintes exemplos:

Sub Exemplo1()
Range(a1).Select
Range(a1).Value = Application.Caption
End Sub
Clula ativa A1
recebe um valor
Sub Exemplo2()
Range(a1).Select
ActiveCell.Value = Application.Caption
End Sub

48
Programao de macros
2
Os dois exemplos anteriores tm por finalidade selecionar a clula A1 e
inserir em seu contedo o texto contido na barra de ttulos.

No primeiro exemplo, o endereo da clula est sendo indicado nas duas


linhas de comandos. J no segundo exemplo, indicado que a clula
selecionada (activecell) receba o valor.

ActiveWindow

Esta propriedade retorna ou define o nome da janela ativa.

O exemplo a seguir altera o nome da janela ativa para Ms de Fevereiro:

Application.ActiveWindow.Caption = Ms de Fevereiro

Como no necessrio digitar o termo Application, o cdigo pode ser


utilizado da seguinte forma:

ActiveWindow.Caption = Ms de Fevereiro

ScreenUpdating

uma propriedade do aplicativo Excel que permite determinar a atualizao


da tela, como True (opo padro) ou False, no momento em que uma
macro est sendo executada. Se usarmos False, a execuo da macro se
torna mais rpida, pois no exibido o movimento de execuo.

O exemplo a seguir define esta propriedade como False:

Application.ScreenUpdating = False

49
Excel VBA - Mdulo I

DisplayAlerts

Com esta propriedade, podemos permitir ou no a exibio de mensagens


de alerta durante a execuo de uma macro. Portanto, devemos defini-la
como True ou False.

Por padro, essa propriedade definida como True. Se, por exemplo, no
quisermos que aparea o alerta perguntando se desejamos salvar alteraes
quando uma pasta de trabalho fechada por uma macro, devemos definir
essa propriedade como False, como mostra a linha a seguir:

Application.DisplayAlerts = False

EnableCancelKey

Esta propriedade autoriza ou no a interrupo da execuo de uma macro


por meio das teclas do teclado ESC ou CTRL + BREAK.

Podemos definir essa propriedade com um dos tipos a seguir:

xlInterrupt: Definido como padro, permite o cancelamento da macro


pelo teclado;

xlDisabled: No permite o cancelamento;

xlErrorHandler: A interrupo enviada para um procedimento em


execuo como um erro, podendo ser tratada com a utilizao de
comandos de tratamento de erros (assunto abordado no ltimo captulo).

Devemos digitar a linha a seguir quando no queremos permitir a interrupo


da macro:

Application.EnableCancelKey = xlDisabled

50
Programao de macros
2
DataEntryMode

Esta propriedade possibilita definir o modo de entrada de dados. Para isso,


devem-se considerar as seguintes informaes:

xlOff: Permite que qualquer clula seja selecionada;

xlOn: Permite a seleo de uma clula depois de pressionada a tecla


ESC;

xlStrict: Impede a seleo de uma clula mesmo quando pressionada a


tecla ESC.

Se digitarmos a linha a seguir, nenhuma clula de nenhuma planilha poder


ser selecionada:

Application.DataEntryMode = xlStrict

WindowState

Esta propriedade permite determinar se a janela do Excel ser maximizada


(com o valor xlMaximized), normal (com o valor xlNormal), ou minimizada
(com o valor xlMinimized).

O exemplo a seguir deixa a janela maximizada:

Application.WindowState = xlMaximized

51
Excel VBA - Mdulo I

2.3.1.2. Mtodos

A seguir, vamos descrever dois mtodos para o objeto Application:

Quit

Este mtodo fecha o Excel. Por padro, um alerta perguntando se as alteraes


devem ser salvas surgir. Para fechar o Excel sem salvar as alteraes, basta
definir a propriedade DisplayAlerts como False, como mostra o exemplo
adiante:

Application.DisplayAlerts = False
Application.Quit

Calculate

Quando usamos este mtodo, todas as planilhas de todas as pastas de


trabalho abertas so calculadas. Sua sintaxe a seguinte:

Application.Calculate

2.3.2.Workbooks
Workbooks so os objetos correspondentes s pastas de trabalho, ou seja, aos
arquivos.

2.3.2.1. Propriedades

A seguir, sero listadas algumas propriedades do objeto Workbooks:

Name

Esta propriedade retorna o nome do arquivo. uma propriedade somente


de leitura.

O exemplo a seguir insere o nome do arquivo na clula ativa:

ActiveCell = ActiveWorkbook.Name

52
Programao de macros
2
FullName

Esta propriedade retorna o caminho completo do arquivo no disco. uma


propriedade somente de leitura.

Vamos supor a existncia do arquivo Dados.xlsx, na pasta Valores, na


unidade C. O exemplo a seguir definiria o valor de NomeTot como C:\
Valores\Dados.xlsx:

NomeTot = Workbooks(Dados.xlsx).FullName

O mesmo resultado poderia ser obtido com a utilizao do comando a


seguir:

NomeTot = Activeworkbook.Fullname

Saved

Para os arquivos que esto salvos, esta propriedade retorna o valor True;
para os arquivos que no foram salvos, retorna o valor False.

2.3.2.2. Mtodos

Alguns dos mtodos para o objeto Workbooks so os seguintes:

Close

Este mtodo fecha o arquivo. A seguir temos a representao de sua sintaxe


e, em seguida, a descrio de cada um de seus elementos:

Close(SaveChanges,FileName,RouteWorkbooks)

SaveChanges: Determina se o arquivo deve ou no ser salvo, portanto,


pode ser definida como True ou False;

FileName: o nome do arquivo;

RouteWorkbooks: Determina se o arquivo deve ser encaminhado ou


no a um destinatrio de circulao.

53
Excel VBA - Mdulo I

Open

Devemos usar este mtodo para abrir um arquivo. A seguir, temos a


representao de sua sintaxe:

Workbooks.Open FileName:=Caminho do arquivo

O exemplo a seguir traz a linha de cdigo que abre um arquivo:

Workbooks.Open Filename:=C:\documentos\RelMensal.xlsx

Save

Este mtodo salva o arquivo. A seguir, temos a representao de sua sintaxe:

Workbooks(<nome do arquivo>).Save

O exemplo a seguir traz a linha de cdigo que salva um arquivo:

Workbooks(RelMensal.xlsx).Save

Protect

Este mtodo utilizado para proteger a pasta de trabalho e tem funo


igual ao comando Ferramentas / Proteger / Proteger pasta de trabalho.
A sintaxe para esse mtodo a seguinte:

Protect(Password,Structure,Windows)

Segue exemplo de utilizao:

Workbooks(teste1.xlsx).Protect 123Senha, True, True

Nesse exemplo, ser protegida a estrutura da pasta e da janela da pasta


teste1.xlsx com a senha 123Senha.

54
Programao de macros
2
Unprotect

Este mtodo tira a proteo da pasta de trabalho. Sua sintaxe a seguinte:

Unprotect(Password)

Segue exemplo de utilizao:

Workbooks(teste1.xlsx).Unprotect 123Senha

2.3.3.Worksheets
Os Worksheets representam as planilhas de um arquivo. Chamamos de coleo
de Worksheets o conjunto de planilhas de uma pasta de trabalho. Cada uma
das planilhas um objeto da coleo. Em alguns casos, os objetos so tambm
chamados de Sheets.

2.3.3.1. Propriedades

A seguir, temos algumas propriedades de Worksheets com suas respectivas


descries:

Count

Esta propriedade faz a conta de quantas planilhas h em um determinado


arquivo. Sua sintaxe a seguinte:

Worksheets.Count

55
Excel VBA - Mdulo I

Consideremos o seguinte exemplo:

Msgbox O arquivo possui & sheets.count & planilha(s)

Visible

Por meio desta propriedade, podemos controlar a exibio de uma planilha,


sendo True o valor que a mantm visvel e False o valor que a mantm
oculta. O exemplo a seguir mostra como ocultar a planilha Plan1:

Worksheets(Plan1).Visible = False

ScrollArea

Por meio desta propriedade, podemos estipular os limites de rolagem pela


planilha, pois sua funo retornar ou definir a rea de rolagem. O exemplo
a seguir libera a rolagem entre A1 e L11 de uma planilha. Nesse caso, no
ser possvel selecionar outras clulas que no pertenam a essa regio.

WorkSheets(Plan1).ScrollArea = A1:L11

Para liberar a navegao em todas as clulas da planilha, basta digitar o
comando a seguir:

WorkSheets(Plan1).ScrollArea =

56
Programao de macros
2
EnableSelection

Com esta propriedade, podemos determinar quais clulas podem ser


selecionadas quando a planilha estiver protegida, utilizando um dos valores
a seguir:

xlNoRestrictions: Todas as clulas podero ser selecionadas;

xlNoSelection: Nenhuma clula poder ser selecionada;

xlUnlockedCells: Apenas as clulas que no estiverem travadas quando


a planilha for protegida podero ser selecionadas.

O exemplo a seguir no permite selecionar clulas na planilha Plan1:

Worksheets(Plan1).EnableSelection = xlNoSelection

necessrio que a planilha esteja protegida para que


possamos usar esta propriedade.

57
Excel VBA - Mdulo I

2.3.3.2. Mtodos

A seguir, sero citados alguns mtodos do objeto Worksheets:

Add

Por meio deste mtodo, podemos adicionar pasta de trabalho folhas de


planilha, macro do Excel 4.0 ou grfico. Sua sintaxe exibida adiante e, em
seguida, est a descrio de cada um de seus elementos:

Add(Before,After,Count,Type)

Before: Planilha antes da qual ser inserida a nova;

After: Planilha aps a qual ser inserida a nova;

Count: Quantidade de planilhas que sero inseridas;

Type:Tipodaplanilhaqueserinserida.PodemosusarotipoxlWordSheet,
que corresponde planilha padro, ou xlExcel4MacroSheet, que
corresponde folha de macro do Excel 4.0.

Segue exemplo para inserir uma planilha aps a ltima planilha da pasta de
trabalho:

Sheets.Add , Sheets(Sheets.Count)

Delete

Este mtodo exclui planilhas da pasta de trabalho. A planilha a ser excluda


pode ser indicada por seu nome, ou pela posio que ela ocupa no arquivo.
O exemplo a seguir exclui a quarta planilha do arquivo:

Sheets(4).Delete

58
Programao de macros
2
Copy

Este mtodo copia uma planilha para outra posio no arquivo. A sintaxe
deste mtodo :

Copy(After,Before)

O exemplo adiante faz uma cpia da plan2 para uma posio aps a plan3:

Sheets(plan2).Copy , Sheets(plan3)

Move

Este mtodo move a planilha para outra posio no arquivo. Sua sintaxe
a seguinte:

Move(Before,After)

O exemplo adiante move a planilha Plan1 para a ltima posio na pasta


de trabalho:

Sheets(Plan1).Move , Sheets(Sheets.Count)

Select

Para selecionar uma planilha, devemos usar este mtodo. A linha a seguir
pode ser usada para selecionar a planilha Plan1:

Sheets(Plan1).Select

59
Excel VBA - Mdulo I

Protect

Este mtodo utilizado para proteger a planilha e tem funo igual ao


comando para proteo de planilha, com a adio de um quarto argumento.
A sintaxe para este mtodo a seguinte:

Protect(Password,DrawingObjects,Contents,Scenarios,UserInterfaceOnly)

Argumento Descrio
Password Opcional.
True ou False: Utilizado para proteger formas
DrawingObjects
(o valor padro True).
True ou False: Utilizado para proteger o contedo
Contents
(o valor padro True).
True ou False: Utilizado para proteger cenrios
Scenarios
(o valor padro True).
Utilizado para realizar a proteo na interface do
UserInterfaceOnly usurio, porm quando omitido ir proteger tanto
a interface quanto as macros.

Observe o exemplo para proteger a planilha denominada Plan2:

Sheets(plan2).Protect 1234

Unprotect

Este mtodo tira a proteo da planilha. O exemplo a seguir desprotege a


planilha Plan1, a qual possui uma senha:

Sheets(Plan1).Unprotect Senha

60
Programao de macros
2
2.3.4.Range
Este objeto representa as clulas de uma planilha. Pode representar apenas
uma ou mais clulas ao mesmo tempo.

2.3.4.1. Propriedades

A seguir, vamos citar algumas propriedades para serem usadas com objeto
Range:

Value

Esta a propriedade padro de Range. Com ela, podemos retornar ou


definir o valor de uma ou mais clulas. As clulas podem ser indicadas no
s pela sua posio, mas tambm pelo seu nome.

Para inserir a palavra Impacta na clula A10, utilizamos o seguinte comando:

Range(A10).Value = Impacta

Para inserir um valor na clula B4 e tambm no intervalo de clulas C2 at


C10, consideremos o comando a seguir:

Range(b4,c2:c10) = 10

Row

Esta propriedade retorna o nmero da linha de uma clula. O exemplo a


seguir insere na clula ativa o nmero da linha da clula B5:

ActiveCell = Range(B5).Row

Column

Esta propriedade retorna o nmero da coluna de uma clula, o qual pode


variar entre 1, referente coluna A, e 256, referente coluna IV. O exemplo
a seguir insere na clula A2 o nmero da coluna C3:

Range(A2).Value = Range(C3).Column

61
Excel VBA - Mdulo I

Name

Esta propriedade nomeia uma ou mais clulas. O exemplo a seguir coloca


na clula A3 o nome de Preos:

Range(A3).Name = Preos

2.3.4.2. Mtodos

A seguir, sero citados os mtodos para o objeto Range:

Select

Este mtodo serve para selecionar clulas. possvel selecionar apenas uma
clula, ou um intervalo de clulas, ou uma ou mais clulas e mais um intervalo
etc. Enfim, podemos selecionar diversas clulas independentemente da
posio que elas ocupam na planilha. Se usarmos a linha a seguir, a clula
A5 da planilha ativa ser selecionada:

Range(A5).Select

O prximo exemplo seleciona o intervalo entre a clula ativa e a clula B6:

Range(ActiveCell, B6).Select

Copy

O mtodo Copy copia clulas, e o local onde ficar a cpia varia de acordo
com a sintaxe. Para fazer uma cpia para o clipboard, devemos usar a
sintaxe seguinte:

Range(<clula de origem>).Copy

Para que a cpia seja automaticamente colada no destino, a sintaxe a


seguinte:

Copy(Destination)

62
Programao de macros
2
No exemplo adiante, ser copiado o contedo do intervalo de clulas C2
at C4 a partir da posio da clula E6:

Range(c2:c4).Copy Range(E6)

Cut

Este mtodo recorta clulas. O local para onde vo as clulas recortadas


depende da sintaxe usada. O exemplo a seguir recorta as clulas B2:E14 e
cola em G7:

Range(B2:E14).Cut Range (G7)

Clear

Este mtodo equivale ao comando Limpar / Limpar tudo, ou seja, ele serve
para limpar tudo o que h nas clulas. O exemplo a seguir limpa todos os
elementos das clulas presentes no intervalo B2:B20:

Range(B2:B20).Clear

ClearContents

Este mtodo limpa apenas o contedo da clula, mantendo as demais


propriedades. equivalente a selecionar a clula e pressionar DELETE.
O exemplo a seguir limpa o contedo das clulas presentes no intervalo
B2:B20:

Range(B2:B20).ClearContents

ClearFormats

Este mtodo limpa apenas a formatao da clula, mantendo o seu contedo.


O exemplo a seguir limpa apenas a formatao das clulas contidas no
intervalo C2:C4:

Range(c2:c4).ClearFormats

63
Excel VBA - Mdulo I

Delete

Este mtodo usado para excluir clulas da planilha. Na sua sintaxe,


mostrada a seguir, o argumento Shift no obrigatrio e serve para definir
o local para onde sero deslocadas as clulas; se para a esquerda, devemos
usar xlShiftToLeft, se para cima, xlShiftUp:

Delete(Shift)

O exemplo a seguir exclui as clulas contidas no intervalo, deslocando as


demais clulas para a esquerda:

Range(c2:c4).Delete xlToLeft

Insert

Este mtodo insere clulas na planilha. Na sua sintaxe, mostrada a seguir,


o argumento Shift no obrigatrio e serve para indicar o local para onde
sero deslocadas as clulas; se para a direita, devemos usar xlShiftToRight,
se para baixo, XlShiftDown:

Insert(Shift)

O exemplo a seguir insere as clulas contidas no intervalo, deslocando as


demais clulas para baixo:

Range(c2:c6).Insert xldown

At este ponto, j pudemos conhecer algumas propriedades e mtodos de


alguns objetos. Novos objetos, mtodos e propriedades sero abordados
ao longo da apostila.

64
Programao de macros
2
2.3.5.Referenciando uma clula ou um
intervalo de clulas
As propriedades Range e Cells, que usamos para nos referir s clulas de uma
planilha, retornam um objeto Range que representa tais clulas. A propriedade
Range deve ser usada para fazer referncia a uma clula por meio de seu
endereo. Sua sintaxe a seguinte:

Range(Cell1[,Cell2])

Devemos sempre nos lembrar de que os parmetros que


aparecem entre colchetes so parmetros opcionais.

No caso da propriedade Cells, tambm temos como retorno uma ou mais


clulas, porm, a diferena que a posio da clula na planilha ser a base
dessa propriedade. A referncia posio da clula feita primeiro pelo nmero
da linha, RowIndex, e depois pelo nmero da coluna, ColumnIndex. Quando
no h argumento especificado, sero consideradas todas as clulas, ou seja,
Cells retorna todas as clulas. A sintaxe de Cells a seguinte:

Cells([RowIndex][,ColumnIndex])

Observemos um exemplo que utiliza o comando Cells para selecionar a clula


B3:

Cells(3,2)

65
Excel VBA - Mdulo I

2.3.6.Referenciando uma clula ativa ou


seleo de clulas
Nas situaes em que desejamos executar aes na clula selecionada, devemos
usar a propriedade ActiveCell, j abordada nesta apostila. Esta propriedade se
refere somente a uma clula, aquela que est ativa. Isso quer dizer que, quando
quisermos referenciar mais de uma clula selecionada, esta propriedade no
servir, uma vez que se aplica a somente uma nica clula. Para que uma ao
seja executada em vrias clulas de uma seleo, devemos usar a propriedade
Selection.

Sub Ex_Selection()
Range(a2:c10).Select
Selection.Interior.ColorIndex = 35
Selection.Font.Italic = True
End Sub

2.3.7.Referenciando de acordo com um


deslocamento
A propriedade Offset uma das mais empregadas quando se fala em criao
de macros. Ela determina uma referncia conforme um deslocamento para a
direita, para a esquerda, para cima ou para baixo. Ento, Offset retorna uma
Range que se refere a um deslocamento em linhas, colunas ou em linhas e
colunas ao mesmo tempo. Na sintaxe de Offset, mostrada a seguir, RowOffset
o nmero de linhas e ColumnOffset o nmero de colunas:

Offset(RowOffset, ColumnOffset)

No exemplo adiante, ser inserida uma informao na segunda clula (RowOffset


= 2) abaixo da clula selecionada e na mesma coluna (ColumnOffset=0):

Activecell.offset(2,0).value = Exemplo de texto

66
Programao de macros
2
O deslocamento acontece levando em considerao o nmero positivo ou
negativo de linhas ou colunas. Isto quer dizer que, quando o nmero de linhas
positivo, o deslocamento feito para baixo e, quando negativo, para cima.
No caso das colunas, segue-se a mesma regra, nmero positivo equivale a
deslocamento para a direita e negativo, para a esquerda.

A Range que a propriedade End retorna representa a ltima clula que contm
dados no fim de uma determinada regio. Esse fim pode ser determinado de
quatro formas diferentes, dependendo da direo empregada, que pode ser
para cima, para baixo, para a direita ou para a esquerda. Podemos fazer uma
comparao dessa propriedade com o ato de pressionar a tecla CTRL mais uma
das teclas de direo do teclado (seta direita, seta esquerda, seta acima ou
seta abaixo).

Selecionar uma clula e, depois, selecionar na mesma coluna a ltima clula


que contm dados equivale a fazer referncia primeira clula selecionada e,
na mesma linha de cdigo, determinar a propriedade End.

Na sintaxe da propriedade End, demonstrada a seguir, o elemento Direction


representa a direo a partir da qual o fim ser determinado e pode variar entre:
xlToLeft, para o lado esquerdo; xlToRight, para o lado direto; xlUp, para cima;
xlDown, para baixo:

End(Direction)

Activecell.end(xldown)

67
Excel VBA - Mdulo I

A fim de compreendermos melhor as propriedades Offset e End, devemos,


inicialmente, criar a planilha Cadastrar com o mesmo contedo da imagem a
seguir:

Ento, basta digitar a frmula na clula E2, que ser o produto da quantidade,
o valor: =C2*D2. Devemos tambm preencher os demais campos (Modelo,
Fabricante, Quantidade e Valor), conforme apresentado adiante:

68
Programao de macros
2
O objetivo do exemplo copiar as informaes preenchidas na linha 2 da
planilha Cadastrar para a planilha Dados, na posio da prxima linha vazia
aps a ltima linha preenchida da lista. Aps efetuar a cpia, ser retornado
para a planilha Cadastrar e as informaes contidas no intervalo de A2:D2
sero limpas.

Criemos, ento, a planilha Dados conforme o exemplo adiante:

Podemos criar a macro no mesmo mdulo, iniciando pelos comandos a seguir:

Sub Cadastrar()

End Sub

A macro dever iniciar selecionando as clulas contidas na planilha Cadastrar.


Ento, na primeira linha dentro da instruo Sub, devemos digitar a sequncia
de cdigos:

Sheets(Cadastrar).select
Range(A2:E2).select

Na sequncia, o cdigo adiante copiar a regio selecionada:

Selection.copy

69
Excel VBA - Mdulo I

necessrio, ento, selecionar a planilha Dados e indicar em qual linha ser


inserida a informao copiada. Na primeira vez que for executada a macro,
a informao ser inserida a partir da clula A2, porm, nas demais vezes, a
insero ocorrer nas linhas subsequentes (A,A4...).

Sheets(dados).select

A fim de posicionarmos na ltima linha preenchida, devemos selecionar a ltima


clula da coluna A e subir (mesmo que CTRL + seta para cima) com a utilizao
da propriedade End:

Range(A1048576).select

Activecell.End(Xlup).select

70
Programao de macros
2
Agora, necessrio descer para a prxima linha vazia e colar as seguintes
informaes:

Activecell.Offset(1,0).select
Activecell.pastespecial

Podemos retornar para a planilha Cadastrar, limpar os valores preenchidos,


visto que j foram copiados para a outra planilha, e posicionar na clula A2 a
fim de receber outro valor:

Sheets(Cadastrar).select
Range(A2:D2).ClearContents
Range(A2).Select

71
Excel VBA - Mdulo I

A macro inteira dever estar da seguinte maneira:

Sub Cadastrar()
Sheets(Cadastrar).Select
Range(a2:e2).Select
Selection.Copy
Sheets(Dados).Select
Range(A1048576).Select
ActiveCell.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.PasteSpecial xlValues
Sheets(Cadastrar).Select
Range(A2:D2).ClearContents
Range(A2).Select
End Sub

Podemos abreviar o cdigo para posicionar na primeira linha vazia de uma


listagem:

Range(A1048576).End(xlUp).Offset(1, 0).Select

2.4.Caixas de entrada (InputBox)


Dentre diversos modos de enviar informaes para um computador, o uso de
formulrios um dos principais mtodos adotados pelos desenvolvedores de
programas. Os formulrios permitem interatividade com o usurio, so um meio
seguro de colocar os dados em suas posies corretas e conferem consistncia
s informaes.

Na caixa de entrada do VBA, podemos digitar um dado para que este seja
inserido em uma clula ou, ainda, usado como varivel em outras operaes.
Acionamos essa caixa de entrada com a funo InputBox. Esta funo tambm
torna possvel a obteno em texto dos dados de entrada de um usurio.

A sintaxe da funo InputBox e a descrio de cada um dos seus elementos so


as seguintes:

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

72
Programao de macros
2
Prompt: Este argumento o texto da mensagem da caixa de dilogo;

Title: Este argumento o texto da barra de ttulo da caixa. Se no definirmos


nenhum texto para esse argumento, o nome Microsoft Excel aparecer na
barra de ttulos;

Default: Quando a caixa tiver sido carregada, o texto definido em Default


ser exibido. Tambm podemos omitir essa informao para que a caixa
de texto fique vazia;

Xpos: Este argumento define a posio da caixa a partir do lado esquerdo


da tela, ou seja, horizontalmente. Essa informao deve ser dada em twips.
Se omitirmos esse argumento, a posio horizontal da caixa fica definida
automaticamente no centro da tela;

Ypos: Este argumento define a posio da caixa a partir da parte de cima


da tela, ou seja, verticalmente. Essa informao deve ser dada em twips.
Se omitirmos esse argumento, a posio vertical da caixa fica definida
automaticamente no centro da tela;

Helpfile: Este argumento reconhece o arquivo de ajuda da caixa, desde que


este exista;

Context: Se definirmos Helpfile, este argumento tambm dever ser


especificado. Ele representa o nmero do contexto da ajuda.

Consideremos o exemplo adiante:

Sub Insere_Dado()
Range(A1048576).End(xlUp).Offset(1, 0).Select
ActiveCell = InputBox(Digite seu Nome, Cadastro)
End Sub

Title
Prompt

73
Excel VBA - Mdulo I

Observemos, agora, o exemplo de um InputBox contendo um texto padro


(Default):

Range(B2) = InputBox(Estado, Cadastro de Clientes,SP)

2.5.Instrues With e End With


Para cada propriedade que definimos no Excel, necessrio referenciar o
objeto ao qual ela ser aplicada, mesmo quando o objeto for igual para diversas
propriedades. O exemplo a seguir deixa clara a necessidade que existe de
referenciar o objeto para cada uma das propriedades. Para a mesma clula,
vamos definir um valor, aplicar uma cor fonte, determinar que o valor desta
clula apresentado em duas casas decimais, aplicar fonte o estilo negrito e
aplicar ao fundo uma outra cor:

Sub Formatar()
Range(clula).Value = valor_da_clula
Range(clula).Font.ColorIndex = nmero_da_cor
Range(clula).NumberFormat = 0.00
Range(clula).Font.Bold = True
Range(clula).Interior.ColorIndex = nmero_da_cor
End Sub

74
Programao de macros
2
Para evitar a repetio do mesmo objeto em casos como o que acabamos de
verificar, ou seja, casos em que diversas propriedades so aplicadas a um mesmo
objeto, podemos usar a estrutura With e End With. O objeto referenciado quando
empregamos essa instruo deve ser colocado logo aps a prpria instruo. A
sintaxe da estrutura End e End With a seguinte:

With Objeto
Instrues
End With

Quando formos digitar as instrues, devemos sempre lembrar que o nome do


objeto no deve ser citado e que deve haver um ponto antes de cada uma das
propriedades. Todas as instrues que digitarmos entre With e End With sero
realizadas no dado objeto.

A seguir, temos o cdigo que aplica algumas propriedades a uma clula por
meio da instruo With:

Sub Formatar()
With Range(clula)
.Value = valor_da_clula
.Font.ColorIndex = nmero_da_cor
.NumberFormat = 0.00
.Font.Bold = True
.Interior.ColorIndex = nmero_da_cor
End With
End Sub

Devemos sempre nos lembrar de que necessrio digitar um


ponto antes de cada propriedade. Apesar de a propriedade
Value ser uma propriedade padro, no precisando digit-la
na maioria das vezes, deve-se digit-la dentro da instruo
With quando for desejado atribuir um valor em uma clula.

75
Excel VBA - Mdulo I

A seguir, temos uma macro que realiza diversas aes na planilha Plan3, ou
seja, define o valor da clula A5 como 7, renomeia a planilha como Cadastro,
move a planilha de forma que ela fique posicionada antes da planilha Plan1 e,
ento, exibe a planilha:

Sub AlterarPlan()
With Sheets(Plan3)
.Range(A5).Value= 7
.Name = Cadastro
.Move Before:=Sheets(Plan1)
.Visible = True
End With
End Sub

A instruo With pode tambm ser usada em conjunto com outras instrues
With se inserirmos uma dentro da outra, fazendo um processo de aninhamento.
Se tomarmos como exemplo o mesmo procedimento citado anteriormente e
quisermos adicionar algumas propriedades apenas clula A5, mas no a toda
planilha Plan3, devemos inserir outro With referenciando a clula e, depois, outro
End With quando terminarmos de digitar as aes para A5. Ento, podemos,
por exemplo, definir para a clula A5 o valor 7, o estilo de fonte como negrito
e uma cor especfica para a fonte, usando as seguintes instrues:

Sub AlterarPlan()
With Sheets(Plan3)
With Range(A5)
.Value = 7
.Font.Bold = True
.Font.ColorIndex = numero_da_cor
End With
.Name = Cadastro
.Move Before:=Sheets(Plan1)
.Visible = True
End With
End Sub

76
Programao de macros
2
Tambm podemos inserir outro With para a fonte aninhando dois With ao
primeiro, conforme a macro adiante:

Sub AlterarPlan()
With Sheets(Plan3)
With Range(A5)
.Value = 7
With .Font
.Bold = True
.ColorIndex = numero_da_cor
End With
End With
.Name = Cadastro
.Move Before:=Sheets(Plan1)
.Visible = True
End With
End Sub

O ponto em With.Font faz referncia ao objeto A5. Para no haver ponto, a


linha teria de ser With Range (A5).Font.

Devemos sempre levar em considerao a importncia de


recuar as linhas, deixando a primeira e a ltima linha de
cada bloco na mesma posio a partir do lado esquerdo.

77
Excel VBA - Mdulo I

2.6.Formatando propriedades
Os comandos para formatar planilhas so muitos e alguns at j foram abordados
nesta apostila. A partir deste ponto, sero apresentadas as sintaxes de diversas
propriedades, como bordas, cor de fundo e outras, que podem ser aplicadas s
clulas.

2.6.1.Cor do preenchimento
A cor do preenchimento, ou cor de fundo da clula, pode ser personalizada
usando a propriedade Interior mais a propriedade que define o ndice da cor
ColorIndex. O ndice da cor, ou seja, o nmero que corresponde a uma cor,
pode variar entre 0 e 56.

Consideremos o exemplo adiante e o resultado obtido a partir dele:

Sub Ex_Formata()
Range(a2:c2).Interior.ColorIndex = 35
End Sub

78
Programao de macros
2
Na seguinte tabela, temos a paleta de cores e os nmeros referentes a cada
uma das cores:

Se usarmos o valor 0 (zero) ou xlNone para essa propriedade, ento, a clula


ficar sem preenchimento. Alm disso, com essa mesma propriedade, podemos
definir o padro de preenchimento, ou seja, se haver pontos ou hachuras
na clula. O padro tambm pode ser alterado por meio da janela Formatar
Clulas, guia Preenchimento.

79
Excel VBA - Mdulo I

2.6.2.Fonte
Podemos formatar a fonte com a qual vamos trabalhar, ou seja, alterar as
caractersticas do texto, usando a propriedade Font mais as propriedades que
definem o estilo, a cor, o tamanho, entre outros. As principais propriedades de
Font so as seguintes:

Name: Esta propriedade representa o nome da fonte, como Arial;

FontStyle: Esta propriedade representa o estilo da fonte. So quatro os


estilos disponveis: normal, negrito, itlico e negrito itlico. recomendado
o uso dessa propriedade quando as propriedades Bold e Italic no esto
sendo usadas;

Bold: Esta propriedade pode aplicar ou retirar da fonte o estilo negrito


quando definida como True ou False, respectivamente;

Italic: Esta propriedade pode aplicar ou retirar da fonte o estilo itlico


quando definida como True ou False, respectivamente;

Size: Esta propriedade define o tamanho da fonte;

Strikethrough: Esta propriedade determina se a fonte ser ou no tachada,


ou seja, cortada com uma linha horizontal. Pode ser definida como True ou
False;

Superscript: Esta propriedade determina se a fonte ser formatada como


sobrescrita. Pode ser definida como True ou False;

Subscript: Esta propriedade determina se a fonte ser formada como


subscrita. Pode ser definida como True ou False;

Underline: Esta propriedade refere-se ao sublinhado aplicado fonte.


Os valores para essa propriedade variam conforme o tipo de sublinhado
desejado, portanto, pode ser:

xlUnderlineStyleNone: Para que a fonte no seja sublinhada;

xlUnderlineStyleSingle: Para sublinhado simples;

80
Programao de macros
2

xlUnderlineStyleDouble: Para sublinhado duplo;

xlUndelineStyleSingleAccounting: Para sublinhado contbil simples;

xlUnderlineStyleDoubleAccounting: Para sublinhado contbil duplo.

ColorIndex: Esta propriedade define a cor do texto baseada no ndice ou


nmero correspondente cor desejada;

Background: Esta propriedade define o fundo usado apenas em textos de


grficos. Os valores dessa propriedade podem ser xlBackgroundAutomatic,
xlBackgroundOpaque ou xlBackgroundTransparent.

Consideremos o exemplo adiante:

Sub formata_texto()
With ActiveCell
.Font.Name = Tahoma
.Font.Bold = True
.Font.Italic = True
.Font.Size = 14
.Font.Underline = xlUnderlineStyleDouble
.Font.ColorIndex = 3
End With
End Sub

81
Excel VBA - Mdulo I

2.6.3.Alinhamento
Est disponvel mais de uma propriedade para alinharmos o texto de uma clula.
A seguir, sero descritas as propriedades de alinhamento:

HorizontalAlignment

Esta propriedade define o alinhamento horizontal e pode ter os valores


xlGeneral (geral), xlLeft (esquerdo), xlRight (direito), xlCenter (central),
xlFill (preencher), xlJustify (justificar) e xlCenterAcrossSelection
(centralizar seleo).

Veja o exemplo:

ActiveCell.HorizontalAlignment = xlCenter

VerticalAlignment

Esta propriedade define o alinhamento vertical e pode ter os valores xlBottom


(inferior), xlTop (superior), xlCenter (central) ou xlJustify (justificado).

Veja o exemplo:

ActiveCell.VerticalAlignment = xlTop

WrapText

Esta propriedade faz o texto ter retorno automtico e pode ser definida
como True ou False.

Veja o exemplo:

Activecell.WrapText = True

82
Programao de macros
2
Orientation

Esta propriedade determina a orientao da clula, variando de 90 a 90.

Veja o exemplo:

ActiveCell.Orientation=90

ShrinkToFit

Esta propriedade faz o texto se ajustar largura da coluna. Pode ser definida
como True ou False.

Veja o exemplo:

ActiveCell.ShrinkToFit = True

MergeCells

Esta propriedade mescla as clulas e pode ser definida como True ou False.

Veja o exemplo:

Range(A2:D2).MergeCells = True

Para verificarmos um exemplo de formatao de planilha por meio de cdigo,


criemos uma Planilha de Produtos simples, contendo as informaes
apresentadas na tela a seguir, sem qualquer tipo de formatao:

83
Excel VBA - Mdulo I

Observemos o cdigo que ir formatar o ttulo e o contedo da Planilha de


Produtos. O contedo da clula A1 ficar com sublinhado duplo e itlico e
com o tamanho de fonte 14. A informao contida no intervalo A2:C2 ser
formatada com a fonte Arial, tamanho 12, centralizada e a cor das clulas
como cor verde claro (35). As demais informaes contidas na planilha
ficaro no estilo itlico:

Sub Formatar()
With Range(a1)
.Font.Underline = xlUnderlineStyleDouble
.Font.Italic = True
.Font.Size = 14
End With
With Range(a2:c2)
.Font.Name = Arial
.Font.Size = 12
.Interior.ColorIndex = 35
.HorizontalAlignment = xlCenter
End With
Range(a3:c6).Font.Italic = True
End Sub

84
Programao de macros
2
Podemos inserir as demais mais linhas de cdigo para mesclar e centralizar
o intervalo de clulas A1:C1:

Range(a1:c1).MergeCells = True
Range(a1).HorizontalAlignment = xlcenter

2.6.4.Bordas
Para cada clula, podemos contar quatro bordas laterais e duas diagonais. As
bordas podem ser referenciadas por Borders (Index), onde Borders o objeto
e Index a constante que identifica a borda. O Index pode variar entre as
seguintes opes:

xlDiagonalDown: Identifica a borda diagonal que vai do canto superior


esquerdo at o canto inferior direito;

xlDiagonalUp: Identifica a borda diagonal que vai do canto inferior esquerdo


at o canto superior direito;

xlEdgeLeft: Identifica a borda do lado esquerdo da clula;

xlEdgeRight: Identifica a borda do lado direito da clula;

xlEdgeTop: Identifica a borda superior da clula;

85
Excel VBA - Mdulo I

xlEdgeBottom: Identifica a borda inferior da clula;

xlInsideVertical: Identifica as bordas verticais internas em um determinado


intervalo de clulas;

xlInsideHorizontal: Identifica as bordas horizontais internas em um


determinado intervalo de clulas.

A propriedade LineStyle define o estilo da linha de uma borda. Os valores para


esta propriedade so os seguintes:

xlContinuous: Define a linha da borda como contnua;

xlDash: Define a linha da borda como tracejada, usando apenas traos


longos;

xlDashDot: Define a linha da borda como tracejada, alternando um trao


longo com outro curto;

xlDashDotDot: Define a linha da borda como tracejada, alternando um


trao longo com dois traos curtos;

xlDot: Define a linha da borda como tracejada, usando apenas traos curtos;

xlDouble: Define a linha da borda como dupla;

xlSlantDashDot: Define a linha da borda com intervalos diagonais;

xlLineStyleNone: Define a linha da borda como inexistente, ou seja, o


objeto no ter borda.

A propriedade Weight define a espessura da borda. Os valores para esta


propriedade so os seguintes:

xlHairline: Define a espessura da borda como muito fina;

xlThin: Define a espessura da borda como fina;

xlMedium: Define a espessura da borda como mdia;

xlThick: Define a espessura da borda como grossa.

86
Programao de macros
2

A propriedade ColorIndex pode ser usada para determinar a cor que ser aplicada
borda e deve ser definida de acordo com os nmeros correspondentes a cada
cor da paleta de cores.

Para inserir bordas ao redor de todo um intervalo de clulas, o mtodo a ser


usado o BorderAround. A sintaxe para este mtodo a seguinte:

BorderAround(LineStyle, Weight, ColorIndex, Color)

O exemplo a seguir mostra o cdigo capaz de remover todas as bordas de uma


determinada seleo:

With Selection
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With

Para colocar uma borda em todas as clulas da planilha, utilizemos o seguinte


comando:

Range(a2:c6).Borders.ColorIndex = 1

87
Excel VBA - Mdulo I

2.6.5.Nmero
A propriedade NumberFormat permite definir o formato do nmero a ser
inserido em uma clula. O valor para esta propriedade ser igual a um dos
cdigos dos formatos exibidos pelo prprio Excel na janela Formatar clulas
e deve ser digitado entre aspas. No cdigo que servir de valor, os milhares
devem ser separados por vrgulas e os decimais por ponto.

Por exemplo, para que o valor 5000 da clula A5 seja exibido como 5.000,00,
o cdigo deve ser:

Range(A5).NumberFormat = #,##0.00

Podemos definir mais de uma seo separando-as por ponto e vrgula antes de
fechar as aspas. A ordem das sees deve obedecer mesma ordem de sees
de formatao do Excel, ou seja: nmero positivo; nmero negativo; zero; texto.

Por exemplo, se o nmero da clula A5 for negativo e tiver que ser exibido
entre parnteses e com duas casas decimais, o cdigo a ser usado o seguinte:

Range(A5).NumberFormat = #,##0.00; (#,##0.00)

No caso das datas, a letra d substitui o dia, a letra m substitui o ms e a letra y


substitui o ano. Por exemplo, para a data 22/01/2008, tera-feira, ser exibida
na clula A2 como 22-tera-feira/Janeiro/2008, o cdigo que devemos usar
o seguinte:

Range(A2).NumberFormat = dd-dddd/mmmm/yyyy

Para que o formato Geral seja utilizado em um intervalo de clulas, a seguinte sintaxe deve ser utilizada:

Range(intervalo).NumberFormat = General

A seguir, vamos citar como exemplo duas linhas de cdigo que fazem com que
os nmeros das clulas do intervalo B2:B7 sejam exibidos com separador de
milhares, e os valores da coluna F sejam exibidos em duas casas decimais:

Range(B2:B7).NumberFormat = #,##0
Range(F2:F7).NumberFormat = #,##0.00

88
Programao de macros
2
Para limpar os formatos da planilha, devemos selecion-la e clicar em Limpar/
Formatos ou utilizar a seguinte linha de macro:

Cells.ClearFormats

Depois de limpar os formatos, podemos executar a macro de formatao dos


nmeros das clulas para ter toda planilha novamente formatada.

Para finalizar a formatao na Planilha de Produtos, podemos definir o formato


dos valores dos produtos e ajustar o tamanho das colunas preenchidas. A macro
completa est descrita adiante:

Sub Formatar()
With Range(a1)
.Font.Underline = xlUnderlineStyleDouble
.Font.Italic = True
.Font.Size = 14
End With
With Range(a2:c2)
.Font.Name = Arial
.Font.Size = 12
.Interior.ColorIndex = 35
.HorizontalAlignment = xlCenter
End With
Range(a3:c6).Font.Italic = True
Range(a1:c1).MergeCells = True
Range(a1).HorizontalAlignment = xlCenter
Range(a3:c6).Borders.ColorIndex = 1
Range(c2:c6).NumberFormat = ###0.00
Columns(a:c).AutoFit
End Sub

89
Excel VBA - Mdulo I

Veja o resultado final:

2.7.Caixa de mensagem (MsgBox)


A caixa de mensagem utilizada para passar informaes ou para executar um
comando que depende de uma resposta do usurio. Uma caixa de mensagem
pode apresentar um ou mais botes, como OK, Cancelar, Sim, No, entre
outros.

Para inserir uma caixa de mensagem, devemos usar a funo MsgBox. Sua
sintaxe, bem como a descrio dos seus argumentos, sero mostradas a seguir:

MsgBox(Prompt[,Buttons][,Title][,Helpfile][,Context]

Prompt: Este argumento define o texto da mensagem que ser exibida;

Buttons: Este argumento determina quais botes e cones devem ser


exibidos na caixa de mensagem;

Title: Este argumento o texto da barra de ttulo da caixa. Se no definirmos


nenhum texto para esse argumento, o nome Microsoft Excel aparecer na
barra de ttulo;

Helpfile: Este argumento reconhece o arquivo de ajuda da caixa, desde que


este exista;

Context: Se definirmos Helpfile, este argumento tambm dever ser


especificado. Ele representa o nmero do contexto da ajuda.

90
Programao de macros
2
2.7.1.Exibindo uma caixa de mensagem
Podemos usar a funo MsgBox sozinha (no inserindo os argumentos entre
parnteses) ou fixar a uma varivel a ao que ocorre como resultado do clique
em seu boto.

O exemplo seguinte cria uma mensagem que no retorna resultado:

Sub MsgBoxDemo()
MsgBox Clique OK para confirmar
End Sub

Considerando que a clula A2 tenha um contedo, o exemplo a seguir ir exibir


na caixa de mensagem a informao contida na clula:

Sub Exibe_Valor_Celula()
MsgBox Range(A2)
End Sub

91
Excel VBA - Mdulo I

Utilizamos o smbolo & para promover a unio de contedos diferentes dentro


de um MsgBox. Observemos o exemplo para exibir o contedo de uma clula
e um texto:

MsgBox O contedo da clula : & Range(A2) & !

A fim de efetuar uma quebra de linha dentro da caixa de mensagem, utilizamos


o comando vbCrlf. Observemos exemplo:

MsgBox O contedo da clula : & vbCrLf & Range(A2)

Agora, alteramos as propriedades de uma caixa de mensagem. Neste exemplo


foi inserido um cone que representa uma mensagem crtica:

MsgBox Erro de execuo, vbCritical, Ateno

Title

cone
Prompt

92
Programao de macros
2
2.7.2.Constantes utilizadas nas caixas de
mensagem
O argumento dos botes apresenta uma certa flexibilidade no manuseio e essa
uma caracterstica que influencia diretamente na praticidade e facilidade no
momento de configurar uma caixa de mensagem. possvel escolher os botes
que sero exibidos, qual deles ser o padro (aquele que acionado quando o
usurio aperta a tecla ENTER do teclado), ou se surgir algum cone. Tambm
podemos optar entre o uso de uma constante ou de um valor, embora a primeira
seja considerada mais fcil de trabalhar. A seguir, temos uma lista que exibe
o nome, o valor (entre parnteses) e a descrio de algumas constantes que
podemos usar com a funo MsgBox:

vbOkOnly (0): Exibe apenas o boto OK;

vbOkCancel (1): Exibe ambos os botes OK e Cancelar;

vbAbortRetryIgnore (2): Exibe os botes Abortar, Repetir e Ignorar;

vbYesNoCancel (3): Exibe os botes Sim, No e Cancelar;

vbYesNo (4): Exibe os botes Sim e No;

vbRetryCancel (5): Exibe os botes Repetir e Cancelar;

vbCritical (16): Exibe o cone Mensagem crtica;

vbQuestion (32): Exibe o cone Consulta de aviso;

vbExclamation (48): Exibe o cone Mensagem de aviso;

vbInformation (64): Exibe o cone Mensagem de informao;

vbDefaultButton1 (0): Faz com que o primeiro boto seja o padro;

vbDefaultButton2 (256): Faz com que o segundo boto seja o padro;

vbDefaultButton3 (512): Faz com que o terceiro boto seja o padro;

vbDefaultButton4 (768): Faz com que o quarto boto seja o padro.

93
Excel VBA - Mdulo I

Para exibir os botes OK e Cancelar, deve-se indicar o valor 1, ou a constante


VbOkCancel:

MsgBox Calculo Realizado com sucesso, vbOKCancel


MsgBox Calculo Realizado com sucesso, 1

Os exemplos a seguir exibem os botes Sim e No, mantendo o segundo boto


como padro, alm de exibir o cone de mensagem crtica e o ttulo Alerta:

MsgBox Deseja excluir a clula?, vbYesNo + _


vbCritical + vbDefaultButton2, Alerta

MsgBox Deseja excluir a clula?, 4 + 16 + 256, Alerta

Podemos usar como um argumento mais de uma constante.


Basta conect-las com o sinal de adio (+).

94
Programao de macros
2

Alm das constantes j citadas na lista anterior, tambm temos aquelas que so
usadas como valores de retorno para a funo MsgBox. Na lista seguinte, so
citados o nome, o valor (entre parnteses) e a descrio destas funes:

vbOK (1): O usurio clicou em OK;

vbCancel (2): O usurio clicou em Cancelar;

vbAbort (3): O usurio clicou em Abortar;

vbRetry (4): O usurio clicou em Repetir;

vbIgnore (5): O usurio clicou em Ignorar;

vbYes (6): O usurio clicou em Sim;

vbNo (7): O usurio clicou em No.

2.7.3.Identificando o boto clicado


Quando usamos caixas de mensagem com mais de um boto para o usurio
clicar, necessrio saber qual dos botes ser escolhido e, de acordo com essa
escolha, determinar uma ao. A funo MsgBox retorna um valor representando
o boto clicado pelo usurio e, ento, podemos designar uma varivel para esse
resultado.

95
Excel VBA - Mdulo I

A macro a seguir mostra as duas formas de utilizao do comando MsgBox:


o primeiro comando Msgbox identifica o boto clicado e o segundo apenas
exibe uma mensagem ao usurio. Na primeira caixa de mensagem, percebe-se
a utilizao da funo Msgbox() de modo que, caso seja pressionado o boto
Sim, a linha correspondente clula selecionada ser excluda e, caso seja
pressionado o boto No, aparecer a segunda caixa de mensagem apenas
informando que a operao foi cancelada.

Sub Exclui_Linha()
If MsgBox(Excluir linha?, vbYesNo) = vbYes Then
ActiveCell.Rows.Delete
Else
MsgBox Operao Cancelada!
End If
End Sub

2.8.Mtodo GetOpenFilename
Apesar de a funo InputBox ser muito til para insero e envio de informaes
do usurio para o computador, nos casos em que o procedimento usado solicita
o nome de um arquivo, ela no ser a funo mais apropriada. Isto porque
difcil para os usurios lembrarem e digitarem caminhos e diretrios de arquivos;
alm disso, erros de digitao podem ocorrer, dificultando o processo para
encontrar um arquivo.

O mtodo GetOpenFilename usado exatamente para simplificar o acesso a


arquivos, garantindo que o nome e o caminho do arquivo estejam corretos. Esse
mtodo abre a mesma caixa de dilogo Abrir que exibida quando selecionamos
o comando Abrir, contido na guia Arquivo do Excel. Apesar de ser a mesma
caixa de dilogo, a que visualizamos por meio do mtodo GetOpenFilename
no abre arquivos, mas apenas retorna como uma sequncia de caracteres
o nome do arquivo que o usurio selecionar. Depois, podemos escrever um
cdigo para usar o nome do arquivo como nos for conveniente.

96
Programao de macros
2
Para selecionar mais de um nome de arquivo por meio do mtodo
GetOpenFilename, necessrio definir como True o argumento MultiSelect
para que o mtodo retorne uma srie de nomes de arquivos. O cdigo usado
precisa fazer um loop nos nomes de arquivos, ou seja, processar cada um deles
para poder identificar todos eles.

Sub Seleciona_Arquivo()
Dim Caminho As String
Caminho = Application.GetOpenFilename
MsgBox Caminho
End Sub

A varivel Caminho ir armazenar o local correspondente ao arquivo selecionado.

97
Excel VBA - Mdulo I

O contedo da varivel (caminho do arquivo) ser exibido na caixa de mensagem.

2.9.Mtodo GetSaveAsFilename
Mtodo semelhante ao que acabamos de descrever o GetSaveAsFilename.
Este mtodo, porm, abre uma caixa de dilogo igual caixa Salvar Como do
Excel e obtm o nome e caminho do arquivo, mas sem que seja feita qualquer
ao com essas informaes. A sintaxe desse mtodo e seus argumentos so
os seguintes:

object.GetSaveAsFilename([initialFilename],
[fileFilter],[filterIndex],[title],[buttonText])

InitialFilename: Este argumento determina qual ser o nome padro


mostrado na caixa antes que o usurio escolha outro arquivo;

FileFilter: Com este argumento, podemos determinar quais tipos de arquivos


ficaro disponveis na caixa de dilogo para o usurio escolher;

Title: Este argumento determina o texto a ser exibido na barra de ttulos


da caixa de dilogo.

Este exemplo exibe o caminho e nome do arquivo em uma caixa de mensagem:

MsgBox Application.GetSaveAsFilename

98
Programao de macros
2
Pode ser que em alguns casos a informao que desejamos no seja o nome de
um arquivo, mas sim o de uma pasta. Ento, devemos usar o objeto FileDialog,
como mostra o procedimento a seguir, para que uma caixa de dilogo onde
possamos selecionar um nome de diretrio aparea.

Sub Identifica_Endereo()
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = Application.DefaultFilePath & \
.Title = Escolha um local para salvar seus arquivos
.Show
If .SelectedItems.Count = 0 Then
MsgBox Operao Cancelada
Else
MsgBox .SelectedItems(1)

End If
End With
End Sub

No objeto FileDialog, podemos especificar um valor para a propriedade


InitialFilename para determinar o diretrio inicial. Ento, o cdigo definir
como diretrio inicial o caminho de arquivo padro do Excel.

2.10.Caixas de dilogo do Excel


As cerca de setecentas caixas de dilogo do Excel so muito teis para agilizar
o trabalho com programao, pois por meio delas os prprios usurios podem
escolher diversas opes, como formatar fonte, preencher sequncias, imprimir,
etc. A exibio das caixas de dilogo internas do Excel pode ser ativada por
meio da seguinte sintaxe:

Application.Dialogs(Nome da caixa de dilogo).Show

99
Excel VBA - Mdulo I

A sintaxe citada a seguir, por exemplo, seleciona um intervalo de clulas e,


ento, exibe uma caixa de dilogo contendo opes de formatao da fonte e
cor de fundo desse intervalo. As caixas de dilogo que aparecem so Fontes e
Formatar Clulas.

Sub ExibirDialogo()
Range(intervalo).Select
Application.Dialogs(xlDialogFormatFont).Show
Application.Dialogs(xlDialogPatterns).Show
End Sub

Vejamos a imagem das caixas de dilogo Fontes e Formatar Clulas, que sero
exibidas, respectivamente:

100
Programao de macros
2
Para termos acesso a uma lista contendo as constantes das caixas de dilogo,
basta seguir estes passos:

1. No VBA, pressionar F2 para que seja exibido o Pesquisador de objetos;

2. Selecionar Excel na lista Projeto/Biblioteca, presente no canto superior


esquerdo do Pesquisador de objetos;

3. Digitar xlDialog na lista Texto de pesquisa, localizada abaixo da lista


Projeto/Biblioteca;

4. Clicar no boto Pesquisar, identificado pelo desenho de um binculo.

No so citadas, em nenhuma parte da Ajuda do sistema, as constantes das


caixas de dilogo que podemos usar, o que quer dizer que, provavelmente,
muitas tentativas e erros acontecero at que possamos descobrir as constantes
que realmente satisfazem as nossas necessidades. Alm disso, algumas caixas
de dilogo no tm uma constante que as represente, e h, ainda, as constantes
que simplesmente no funcionam.

101
Excel VBA - Mdulo I

Uma das causas para o Excel mostrar mensagens de erro tentarmos inserir
caixas de dilogo num contexto onde elas no se encaixam. Se, por exemplo,
usarmos a constante xlDialogAlignment, a qual exibe uma caixa de dilogo
que configura o alinhamento em uma clula, quando a seleo abranger algum
outro elemento que no sejam clulas, o Excel mostrar uma mensagem de
erro.

2.10.1.Controlando a exibio dos itens


da janela
Itens da janela, como barras de rolagem, linhas de grade e guias de planilhas,
podem ter sua exibio controlada por meio de propriedades de valores
booleanos, ou seja, lgicos, que devem ser definidos como True, nos casos em
que os itens devem ser exibidos, ou False, nos casos em que no devem ser
exibidos.

A seguir, temos uma tabela que apresenta, na primeira coluna, as propriedades


e, na segunda coluna, os itens controlados por elas, respectivamente:

Propriedades Itens
DisplayGridlines Linhas de grade.
DisplayFormulas Frmulas.
DisplayHeadings Cabealhos de linha e coluna.
Smbolos de estrutura de
DisplayOutline
tpicos.
DisplayZeros Valores iguais a zero.
DisplayHorizontalScrollBar Barra de rolagem horizontal.
DisplayVerticalScrollBar Barra de rolagem vertical.
DisplayWorkbookTabs Guias das planilhas.
DisplayAutomaticPageBreaks Quebra de pgina automtica.
DisplayStatusBar Barra de status.

102
Programao de macros
2
No cdigo a seguir, por exemplo, permitida a exibio das linhas de grade, dos
cabealhos de linha e coluna e das guias das planilhas, porm, no permitida
a exibio da barra de rolagem vertical:

Sub Exibio()
With ActiveWindow
.DisplayGridlines = True
.DisplayHeadings = True
.DisplayWorkbookTabs = True
.DisplayVerticalScrollBar = False
End With
End Sub

Depois de executada essa macro, a janela aparecer da forma como est ilustrada
na imagem a seguir:

103
Excel VBA - Mdulo I

2.10.2.Operador NOT
A funo do operador Not inverter a lgica de uma expresso, demonstrando
utilidade nos casos em que uma opo est habilitada, mas necessrio
desabilit-la e vice-versa. Podemos criar, por exemplo, um cdigo para que
linhas de grade que j esto sendo exibidas sejam ocultadas, ou um cdigo
para que sejam exibidas as linhas de grade ocultas. Devemos, ento, utilizar o
operador Not antes de expresses que resultem em valores lgicos, ou seja,
True ou False. A sintaxe do operador Not a seguinte:

Not expresso

Linhas de cdigo que utilizam o operador Not podem facilitar o trabalho no


Excel. Por exemplo, para alternar entre a exibio e a ocultao das linhas de
grade de uma planilha, devemos definir o valor de DisplayGridlines como o
oposto do que est definido no momento. Isto quer dizer que se o valor for
True, devemos alter-lo para False. Para realizar essa mudana, devemos digitar
o objeto, no caso, ActiveWindow, depois a propriedade DisplayGridlines e o
sinal de igualdade (=). Ento, devemos definir o valor da igualdade digitando
Not e repetindo o que estiver antes do sinal de igualdade (=). Criaremos, dessa
forma, a macro Alternar_Linha_Grade, que ficar assim:

Sub Alternar_Linha_Grade()
ActiveWindow.DisplayGridlines = Not
ActiveWindow.DisplayGridlines
End Sub

Ao executar a macro, se as linhas de grade estiverem sendo exibidas, elas


sero ocultadas. Ao executar a macro mais uma vez, as linhas de grade sero
novamente exibidas.

104
Programao de macros
2
Veja um exemplo de planilha sem linha de grade:

Agora, um exemplo de planilha com linha de grade:

O operador Not permite criar mecanismos que agilizam o desenvolvimento


das atividades no Excel. Podemos, por exemplo, criar teclas de atalho para as
macros criadas, o que permite utilizar as macros desejadas a partir de outros
arquivos, bastando abrir aquele que a contm.

105
Excel VBA - Mdulo I

2.10.3.Trabalhando em linhas e
colunas inteiras
Quando utilizamos a propriedade Row depois da referncia de uma clula, o
nmero da linha dessa clula ser capturado. No cdigo a seguir, por exemplo,
o nmero da linha da clula ativa inserido na prpria clula, ou seja, se a
clula ativa for a A7, ser inserido na clula A7 o nmero 7, o qual capturado
pela parte do cdigo que fica aps o sinal de igualdade (=):

ActiveCell = ActiveCell.Row

O mesmo processo pode ser usado para inserir na clula ativa o nmero de
sua coluna, com a diferena de que a referncia da coluna deve ser feita pela
propriedade Column:

ActiveCell = ActiveCell.Column

2.10.3.1. Inserindo e excluindo linhas, colunas e clulas

Quando desejarmos referenciar uma linha inteira, usaremos a propriedade


EntireRow. Seguindo a mesma lgica, para referenciar uma coluna inteira,
usaremos a propriedade EntireColumn. Para inserir linhas, colunas ou clulas,
usaremos o mtodo Insert. Para excluir linhas, colunas ou clulas, usaremos
Delete.

ActiveCell.EntireRow.Insert
ActiveCell.EntireColumn.Insert

Alm dessas propriedades j citadas, tambm so usadas para trabalhar com


linhas e colunas inteiras a propriedade Rows, que representa todas as linhas
da planilha, e Columns, que representa todas as colunas da planilha. Cada uma
dessas propriedades pode ter como referncia vrias linhas e colunas, bastando
que estas estejam entre parnteses.

ActiveCell.Columns.Delete

106
Programao de macros
2

2.10.3.2. Ajustando a largura e a altura de linhas e colunas

A propriedade RowHeight edita a altura de uma ou mais linhas, sendo que


a altura medida em pontos, ou seja, 1/72 polegada. J a largura editada
pela propriedade ColumnWidth, sendo definida de acordo com a quantidade
de caracteres que podem ser contidos na coluna quando o estilo definido o
Normal, ou seja, a largura 15 exibe at 15 caracteres.

O exemplo a seguir define como 17 a altura das linhas 7 at 15, e como 12 a


largura das colunas C at E:

Rows(7:15).RowHeight = 17
Columns(C:E).ColumnWidth = 12

O mtodo AutoFit faz um ajuste automtico em uma coluna ou linha. Se


fizermos referncia a uma nica clula da coluna, o ajuste de toda coluna ser
feito de acordo com ela. Se fizermos referncia a toda coluna, a ajuste ser feito
de acordo com a clula que tiver o texto mais largo. O exemplo a seguir faz o
ajuste da largura da coluna E com base na clula E7:

Range(E7).Columns.AutoFit

possvel tambm ajustar mais de uma coluna em uma planilha:

Columns(a:c).AutoFit

107
Excel VBA - Mdulo I

Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

O gravador de macros do Excel otimiza o processo de desenvolvimento de


aplicaes, pois gastamos menos tempo com digitao. Porm, apesar de
muito til para a criao de macros, tambm podemos cri-las sem o uso
dele;

O VBA apresenta diversos objetos, propriedades e mtodos diferentes, de


modo que seria impossvel memorizar todos eles. Na sintaxe de uma funo
ou mtodo, os argumentos vm separados por vrgulas e so definidos de
acordo com seu nome ou posio;

Dentre diversos modos de enviar informaes para um computador, o uso de


formulrios um dos principais mtodos adotados pelos desenvolvedores
de programas. Os formulrios permitem interatividade com o usurio, so
um meio seguro de colocar os dados em suas posies corretas e conferem
consistncia s informaes;

Para cada propriedade que definimos no Excel, necessrio referenciar o


objeto ao qual ela ser aplicada, mesmo quando o objeto for igual para
diversas propriedades. Para evitar a repetio do mesmo objeto nos casos
em que diversas propriedades so aplicadas a um mesmo objeto, podemos
usar a estrutura With e End With;

A caixa de mensagem utilizada para passar informaes ou para executar


um comando que depende de uma resposta do usurio;

Para exibir uma mensagem, podemos utilizar o comando Msgbox. Com


a funo Msgbox(), podemos definir uma caixa de mensagem com mais
de um boto e identificar qual dos botes foi clicado pelo usurio para,
posteriormente, indicar uma ao a ser executada, dependendo do item
escolhido;

108
Programao de macros
2

O mtodo GetOpenFilename usado para simplificar o acesso a arquivos,


garantindo que o nome e o caminho do arquivo estejam corretos;

O mtodo GetSaveAsFilename abre uma caixa de dilogo igual caixa


Salvar Como do Excel e obtm o nome e caminho do arquivo, mas sem que
seja feita qualquer ao com essas informaes;

As cerca de setecentas caixas de dilogo do Excel so muito teis para


agilizar o trabalho com programao, pois por meio delas os prprios
usurios podem escolher diversas opes, como formatar fonte, preencher
sequncias, imprimir etc.

109
Programao
de macros
2
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Qual a sintaxe utilizada para alterar o texto contido na barra de


ttulo do Excel?

a) Range(a1).Select

b) Application.Caption = Texto Qualquer

c) Selection.Title = Texto Qualquer

d) Sheets(Texto Qualquer).Select

e) As alternativas B e C esto corretas.

2. Qual das alternativas a seguir refere-se pasta de trabalho


(arquivos)?

a) Worksheets

b) Workbooks

c) Range

d) Selection

e) Application

112
Programao de macros
2
3. Qual comando deve ser utilizado para inserir um texto na clula
A4, sabendo-se que o cursor est posicionado sobre ela?

a) Range(a3).Select

b) Activecell.Value = Texto

c) Range(a4).Select = texto

d) Activecell = Texto

e) As alternativas B e D esto corretas.

4. Qual o resultado do comando Range(g1).select?

a) Seleciona a clula G1.

b) Escreve a palavra select na clula G1.

c) Seleciona a clula ativa.

d) Este comando no funciona.

e) Seleciona a planilha G1.

113
Excel VBA - Mdulo I

5. Qual o mtodo utilizado para fechar o Excel?

a) Select

b) Range

c) Finish

d) Calculate

e) Quit

114
Programao
de macros
2
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Criando macro pelo cdigo em VBA para realizar a formatao da planilha

1. Crie a seguinte planilha:

2. Com a utilizao do VBA, crie uma macro chamada Formatar, que dever
realizar uma formatao na planilha, conforme o exemplo a seguir:

Fonte: Book Antiqua,


sublinhado, cor vermelha
Mesclar e centralizar clulas

Negrito
Sombreamento verde
Centralizar texto nas clulas

Contedo da planilha
em itlico
Todas as bordas na
tabela inteira

116
Programao de macros
2
3. Crie uma macro com o nome Limpar_Formatos, que dever remover toda
a formatao gerada pela macro anterior, inclusive de mesclagem de clulas.
Aps remover a formatao, dever ser exibida uma caixa com a seguinte
mensagem: Operao Concluda;

Para remover somente a formatao das clulas, utilize o


mtodo ClearFormats.

4. Insira dois botes de controle (mostrados nas imagens anteriores), atribuindo


uma macro para cada um.

117
Operadores e
variveis
3
99 Operadores;
99 Variveis.
Excel VBA - Mdulo I

3.1.Introduo
Neste captulo, abordaremos a utilizao dos quatro tipos de operadores
(aritmticos, de comparao, lgicos e de concatenao), das variveis, e dos
espaos de memria que armazenam um valor temporariamente.

3.2.Operadores
O tipo de clculo feito com os elementos de uma frmula definido pelo operador
utilizado. O VBA possui quatro categorias de operadores, que conheceremos
nos prximos tpicos. So eles:

Operadores aritmticos;

Operadores de comparao;

Operadores lgicos;

Operadores de concatenao.

120
Operadores e variveis
3

3.2.1.Operadores aritmticos
Os operadores aritmticos, descritos e exemplificados na prxima tabela, so
empregados na realizao de clculos matemticos:

Operador Descrio Exemplos


+ Soma dois valores. 7+7 resulta em 14.
- Subtrai dois valores. 7-2 resulta em 5.
* Multiplica dois valores. 3*3 resulta em 9.
/ Divide dois valores. 8/2 resulta em 4.
Retorna a parte inteira do resultado
\ 17\2 resulta em 8.
de uma diviso.
17 Mod 2 resulta
em 1.
Retorna o resto de uma diviso.
19 Mod 4 resulta
Mod Valores no inteiros utilizados na
em 3.
diviso so arredondados.
19 Mod 4.2 resulta
em 3.
^ Calcula a exponenciao. 3^3 resulta em 27.

121
Excel VBA - Mdulo I

3.2.2.Operadores de comparao
Os operadores de comparao, descritos e exemplificados na tabela a seguir, so
utilizados para comparar valores de duas expresses, retornando um resultado
True (para comparaes verdadeiras), False (para comparaes falsas) ou Null
(caso uma das expresses utilizadas na comparao contenha dados invlidos):

Operador Descrio Exemplos


= Igual a. 20=15+15 resulta em False.
<> Diferente de. 25<>20+20 resulta em True.
> Maior que. 50>70-25 igual a True.
< Menor que. 20<10+10 resulta em False.
>= Maior ou igual a. 50>=10*7 igual a False.
<= Menor ou igual a. 30<=15+15 resulta em True.
Compara duas Objeto Is Var resulta em True,
Is variveis de referncia supondo que Objeto seja igual a X e
a objetos. que X seja igual a Var.
Compara duas
Like sequncias de FnnnF Like F*F resulta em True.
caracteres.

122
Operadores e variveis
3
3.2.3.Operadores lgicos
Os operadores lgicos so utilizados em operaes lgicas e, assim como os
operadores de comparao, retornam um resultado True, False ou Null. A
prxima tabela descreve esses operadores:

Operador Descrio Exemplos


Acrescenta condies a um teste
12>5 And 8<7
lgico. Retorna True caso todas as
resulta em False.
And condies sejam verdadeiras, False
12>5 And 8>7
caso uma delas seja falsa e Null
resulta em True.
caso uma delas seja nula.
Acrescenta condies em um teste
lgico, assim como o operador
And. Porm, retorna True caso
12>5 Or 8<7 resulta
Or uma ou mais condies sejam
em True.
verdadeiras, False caso todas sejam
falsas e Null caso uma delas seja
nula.
Inverte a lgica de uma expresso, Not 12>5 resulta em
Not
criando uma negao lgica. False.
Verifica uma equivalncia lgica,
12>5 Eqv 8>5
retornando True caso as duas
resulta em True.
Eqv expresses sejam verdadeiras ou
12<5 Eqv 8<5
falsas e False ou Null caso uma
resulta em True.
delas seja nula.
Faz uma excluso lgica,
retornando True caso uma
9>7 Xor 7<5 resulta
expresso seja verdadeira e a outra,
em True.
Xor falsa. Caso as duas expresses
9>7 Xor 7>5 resulta
sejam verdadeiras ou falsas, retorna
em False.
False, e caso uma delas seja nula,
retorna Null.

123
Excel VBA - Mdulo I

3.2.4.Operadores de concatenao
O operador de concatenao do VBA o & (e comercial). A concatenao utilizada
para criar um nico texto a partir da associao de duas ou mais sequncias
de caracteres de texto. Para exemplificar, podemos imaginar a concatenao
de dois valores de texto: um fixo, como Bem-vindo, (inclusive com a vrgula), e
outro varivel, como um nome que preenchido em um campo. Supondo que
o nome preenchido seja Marcos, a concatenao Bem-vindo, &Marcos&!
resulta no texto Bem-vindo, Marcos!.

Podemos dizer que o operador de concatenao tambm tem a funo de


unir valores distintos, como o contedo de um texto com a data definida pelo
sistema operacional da mquina, ou ainda exibir em uma nica resposta, uma
string com o resultado de uma varivel.

No exemplo a seguir, ser exibida na barra de status do Excel a palavra data,


seguida da data do sistema:

Sub Exibe_Data()
Application.StatusBar = Data: & Date
End Sub

Para exibir uma Caixa de Mensagem com diversas linhas, utilizamos a instruo
vbCrLf para realizar a quebra de linhas. Desta forma, utilizaremos o smbolo
concatenador para unir o texto com o comando de quebra de linha.

Sub mensagem()
MsgBox Data: & Date & vbCrLf & Bem Vindo ao Sistema!
End Sub

Ao executar a macro, teremos o resultado a seguir:

124
Operadores e variveis
3
3.2.5.Ordem das operaes
A ordem em que as operaes ocorrem no VBA a mesma do Excel: primeiramente
so calculadas todas as exponenciaes, em seguida so feitas as multiplicaes
e divises e, por ltimo, as adies e subtraes. Qualquer operao envolvida
por parnteses, porm, resolvida antes de qualquer outra. Assim, a expresso
5+3*2 resulta em 11, enquanto a expresso (5+3)*2 traz como resultado o
nmero 16.

Os parnteses adicionais ou desnecessrios (5+(3*2), por


exemplo) no afetam os clculos e podem ser utilizados
como um recurso para facilitar o entendimento do cdigo.

3.3.Variveis
As variveis so amplamente utilizadas em muitas linguagens de programao,
inclusive no Visual Basic. Uma varivel um espao nomeado da memria,
utilizado para armazenar um valor temporariamente.

O nome de uma varivel deve ser iniciado por um caractere


alfabtico e conter, no mximo, 255 caracteres.

125
Excel VBA - Mdulo I

Para atribuir informao em uma varivel, devemos digitar o nome da varivel


seguido pelo sinal = (igual) mais o contedo desejado. Caso a informao a ser
atribuda seja alfanumrica, devemos coloc-la entre aspas. Em se tratando de
informao numrica, devemos apenas digitar o nmero desejado. Observemos
o exemplo adiante:

nome=Ana Paula
idade=18

Podemos usar o comando Msgbox para exibir o contedo da varivel para o


usurio. Neste caso, devemos apenas incluir o nome da varivel (sem aspas)
para que seu contedo seja exibido, conforme apresentado a seguir:

Texto = Impacta Tecnologia


Msgbox Texto

Tambm podemos exibir mais de uma varivel dentro da caixa de mensagem,


juntamente com um texto qualquer.

Consideremos o seguinte contedo a ser exibido na caixa de mensagem:

Nome: Ana Paula


Idade: 18 anos

126
Operadores e variveis
3
Neste caso, devemos escrever o seguinte cdigo:

Nome = Ana Paula


Idade = 18
Msgbox Nome: & Nome & vbCrLf & Idade: & Idade & anos

Neste ltimo caso, foi utilizado o operador de concatenao & e o comando


vbCrLf para efetuar a quebra de linha dentro da caixa de mensagem.

possvel definir variveis a partir de valores armazenados em outras variveis:

Sub calcula_total()
qtde = InputBox(Digite a quantidade)
preco = 10.25
Total = qtde * preco
MsgBox Valor a pagar = & Total
End Sub

A varivel total ir retornar o resultado do produto dos valores contidos nas


variveis qtde e preco, obtendo assim o contedo numrico resultante da
quantidade que for digitada multiplicada pelo valor 10.25 que est na varivel
preco. Veja, no exemplo abaixo, o resultante de ter digitado 2 para quantidade:

127
Excel VBA - Mdulo I

3.3.1.Declarando variveis
As variveis precisam ser declaradas antes de serem utilizadas, ou seja, precisam
ter seu tipo definido. A definio do tipo de uma varivel otimiza a utilizao
do espao da memria, pois cada um dos tipos ocupa quantidades de espao
diferentes, de acordo com os dados que vo armazenar. Isso faz com que a
memria seja ocupada de acordo com as necessidades reais de armazenamento
de informaes.

Os tipos definem como os dados so armazenados na memria: como data,


como nmero inteiro ou como nmero decimal, por exemplo. O VBA possui
recursos para manipular essas informaes automaticamente, mas com algumas
desvantagens, como lentido na execuo e um uso ineficiente de memria
(todas as variveis no declaradas assumem o tipo Variant, que pode armazenar
qualquer tipo de dado, mas faz com que o VBA reserve mais memria que o
necessrio e faa verificaes que consomem muito tempo). Por esse motivo, o
ideal que as variveis sejam sempre declaradas, principalmente nas aplicaes
mais complexas.

A prxima tabela descreve os tipos de variveis, lista seus valores permitidos e


o tamanho que ocupam na memria:

Tipo Valores Tamanho


Byte De 0 a 255. 1 byte
Boolean True ou False. 2 bytes
Integer De -32.768 a 32.767. 2 bytes
Long De -2.147.483.648 a 2.147.483.647. 4 bytes
Single (vrgula Para valores negativos, de -3,402823E38 a
flutuante de -1,401298E-45; para valores positivos, de 4 bytes
preciso simples) 1,401298E-45 a 3,402823E38.
Objeto Qualquer referncia a um objeto. 4 bytes
Date De 01/01/0100 a 31/12/9999. 8 bytes
Para valores negativos, de
Double (vrgula -1,79769313486231E308 a
flutuante de dupla -4,94065645841247E-324; para valores 8 bytes
preciso) positivos, de 4,94065645841247E-324 a
1,79769313486232E308.

128
Operadores e variveis
3
Tipo Valores Tamanho
Currency (nmero De -922.337.203.685.477,5808 a
8 bytes
inteiro em escala) 922.337.203.685.477,5807.
String 10 bytes
De 0 a 2.000.000.000 de caracteres
(comprimento somados
(aproximadamente).
varivel) ao
Decimal +/- 14 bytes
Variant Qualquer nmero at o intervalo de um
16 bytes
(numrica) Double.
22 bytes
De 0 a 2.000.000.000 de caracteres
Variant (texto) somados
(aproximadamente).
ao
String
De 1 a 65.400 caracteres Definido
(comprimento
(aproximadamente). pelo
fixo)
Definido pelo Definido
usurio (usando Depende da definio. pelo tipo
Type) de dado.

No exemplo a seguir, a varivel media receber o resultado do clculo da mdia


aritmtica entre 4 notas inseridas nas variveis nota1, nota2, nota3 e nota4.
Observe que as variveis foram declaradas como single, que permite aceitar
valor decimal de preciso simples.

Sub calcula_media()
Dim nota1, nota2, nota3, nota4, media As Single
nota1 = 10
nota2 = 5.5
nota3 = 3
nota4 = 8.5
media = (nota1 + nota2 + nota3 + nota4) / 4
Range(a2) = media
End Sub

129
Excel VBA - Mdulo I

O resultado inserido na clula A2 ser 6,75.

As variveis podem ser declaradas nos nveis de procedimento, de mdulo ou


de projeto. Conheceremos, a seguir, a declarao em cada um desses nveis.

3.3.1.1. Declarando no procedimento

Declarar uma varivel no nvel de procedimento significa declar-la dentro do


procedimento em que ela ser utilizada. Assim, nenhum outro procedimento,
mesmo que seja do mesmo mdulo, ser capaz de utilizar essa varivel.

Para declarar uma varivel no nvel de procedimento, devemos inserir a instruo


Dim, o nome da varivel, a palavra-chave As e um tipo, como no exemplo a
seguir. Caso digitemos apenas a instruo Dim e o nome da varivel, seu tipo
ser definido como Variant.

Dim <nome_variavel> As <tipo>

Consideremos o seguinte exemplo:

Dim variavel_1 As Decimal


Dim valor As Decimal

Aps declarar a varivel, necessrio definir seu valor. Se definirmos um valor


incompatvel com o tipo declarado, ser exibido um erro de execuo da macro.

130
Operadores e variveis
3
Para variveis do tipo Object, devemos atribuir a referncia do objeto, utilizando
a instruo Set seguida do nome do objeto, de um sinal de igual (=) e da referncia
do objeto, como exibe a sintaxe a seguir:

Dim nome_do_objeto As Object


Set nome_do_objeto = Worksheets(nome_da_planilha).
Range(referencia_da_celula)

O exemplo a seguir ir exibir em uma caixa de mensagem o valor contido na


clula A4, pertencente na planilha denominada Plan1.

Sub exibe_msg()
Dim celula as Object
Set celula = worksheets(plan1).range(a4)
Msgbox O Contedo da clula A4 : & celula
End Sub

Consideremos o exemplo a seguir onde a clula ativa (selecionada) estar


recebendo o valor contido na clula B5, pertencente planilha Dados:

Sub insere_conteudo()
Dim conteudo As Object
Set conteudo = Worksheets(Dados).Range(b5)
ActiveCell.Value = conteudo.Value
End Sub

Podemos definir outras propriedades de um objeto na clula ativa, como o


procedimento a seguir, que formata o estilo da fonte e a cor do preenchimento:

Sub Macro1()
Dim nome_do_objeto As Object
Set nome_do_objeto = Worksheets(Dados).Range(a5)
With ActiveCell
.Value = nome_do_objeto.Value
.Font.Bold = nome_do_objeto.Font.Bold
.Interior.ColorIndex = nome_do_objeto.Interior.
ColorIndex
End With
End Sub

131
Excel VBA - Mdulo I

Podemos fazer com que o objeto deixe de ser associado ao nome que definimos,
utilizando a instruo Set seguida do nome do objeto, de um sinal de igual (=)
e do valor definido como Nothing, como o prximo exemplo, que dissocia a
varivel nome_da_planilha e o objeto ao qual fazia referncia:

Set nome_da_planilha = Nothing

As variveis em geral tm seus valores restaurados aps o trmino do


procedimento. possvel, porm, declarar uma varivel como esttica, atravs
da palavra-chave Static, como mostra a sintaxe a seguir. As variveis desse tipo
s tm seus valores restaurados quando a pasta de trabalho fechada.

Static <nome_variavel> as <tipo>

Consideremos o seguinte exemplo:

Sub Incremento()
Static num As Integer
MsgBox num
num = num + 1
End Sub

No exemplo anterior, podemos observar que cada vez que a macro for executada,
o valor 1 ser somado ao contedo da varivel. Neste caso, diferentemente dos
demais tipos de variveis, a varivel do Static mantm o contedo mesmo aps
a execuo da macro em questo.

Assim como as outras variveis declaradas no nvel


de procedimento, as variveis estticas no podem
ser utilizadas por outros procedimentos, mesmo que
faam parte do mesmo mdulo.

132
Operadores e variveis
3
3.3.1.2. Declarando no mdulo

As variveis declaradas no nvel do mdulo podem ser utilizadas por qualquer


procedimento que faa parte do mdulo.

Para declarar uma varivel no mdulo, devemos utilizar a instruo Private


e a seo Declaraes, localizada na parte superior do mdulo. Uma linha
horizontal exibida automaticamente abaixo da declarao.

Verificamos, ento, que o valor da varivel Curso, o qual foi atribudo na macro
Nome_Curso, ser utilizado na macro Dados.

Para efeitos de compatibilidade com verses anteriores,


a instruo Dim tambm pode ser utilizada para
declarar variveis no nvel do mdulo.

133
Excel VBA - Mdulo I

3.3.1.3. Declarando no projeto

As variveis declaradas no nvel do projeto podem ser utilizadas por quaisquer


mdulos que faam parte do projeto.

Para declarar uma varivel no projeto, devemos utilizar a instruo Public e a


seo Declaraes, localizada na parte superior do mdulo.

Podemos criar a varivel curso em um dos mdulos do projeto, utilizando a


seguinte instruo:

Public curso As String

Consideremos ainda a seguinte macro:

Sub atribui_valor()
curso = Excel VBA
End sub

Aps esta macro ser executada, o valor da varivel ser VBA.

Como a varivel curso foi definida como Public, poderemos utiliz-la em


qualquer outro mdulo do projeto, como no exemplo a seguir:

Sub utiliza_variavel()
Dim nomealu as string
Nomealu = inputbox(Digite o nome do aluno)
ange(b2) = nomealu
Range(b3) = curso
End sub

134
Operadores e variveis
3
3.3.1.4. Option Explicit

possvel que um erro de digitao faa com que o VBA crie uma nova varivel
durante o procedimento, em vez de redefinir seu valor anterior. Isso faz com
que essa varivel, por no estar declarada, assuma o tipo Variant, ocupando
um espao desnecessrio da memria, e que a varivel anterior no tenha
seu valor redefinido. Para evitar esse tipo de problema, podemos aplicar uma
obrigatoriedade de declarao de variveis, por meio da instruo Option
Explicit no incio do mdulo, antes da declarao de procedimentos. Ao fazer
isso, o cdigo no ser capaz de executar uma varivel no declarada, o que
evita a ocorrncia de erros.

A instruo Option Explicit s se aplica ao mdulo em que foi inserida. Portanto,


normalmente necessrio inserir a instruo em cada um dos mdulos em
que se deseja tornar a declarao de variveis obrigatria. possvel, porm,
configurar a caixa de dilogo Opes, exibida a seguir, para fazer com que todos
os mdulos possuam a instruo Option Explicit na seo Declaraes. Para
isso, basta clicarmos em Opes, disposta no menu Ferramentas, e ativarmos
a opo Requerer declarao de varivel.

135
Excel VBA - Mdulo I

Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

O VBA possui quatro categorias de operadores: aritmticos, de comparao,


lgicos e de concatenao;

A ordem em que as operaes ocorrem no VBA a mesma utilizada pelo


Excel: primeiramente so calculadas todas as exponenciaes, em seguida
so feitas as multiplicaes e divises e, por ltimo, as adies e subtraes.
Qualquer operao envolvida por parnteses, porm, resolvida antes de
qualquer outra;

Uma varivel um espao nomeado da memria utilizado para armazenar


um valor temporariamente.

136
Operadores e
variveis
3
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Qual das alternativas a seguir contm operadores aritmticos?

a) +, -, Like

b) And, Or, Xor, Not

c) &, >, -, =

d) +, -, *, /

e) Not, &, Like

2. Qual das alternativas a seguir est correta com relao a variveis?

a) um espao reservado na memria, utilizado para armazenar


uma informao temporariamente.

b) obrigatria a sua criao caso a instruo Option Explicit tenha


sido indicada no mdulo.

c) So utilizadas para executar macros passo a passo.

d) As alternativas A e B esto corretas.

e) Nenhuma das alternativas anteriores est correta.

138
Operadores e variveis
3
3. Qual das alternativas a seguir corresponde ao operador de
concatenao do VBA?

a) &

b) *

c) /

d) _

e) nenhuma das alternativas

4. As clulas A1, A2 e A3 possuem, respectivamente, os valores 10,


4 e 2. Que informao ser exibida aps a execuo do comando
msgbox A1-A2*A3?

a) 20

b) 12

c) 16

d) 15

e) 2

139
Excel VBA - Mdulo I

5. Qual o resultado da operao 20>5 OR 44<2?

a) true

b) false

c) not

d) and

e) like

140
Operadores e
variveis
3
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Trabalhando com operadores matemticos no VBA

1. Desenvolva as macros a seguir utilizando o VBA, com base na seguinte


planilha:

Macro Calcular

Esta macro dever realizar as seguintes aes:

Aceitar dois nmeros em uma caixa de entrada, os quais sero inseridos


nas clulas B5 e B7, respectivamente;

Calcular a soma, subtrao, multiplicao e diviso entre os dois


nmeros, exibindo o resultado nas clulas E5, E7, E9 e E11.

142
Operadores e variveis
3
Macro Limpar

Esta macro dever realizar a seguinte ao:

Remover somente os valores contidos nas clulas (B5, B7, E5, E7, E9 e
E11).

Utilize o mtodo ClearContents.

143
Estruturas de
deciso e
repetio
4
99 Operadores;
99 Variveis.
Excel VBA - Mdulo I

4.1.Introduo
O fluxo da maioria dos procedimentos do VBA a execuo do cdigo linha
a linha, a partir do incio. Pode surgir, porm, a necessidade da execuo de
apenas alguns procedimentos, ou da execuo um procedimento vrias vezes
de acordo com condies pr-estabelecidas, casos em que utilizamos estruturas
de deciso e de repetio.

Neste captulo, abordaremos justamente as diferentes instrues que permitem


formar estruturas de deciso e repetio. Por exemplo, a instruo GoTo,
que muda o fluxo do programa, Loop, que repete uma ao por um nmero
determinado de vezes, de acordo com uma condio, e instrues utilizadas
para retornar um valor de acordo com o resultado de um teste lgico, como as
instrues Select Case e If.

4.2.GoTo
A instruo GoTo faz com que uma instruo especificada por um rtulo de
linha seja executada, ignorando outras possveis instrues no fluxo normal
dos procedimentos. Podemos especificar rtulos de linha para quaisquer linhas
do cdigo, bastando inserir um nome alfanumrico iniciado por uma letra e
terminado em dois-pontos (:).

No exemplo de cdigo adiante, quando uma condio for atendida, a instruo


GoTo ser utilizada para executar a instruo identificada com o rtulo de linha
Errologin:

Sub GoToTeste()
Dim UserName as String
UserName = InputBox (Digite seu Nome: )
If UserName <> Juliano Corinto Then
GoTo Errologin
Endif
MsgBox (Ol, Juliano!)
...[seqncia do cdigo]...
Exit Sub
Errologin:
MsgBox Acesso negado. Apenas Juliano Corinto tem
permisso de acesso.
End Sub

146
Estruturas de deciso e repetio
4
A funo InputBox permite que o usurio digite um nome, que ser verificado
em seguida. Caso esse nome seja diferente de Juliano Corinto, a execuo vai
para o ponto identificado pelo rtulo de linha Errologin:, que exibe a mensagem
do segundo comando MsgBox. Caso o nome digitado seja Juliano Corinto, a
mensagem do primeiro comando MsgBox ser exibida, o cdigo ter sequncia
e ser finalizado na instruo Exit Sub.

importante notar que a leitura e interpretao de um


cdigo que possua muitas instrues GoTo pode ser
difcil. O VBA oferece outras instrues mais adequadas
e estruturadas para alterar o fluxo de execuo dos
procedimentos. recomendvel que a instruo
GoTo seja utilizada apenas quando necessrio (no
rastreamento de erros, por exemplo).

4.3.If e suas estruturas


Podemos criar quatro tipos de estruturas de deciso com a instruo If:

If...Then;

If...Then...Else;

If aninhado;

If combinado com os operadores And e Or.

147
Excel VBA - Mdulo I

4.3.1.If...Then
A estrutura If...Then utilizada quando necessrio executar um procedimento
caso uma condio seja verdadeira. Se a condio for falsa, nenhum procedimento
executado. A seguir vemos um exemplo da utilizao da estrutura If...Then:

If Condio Then Instrues

Essa estrutura dividida em duas partes:

Condio (obrigatria): Expresso que ser avaliada como True ou False.


O valor ser considerado como True caso a expresso seja verdadeira, ou
False caso a condio seja falsa ou nula;

Instrues: Uma instruo (ou vrias, separadas por dois-pontos) que


ser executada caso a condio retorne um valor True. As instrues
so obrigatrias na forma de uma linha que no possua a clusula Else e
opcionais na forma de bloco.

Por exemplo:

Sub If_Then()
Dim n As Integer
n = 5
If n < 10 Then MsgBox menor que 10: InputBox (Digite
outro Nmero)
End Sub

Podemos inserir vrias instrues em uma nica


linha de cdigo, logo aps a palavra-chave Then,
separadas por dois-pontos (:), como em If Condio
Then Instruo1 : Instruo2 : Instuo3, caso em
que a instruo End If no utilizada.

148
Estruturas de deciso e repetio
4
O bloco de uma estrutura If...Then sempre iniciado com If e encerrado com
End If. Quando a condio inserida for verdadeira, todas as instrues entre
essas duas clusulas sero executadas. Caso a condio seja falsa, o cdigo
passa a ser executado a partir da linha abaixo da clusula End If, e todas as
instrues anteriores so ignoradas. A sintaxe utilizada a seguinte:

If Condio Then
Instrues caso a condio seja verdadeira
End If

O prximo exemplo possui uma condio que verifica se a varivel Prc maior
que 15, caso em que seu valor ser inserido na clula A5:

Sub EstPreco()
Dim Prc As Integer
Prc = InputBox(Digite o valor do produto: )
If Prc > 15 Then
Range(A5).Value = Prc
End If
Msgbox At Breve!
End Sub

149
Excel VBA - Mdulo I

Esse cdigo, quando executado, exibir uma InputBox, como na prxima


imagem. Ao inserirmos qualquer valor maior que 15 e pressionarmos OK,
faremos com que a condio seja verdadeira, e como resultado a clula A5 ser
preenchida com o valor digitado. Caso seja inserido um valor menor que 15, a
clula permanecer em branco, ou seja, nenhuma ao ser executada.

Como o comando Msgbox est aps a instruo End If, independente de a


condio ser verdadeira ou no, ser exibida a mensagem At Breve!.

possvel estruturar a funo If em uma nica linha de


cdigo. Sendo assim, no utilizamos a clusula End If.

If Prc > 15 Then Range(A5).Value = Prc

150
Estruturas de deciso e repetio
4
Podemos inserir vrios procedimentos para serem executados caso a condio
seja verdadeira. Para isso, devemos acrescentar uma condio por linha,
finalizando o bloco com a instruo End If.

O prximo exemplo contm instrues para inserir o valor da varivel Prc na


clula A5 e aplicar o estilo itlico a essa clula. Depois dever somar o valor 50
na varivel Prc e inserir este resultado na clula A6, alterar o tamanho da fonte
dessa clula para 20 e exibir uma mensagem informando que a operao foi
executada. Ao todo, so cinco instrues, uma em cada linha de cdigo entre
as instrues If e End If.

Sub EstPreco()
Dim Prc As Integer
Prc = InputBox (Digite o valor do produto: )
If Prc > 15 Then
Range(A5).Value = Prc
Range(A5).Font.Italic = True
Range(A6) = Prc + 50
Range(A6).Font.Size = 20
MsgBox Parabns! Operao realizada com xito.
End If
End Sub

151
Excel VBA - Mdulo I

A prxima imagem exibe o resultado desse cdigo caso o valor inserido pelo
usurio seja 25. A clula A5 preenchida com o nmero 25, a clula A6 com 75,
que o resultado de 25+50, e exibe a mensagem informando que a operao
foi realizada:

4.3.2.If...Then...Else
A estrutura If...Then...Else permite inserir no apenas instrues para serem
executadas caso as condies sejam verdadeiras, mas tambm instrues para
serem executadas caso as condies sejam falsas. O bloco dessa estrutura
tambm iniciado com If e encerrado com End If, mas possui uma clusula
Else aps as instrues para a condio verdadeira. Todas as instrues que
forem inseridas entre as clusulas Else e End If sero executadas apenas se a
condio for falsa.

A estrutura desse bloco a seguinte:

If Condio Then
Instrues para a condio verdadeira
Else
Instrues para a condio falsa
End If

152
Estruturas de deciso e repetio
4

A estrutura If...Then...Else dividida em trs partes:

Condio (obrigatria): Expresso que ser avaliada como True ou False.


O valor ser considerado como True caso a expresso seja verdadeira, ou
False caso a condio seja falsa ou nula;

Instrues para a condio verdadeira: Uma instruo (ou vrias, separadas


por dois-pontos) que ser executada caso a condio retorne um valor True;

Instrues para a condio falsa: Uma instruo (ou vrias, separadas por
dois-pontos) que ser executada caso a condio retorne um valor False.

Para exemplificar a aplicao dessa estrutura, utilizaremos a funo MsgBox


para criar uma caixa de texto com os botes OK e Cancelar. De acordo com o
boto escolhido pelo usurio, uma ao diferente ser executada: o boto OK
deve excluir todas as clulas e os dados de uma planilha, e o boto Cancelar
deve finalizar o procedimento sem executar essa ao, exibindo apenas uma
mensagem para o usurio.

O procedimento original para excluir todas as clulas de uma planilha seria o


seguinte:

Sub Apagar()
Cells.Delete
End Sub

153
Excel VBA - Mdulo I

O cdigo exibido a seguir cria a varivel Decisao, que assume um valor de


acordo com a resposta do usurio na funo MsgBox. Esse valor utilizado na
estrutura If...Then...Else:

Sub Apagar()
Dim Decisao As String
Decisao = MsgBox (Esta operao apagar todas as clulas
e dados da planilha. Deseja prosseguir?, vbOKCancel +
vbCritical, Alerta)
If Decisao = vbOK Then
Cells.Delete
MsgBox Clulas e dados apagados.
Else
MsgBox A operao foi anulada.
End If
End Sub

A funo MsgBox possui vbOKCancel + vbCritical como


segundo argumento para determinar, respectivamente, a
exibio dos botes OK e Cancelar e a exibio do cone
de mensagem crtica.

Quando esse procedimento for executado, a mensagem ser exibida, como


ilustra a prxima imagem:

154
Estruturas de deciso e repetio
4
Caso o usurio clique no boto OK, a varivel Decisao armazenar o resultado
vbOK (ou 1), o que far com que a condio Decisao = vbOK seja verdadeira,
caso em que todas as clulas e dados da planilha sero excludos e que a
mensagem Clulas e dados apagados ser exibida.

Se o usurio clicar no boto Cancelar, a condio ser falsa, o que far apenas
com que a mensagem A operao foi anulada seja exibida.

Podemos utilizar a funo Msgbox sempre que quisermos


obter o valor do boto pressionado pelo usurio. Neste
caso, utilizamos uma varivel que receber esta informao.

155
Excel VBA - Mdulo I

ElseIf

Podemos utilizar a clusula ElseIf para inserirmos vrias condies para


serem testadas. Neste caso, o cdigo verifica cada condio e executa as
instrues da primeira condio cujo resultado seja True. Caso nenhuma
das condies seja verdadeira, ele executa a instruo (ou conjunto de
instrues) abaixo da clusula Else. Um bloco com ElseIf utiliza a seguinte
estrutura:

If Condio1 Then
Instrues para o caso de Condio1=True
ElseIf Condio2 Then
Instrues para o caso de If=False e ElseIf=True
Else
Instrues para o caso de todas as condies anteriores
=False
End If

Em que:

Condio1 (obrigatria): Expresso que ser avaliada como True ou False.


O valor ser considerado como True caso a expresso seja verdadeira, ou
False caso a condio seja falsa ou nula;

Instrues para o caso de Condio1=True: Uma instruo (ou vrias,


separadas por dois-pontos) que ser executada caso a Condio1 retorne
um valor True. As instrues so obrigatrias na forma de uma linha que
no possua a clusula Else e opcionais na forma de bloco;

Condio2 (opcional): Igual a Condio1;

Instrues para If=False e ElseIf=True (opcional): Uma instruo (ou


vrias, separadas por dois-pontos) que ser executada caso a Condio1
retorne um valor False e a Condio2 retorne um valor True;

Instrues para o caso de todas as condies anteriores serem False


(opcional): Uma instruo (ou vrias, separadas por dois-pontos) que ser
executada caso nenhuma das condies anteriores retorne um valor True.

156
Estruturas de deciso e repetio
4
Consideremos o seguinte exemplo:

Sub If_Elseif()
Dim pagto As String
pagto = Ucase(InputBox(Indique a forma de pagamento))
If pagto = D Then
MsgBox Dinheiro
ElseIf pagto = C Then
MsgBox Cheque
ElseIf pagto = CC Then
MsgBox Carto de Crdito
Else
MsgBox Pagamento no definido. Cancelar venda!
End If
End Sub

Ser exibida a mensagem de acordo com a sigla inserida na caixa de texto


(InputBox). Caso o usurio digite algo diferente das siglas (D, C ou CC), ser
executado o comando aps a instruo Else.

possvel inserir quantas clusulas ElseIf forem


necessrias, mas apenas entre as instrues
If e Else.

157
Excel VBA - Mdulo I

Neste exemplo, temos apenas como condio vlida os valores: D, C ou CC (em


maisculo). Porm, caso fosse inserido na Caixa de Entrada um destes itens em
letra minscula, seriam executadas as aes dentro do Else, visto que todas
as condies se referenciam s siglas digitadas em letras maisculas e o VBA
diferencia letras maisculas de letras minsculas.

Para resolver este problema, foi utilizada a funo UCase(), que converte os
caracteres em maisculo. Observe a linha de cdigo:

pagto = Ucase(InputBox(Indique a forma de pagamento))

Caso o usurio digite na Caixa de Entrada o valor cc (em letras minsculas), a


funo ir converter este valor para letras maisculas resultando em CC. Neste
caso, a varivel pagto ter o valor em maisculo.

Lembrando que o programa no ir alterar os caracteres digitados dentro da


Caixa de Entrada, e sim efetuar o comparativo a seguir:

O valor digitado na Caixa de Entrada convertido em letras maisculas


igual a CC?

O valor cc convertido em letras maisculas igual a CC?

4.3.3.If aninhado
possvel aninhar blocos If, ou seja, inserir um bloco If dentro de outro, como
exibe a estrutura a seguir. importante notar que todos os blocos If devem ser
fechados com a instruo End If:

If Condio1 Then
Instrues para o caso de Condio1= verdadeiro
If Condio2 Then
Instrues para o caso de Condio2=verdadeiro
End If
End If

158
Estruturas de deciso e repetio
4
Observemos exemplo a seguir, que exibir ao usurio a mensagem Dar
desconto de 10% caso o pagamento seja vista (se pressionado o boto SIM
na funo MsgBox) e o tipo de pagamento seja em dinheiro (se digitada a
palavra Dinheiro na caixa de texto InputBox):

Sub If_Aninhado()
Dim tipo As String
Dim pagto As String
tipo = MsgBox(Pagamento Vista?, vbYesNo)
pagto = InputBox(Indique a forma de pagamento)
If tipo = vbYes Then
If ucase(pagto) = DINHEIRO Then
MsgBox Dar desconto de 10%
End If
End If
End Sub

Caso a resposta obtida na funo MsgBox seja SIM, ser executada a segunda
instruo If.

Devemos utilizar o recurso de indentao de comandos


(deslocamento direita com a tecla TAB) a fim de mostrar
claramente os comandos que esto dentro de uma
instruo If.

159
Excel VBA - Mdulo I

4.3.4.Inserindo vrias condies com And e Or


Por meio dos operadores And e Or, podemos executar uma ou mais instrues
a partir do teste de vrias condies.

O operador And constri uma conjuno lgica, ou seja, para que o resultado
seja True, todas as condies devem ser verdadeiras (caso qualquer uma delas
seja falsa, o resultado False). Para utilizar o operador And, este deve ser
inserido entre as condies que sero testadas, como exibe a estrutura a seguir:

If Condio1 And Condio2 And Condio3...Then


Instrues caso todas as condies sejam verdadeiras
Else
Instrues caso uma ou mais condies seja falsa
End If

Consideremos o exemplo adiante:

Sub Operador_And()
Dim num As Byte
num = 10
If num > 5 And num < 15 Then
MsgBox Valor dentro do intervalo!
End If
End Sub

O contedo da varivel Num 10, sendo as condies:

Num > 5 = verdadeiro, pois 10 maior que 5;

Num < 15 = verdadeiro, pois 10 menor que 15.

Como as duas condies so satisfatrias (verdadeiras), ser executado o


comando dentro da instruo If.

160
Estruturas de deciso e repetio
4
O operador Or constri uma disjuno lgica, ou seja, para que o resultado seja
True, basta que uma das condies seja verdadeira (caso todas elas sejam falsas,
o resultado False). O operador Or deve ser inserido entre as condies que
sero testadas, da mesma forma que o operador And, como exibe a estrutura
a seguir:

If Condio1 Or Condio2 Or Condio3...Then


Instrues caso uma ou mais das condies seja True
Else
Instrues caso todas as condies sejam False
End If

Observemos o exemplo:

Sub Operador_Or()
Dim valor As Byte
Dim pagto As String
valor = 50
pagto = ato
If valor > 200 Or pagto = ato Then
MsgBox Fornecer desconto de 15%
End If
End Sub

Neste caso, a mensagem ser exibida se o prazo para pagamento for Ato (
vista) ou o valor da compra for superior a 200, ou seja, com a utilizao do
operador Or, a instruo considerada verdadeira se uma ou outra condio
estiver satisfatria.

Em outro exemplo, devemos inserir na clula B6 o status do aluno, de acordo


com a mdia e o percentual de faltas, considerando que o curso possui o total
de 80 aulas. Observe as condies:

Status reprovado se a mdia final for inferior a 5 OU o total de faltas for


maior do que 25% do total de aulas;

Status aprovado se a mdia final for superior ou igual a 7 E o total de


faltas for menor ou igual a 25% do total de aulas;

161
Excel VBA - Mdulo I

Status recuperao se a mdia final for entre 5 e 6,9 e o total de faltas por
menor ou igual a 25%.

Sub resultado()
Dim media, perc_falta As Double
media = Range(b3)
perc_falta = Range(b4) / 80
reprovado: nota ruim OU muita falta
If media < 5 Or perc_falta > 0.25 Then
With Range(b6)
.Value = Reprovado
.Interior.ColorIndex = 3
.Font.ColorIndex = 2
End With
Else
aprovado: boa nota E pouca falta
Range(b6).Interior.ColorIndex = 50
If media >= 7 And perc_falta <= 0.25 Then
Range(b6) = Aprovado
recuperao: se no satisfez nenhuma das condies
acima
Else
Range(b6) = Recuperao
End If
End If
End Sub

Na figura a seguir, o status exibido foi Reprovado, pois o total de faltas foi
superior a 25% do total de 80 aulas:

162
Estruturas de deciso e repetio
4
4.4.Select Case
A instruo Select Case permite criar um fluxo de tomada de deciso em que
uma nica expresso pode ser comparada com vrias outras expresses. So
executadas as instrues correspondentes ao Case que coincidir com o valor
da expresso. A instruo Select Case utiliza a estrutura a seguir:

Select Case expresso


Case expresso1
Instrues 1
Case expresso 2
Instrues 2
Case Else
Instrues Else
End Select

O exemplo seguinte declara a varivel Modelo, cria uma InputBox para que o
usurio defina seu valor e a compara com quatro valores utilizando a instruo
Select Case:

Sub Fabricante()
Dim Modelo As String
Modelo = InputBox(Digite o nome do modelo de carro: )
Select Case Ucase(Modelo)
Case COROLLA
MsgBox A fabricante deste carro a Toyota.
Case CIVIC
MsgBox A fabricante deste carro a Honda.
Case FUSION
MsgBox A fabricante deste carro a Ford.
Case Else
MsgBox No possvel identificar a fabricante.
End Select
End Sub

Esse exemplo compara a expresso Modelo (um nome de carro inserido na


InputBox pelo usurio) e os Cases (condies). Quando a instruo encontrar
um Case que coincida com a expresso Modelo, exibir uma MsgBox com o
nome do fabricante do veculo.

163
Excel VBA - Mdulo I

Caso nenhum Case coincida com a expresso, sero executados os comandos


contidos dentro da instruo Case Else. Neste exemplo, exibida uma MsgBox
informando que no foi possvel identificar o fabricante. Observemos a imagem a
seguir, que ilustra a MsgBox exibida caso o usurio digite Corolla na InputBox:

Podemos comparar a expresso com faixas de valor,


utilizando a palavra-chave To entre os valores inicial e
final, por exemplo, 60 To 65 para indicar um intervalo
entre 60 e 65 (incluindo os extremos).

Observemos o exemplo adiante, que determina a exibio da MsgBox de acordo


com a faixa de valor inserida pelo usurio:

Sub Estoque()
Dim qtde_estoque As Integer
estoque = InputBox(Qual a quantidade)
Select Case estoque
Case 0 To 10
MsgBox Insuficiente
Case 11 To 30
MsgBox Ateno
Case Is > 30
MsgBox Ok
End Select
End Sub

164
Estruturas de deciso e repetio
4
4.5.Loop e suas estruturas
A instruo Loop utilizada para repetir a execuo de blocos de cdigo VBA por
um nmero de vezes determinado previamente ou pelo valor de uma varivel.
Existem trs tipos de estruturas que podem ser criadas com a instruo Loop:

Do...Loop;

Do While...Loop;

Do Until...Loop.

4.5.1.Do...Loop
A estrutura Do...Loop pode utilizar a palavra-chave While para determinar
que um conjunto de instrues ser executado enquanto uma condio for
verdadeira, ou a palavra-chave Until para determinar que um conjunto de
instrues ser executado enquanto uma condio for falsa. A sintaxe dessa
estrutura a seguinte:

Do {While | Until} Condio


Instrues
Exit Do
Instrues
Loop

Essa estrutura dividida em duas partes:

Condio (opcional): Uma expresso numrica ou de sequncia que seja


igual a True ou False (condies Null so tratadas como False);

Instrues: Uma instruo ou um conjunto de instrues que sero


executadas repetidamente enquanto Condio for igual a True, ou at que
isso acontea.

165
Excel VBA - Mdulo I

Podemos utilizar a instruo Exit Do para fazer com que o fluxo da estrutura
Do...Loop seja interrompido, caso em que a execuo continua a partir da
linha abaixo da instruo Loop. Nos casos de estruturas Do...Loop aninhadas,
uma instruo Exit Do transfere a execuo para a estrutura que est no nvel
imediatamente superior ao atual.

4.5.1.1. Do While...Loop

A estrutura Do While...Loop permite fazer com que um conjunto de instrues


seja executado enquanto uma condio for verdadeira. Essa estrutura tem duas
sintaxes possveis.

Condio testada no incio do loop

Com essa sintaxe, exibida a seguir, as instrues so executadas apenas se


a condio for verdadeira (caso a condio seja falsa, a execuo iniciada
a partir da linha abaixo da instruo Loop):

Do While Condio
Instrues
Loop

Exemplo de um contador de 0 a 10:

Sub do_while()
Dim n As Byte
Do While n <= 10
MsgBox n
n = n + 1
Loop
End Sub

166
Estruturas de deciso e repetio
4
Consideremos a seguinte planilha, em que deve ser calculado o total de
cursos vendidos de Excel VBA:

O cdigo a seguir, descreve o procedimento que ter incio na clula B2 e


executar as instrues dentro do lao Do While enquanto a clula ativa
estiver preenchida, ou seja, diferente de vazio. Em cada clula selecionada,
ser verificado se o contedo igual a Excel VBA e em caso afirmativo
ser acrescido na varivel TOT o valor correspondente, o qual est na
clula da coluna ao lado da clula ativa (coluna C). Depois de verificada
a consistncia e independente da clula ativa tiver o contedo Excel VBA
ou no, ser posicionado na clula posterior (prxima linha) e repetir o
processo novamente.

O lao ser encerrado somente quando a clula ativa (pertencente a coluna


B) for vazia. Observe o exemplo:

Sub Vendas_While()
Dim tot As Integer
Range(b2).Select
faa enquanto clula ativa diferente de vazio
Do While ActiveCell <>
If ActiveCell = Excel VBA Then
tot = tot + ActiveCell.Offset(0, 1)
End If
ActiveCell.Offset(1, 0).Select
Loop
MsgBox Total Vendido (Excel VBA) = & tot
End Sub

167
Excel VBA - Mdulo I

Ao executarmos a macro, teremos o resultado a seguir:

Condio testada aps as instrues

A sintaxe a seguir executa todas as instrues e testa a condio. Enquanto


a condio for verdadeira, o loop ser executado repetidamente:

Do
Instrues
Loop While Condio

No exemplo adiante, sero executados os comandos dentro da estrutura


Do, pelo menos uma vez. Isto porque primeiramente so executadas as
instrues antes de efetuar a comparao.

Sub do_while2()
Dim n As Byte
n = 20
Do
MsgBox n
n = n + 1
Loop While n <= 10
End Sub

A mensagem contendo o valor da varivel n exibida, sendo que o valor 1


ser acrescido na varivel que ficar com o valor 21. Se a varivel for menor
ou igual a 10, o procedimento no ser satisfatrio, encerrando ento o
lao.

168
Estruturas de deciso e repetio
4

4.5.1.2. Do Until...Loop

A estrutura Do Until...Loop executa instrues enquanto uma condio for falsa.


Da mesma forma que Do While...Loop, essa estrutura possui duas sintaxes
possveis:

Condio testada no incio do loop

Do Until Condio
Instrues
Loop

Assim como no exemplo anterior, que utiliza a estrutura Do...While, no exemplo


adiante ser exibido um contador de 0 a 10. Neste caso, observamos a condio
Faa at o valor da varivel > 10, ou seja, somente quando a condio for
satisfatria, o procedimento sair do lao Do...Until.

Sub do_until()
Dim n As Byte
Do Until n > 10
MsgBox n
n = n + 1
Loop
End Sub

169
Excel VBA - Mdulo I

Utilizando o lao Do..Until, observe o exemplo para calcular o total de cursos


Excel VBA. Este exemplo foi demonstrado anteriormente com a utilizao do
lao Do..While. Perceba que a condio do lao Do..Until inversa a condio
utilizada no lao Do..while, porm ambos os cdigos tero o mesmo objetivo e
apresentaro o mesmo resultado.

Sub Vendas_Until()
Dim tot As Integer
Range(b2).Select
faa at celula ativa for nula (vazia)
Do Until ActiveCell =
If ActiveCell = Excel VBA Then
tot = tot + ActiveCell.Offset(0, 1)
End If
ActiveCell.Offset(1, 0).Select
Loop
MsgBox Total Vendido (Excel VBA) = & tot
End Sub

170
Estruturas de deciso e repetio
4
Condio testada aps as instrues

Do
Instrues
Until Loop Condio

Para este caso, consideremos o seguinte exemplo:

Sub do_until2()
Dim n As Byte
n = 8
Do
MsgBox n
n = n + 1
Loop Until n > 10
End Sub

Observe que o loop continua fazendo o clculo, at que o nmero seja


maior que 10.

4.6.While...Wend
A estrutura While...Wend funciona da mesma forma que a estrutura Do While...
Loop, com a exceo de que o teste da condio deve ser feito obrigatoriamente
no incio, como na sintaxe a seguir:

While Condio
Instrues
Wend

Consideremos o seguinte exemplo:

Sub while_wend()
Dim n As Byte
While n <= 10
MsgBox n
n = n + 1
Wend
End Sub

171
Excel VBA - Mdulo I

A condio verificada repetidamente e, sempre que for igual a True, as


instrues localizadas antes da instruo Wend sero executadas. Se a condio
for igual a False, a execuo continuar a partir da linha abaixo da instruo
Wend.

Essa sintaxe dividida em duas partes:

Condio (obrigatria): Uma expresso numrica ou de sequncia que seja


igual a True ou False (condies Null so tratadas como False);

Instrues (opcional): Uma instruo ou um conjunto de instrues que


sero executadas repetidamente enquanto Condio for igual a True.

possvel aninhar loops While...Wend; cada instruo


Wend corresponde instruo While mais recente.

4.7.For...Next e For Each...Next


O loop For...Next utilizado para definir a quantidade de vezes que um conjunto
de instrues ser repetido. Esse loop precisa de um contador (uma varivel
numrica) com um valor inicial, um valor final e um passo, como na sintaxe a
seguir:

For Contador = Valor inicial To Valor final Step Valor passo


Instrues
Next

172
Estruturas de deciso e repetio
4
Cada vez que o bloco de cdigo entre as instrues For e Next executado, o
contador, que iniciado com o valor definido como inicial, incrementado pelo
valor definido como passo. O loop executado quantas vezes forem necessrias
para que o contador atinja seu valor final. Para exemplificar, se o valor inicial
10, o valor final 20 e o incremento 2, as instrues do bloco entre o contador
e a instruo Next sero executadas 6 vezes:

Sub for_next()
Dim n As Byte
For n = 10 To 20 Step 2
MsgBox n
Next
End Sub

O valor inicial pode ser qualquer nmero, negativo ou


positivo, inclusive 0, e o passo assume o valor 1 caso no
seja especificado um valor diferente.

173
Excel VBA - Mdulo I

Para contar o total vendido do curso Excel VBA, consideremos o exemplo a


seguir, com a utilizao do lao For...Next:

Sub Vendas_For()
Dim tot, lin As Integer
Range(b2).Select
executar da linha 2 at 10
For lin = 2 To 10
Cells(lin, 2).Select
If ActiveCell = Excel VBA Then
tot = tot + ActiveCell.Offset(0, 1)
End If
Next
MsgBox Total Vendido (Excel VBA) = & tot
End Sub

Foi utilizada a varivel lin dentro do comando Cells para


efetuar o deslocamento das linhas a cada passagem pelo
lao For..Next.

174
Estruturas de deciso e repetio
4
O loop For Each...Next funciona da mesma forma que o loop For...Next, porm,
o nmero de vezes que as instrues sero executadas determinado pelo
nmero de elementos de uma matriz ou coleo (como uma coleo de pastas
de trabalho, clulas ou planilhas). A sintaxe desse loop a seguinte:

For Each Elemento In Grupo


Instrues
Exit For
Instrues
Next

Onde:

Elemento (obrigatria): Varivel que far a iterao dos elementos de uma


matriz, caso em que deve ser obrigatoriamente do tipo Variant; ou coleo,
caso em que pode ser uma varivel de objeto genrica ou especfica ou do
tipo Variant;

Grupo (obrigatria): O nome de uma matriz de objetos que no seja uma


matriz de tipos definidos pelo usurio; ou o nome de uma coleo;

Instrues (opcional): Uma instruo (ou um conjunto de instrues) para


ser executada em cada item de Grupo.

A instruo Exit For pode ser utilizada para interromper um loop em qualquer
ponto (normalmente utilizada aps a verificao de alguma condio), fazendo
com que a execuo continue a partir da linha abaixo de Next.

A instruo For...Each...Next no pode ser empregada com


uma matriz de tipos definidos pelo usurio. Isto porque, ao
utilizarmos matrizes, Elemento deve ser uma varivel do
tipo Variant, a qual no pode conter um tipo definido pelo
usurio.

175
Excel VBA - Mdulo I

Quando o loop inserido, todas as instrues do bloco so executadas para


o primeiro elemento de Grupo, em seguida para o segundo elemento e assim
sucessivamente. Quando no houver mais elementos em Grupo, a execuo
sai do loop e continua a partir da instruo abaixo da instruo Next. Vale
lembrar que o bloco For...Each s inserido se Grupo contiver pelo menos um
elemento.

possvel aninhar loops For...Each...Next, mas cada elemento do loop deve ser
exclusivo.

Caso a instruo Next no especifique Elemento, a execuo das instrues


continua, como se Elemento estivesse includo.

Um erro exibido quando uma instruo Next encontrada


antes da instruo For correspondente.

No exemplo adiante, a varivel denominada celula percorrer a regio (grupo)


de clulas, de B2 B10, verificando se o contedo contido na clula a palavra
Excel VBA. Caso a condio seja atendida, a cor interior da clula ser formatada
para vermelho. Podemos usar a mesma planilha dos exemplos anteriores.

Sub for_each()
Dim celula As Object
For Each celula In Range(B2:B10)
If celula.Value = Excel VBA Then
celula.Interior.ColorIndex = 3
End If
Next
End Sub

176
Estruturas de deciso e repetio
4
Veja o resultado:

Observe o exemplo para alterar a visualizao do zoom em todas as planilhas


do arquivo. O objeto a ser percorrido neste caso o Worksheets (planilhas).

Sub altera_zoom()
Dim plan As Object
varivel plan ir percorrer todas as planilhas
For Each plan In Worksheets
plan.Select
ActiveWindow.Zoom = 150
Next
End Sub

177
Excel VBA - Mdulo I

Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

As estruturas de deciso e repetio so utilizadas nos casos em que


necessrio alterar o fluxo normal de execuo das instrues, executando
apenas alguns procedimentos ou executando um mesmo procedimento
vrias vezes de acordo com condies pr-estabelecidas;

A instruo GoTo faz com que uma instruo especificada por um rtulo
de linha seja executada, ignorando outras possveis instrues no fluxo
normal dos procedimentos;

O operador And constri uma conjuno lgica, ou seja, para que o


resultado seja True, todas as condies devem ser verdadeiras. O operador
Or constri uma disjuno lgica, ou seja, para que o resultado seja True,
basta que uma das condies seja verdadeira;

A instruo Select Case permite criar um fluxo de tomada de deciso em que


uma nica expresso pode ser comparada com vrias outras expresses.
So executadas as instrues correspondentes ao Case que coincidir com
o valor da expresso;

A instruo Loop das estruturas Do...Loop, Do While...Loop e Do Until...


Loop utilizada para repetir a execuo de blocos de cdigo VBA por um
nmero de vezes determinado previamente ou pelo valor de uma varivel;

A estrutura While...Wend funciona da mesma forma que a estrutura Do


While...Loop, com a exceo de que o teste da condio deve ser feito
obrigatoriamente no incio;

O loop For...Next utilizado para definir a quantidade de vezes que um


conjunto de instrues ser repetido. Esse loop precisa de um contador
uma varivel numrica com um valor inicial, um valor final e um passo.

178
Estruturas de
deciso e repetio
4
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Que instruo utilizamos para executar comandos a partir de


determinada linha do cdigo?

a) InputBox

b) String

c) Loop

d) GoTo

e) MsgBox

2. Qual das alternativas a seguir contm uma instruo condicional?

a) If

b) Select Case

c) Do While

d) As alternativas A e B esto corretas.

e) As alternativas B e C esto corretas.

180
Estruturas de deciso e repetio
4
3. Que se entende por IF aninhado?

a) Quando inserimos um bloco IF dentro de outro.

b) Quando inserimos um bloco ELSE dentro de um bloco IF.

c) Quando uma expresso TRUE.

d) Quando inserimos um bloco GoTo dentro de outro.

e) Nenhuma das alternativas anteriores est correta.

4. Em qual estrutura usamos Condio / Instruo para condio


verdadeira e Condio / Instruo para condio Falsa?

a) IFENDIF

b) IFORENDIF

c) IFANDOR

d) IFAninhado

e) IFTHENELSEENDIF

181
Excel VBA - Mdulo I

5. Em que tipo de estrutura o comando LOOP utilizado?

a) Do while

b) If

c) Do Until

d) As alternativas A e C esto corretas.

e) As alternativas A e B esto corretas.

182
Estruturas de 4
deciso e repetio
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Elaborando macros com a utilizao de Estruturas Condicionais
(desenvolvimento lgico)

1. Desenvolva as macros Status01, Status02 e Status03 com base no exemplo


da planilha a seguir:

Macro Status01

Esta macro dever realizar as seguintes aes:

Aceitar um valor em uma caixa de entrada, o qual dever ser inserido


na clula D9;

Na clula C4, escrever a informao de acordo com as seguintes


condies: Menor que 1000 - se o nmero for inferior a 1000; igual
a 1000 - se o nmero for 1000; maior que 1000 - se o nmero for
superior a 1000.

184
Estruturas de deciso e repetio
4
Macro Status02

Esta macro dever realizar as seguintes aes:

Aceitar um valor em uma caixa de entrada, o qual dever ser inserido


na clula D9;

Caso seja digitado um texto, exibir uma caixa de mensagem com a


informao Valor Invlido!! e encerrar a macro;

Na clula D4, exibir se o valor digitado par ou mpar.

Macro Status03

Esta macro dever realizar as seguintes aes:

Aceitar um valor em uma caixa de entrada, o qual dever ser inserido


na clula D9;

Na clula E4, exibir a palavra TEXTO caso o valor digitado seja um


texto, ou a palavra NMERO, caso seja digitado um valor numrico.

185
Excel VBA - Mdulo I

Laboratrio 2
A Desenvolvendo cdigos com a utilizao de laos (Do While, Do Until ou
For), atravs dos conceitos de macro relativa, com a utilizao do comando
Offset.

1. Desenvolva uma macro chamada Tabuada, que dever exibir, a partir da


clula D5, o valor da tabuada do nmero digitado na clula C2, conforme o
exemplo a seguir:

186
Estruturas de deciso e repetio
4

A macro dever selecionar e alterar a cor das clulas que estiverem nas linhas
pares. Ela poder ser feita com um destes trs laos:

For...Next;

Do While... Loop;

Do Until... Loop.

2. O clculo dever ser feito atravs de um boto que executar a macro Tabuada.

No exemplo acima, criamos trs botes, cada um


correspondente ao clculo da tabuada com laos de repetio
diferentes. Mas voc pode apenas criar um boto chamado
Tabuada que calcule com o cdigo que voc criou.

187
Excel VBA - Mdulo I

Laboratrio 3
A Utilizando a estrutura Do Until e a propriedade ColorIndex

1. Desenvolva uma macro chamada CORES:

Nas clulas da coluna A, devero ser exibidos os valores numricos que


representam as cores, utilizados pela propriedade ColorIndex;

Atribua, respectivamente, as cores de cada valor numrico nas clulas da


coluna B;

Utilize o lao Do Until...Loop.

Observemos o exemplo na planilha a seguir:

A propriedade ColorIndex aceita valores entre 0 e 56.

188
Funes

5
99 Funes matemticas;
99 Funes de data e hora;
99 Funes de tratamento de strings;
99 Funes de converso;
99 Utilizando funes de planilha do Excel;
99 Criando funes;
99 Utilizando funes em diversas pastas
de trabalho;
99 Assistente de Funo.
Excel VBA - Mdulo I

5.1.Introduo
Conheceremos, neste captulo, diversas funes que podemos utilizar no
VBA (matemticas, de data e hora, de tratamento de strings e de converso
de dados), alm dos procedimentos para utilizar funes da planilha e criar
funes personalizadas. Veremos, tambm, curiosidades sobre o Assistente de
Funo e suplementos.

5.2.Funes matemticas
As funes deste grupo realizam clculos matemticos. A prxima tabela exibe
a lista dessas funes, juntamente com os dados que elas retornam:

Funo Retorno
Abs O valor absoluto de um nmero.
Atn O arco tangente de um nmero.
Cos O cosseno de um ngulo.
O resultado de e (base dos logaritmos naturais) elevado
Exp
potncia de um nmero.
A parte inteira de um nmero. Para exemplificar, Fix(70.7)
Fix retorna 70 e Fix(-70.7) retorna 70 (retorna o primeiro inteiro
negativo maior ou igual ao nmero).
A parte inteira de um nmero. Para exemplificar, Int(70.7)
Int retorna 70 e Int(-70.7) retorna 71 (retorna o primeiro inteiro
negativo que seja menor ou igual ao nmero).
O logaritmo natural de um nmero, ou seja, o logaritmo na base
Log
e (constante equivalente a aproximadamente 2,718282).
Rnd Um nmero aleatrio entre 0 e 1.
1, -1 ou 0, de acordo com o sinal do nmero (positivo, negativo
Sgn ou 0, respectivamente). Para exemplificar, Sgn(70) retorna 1,
Sgn(-70) retorna -1 e Sgn(0) retorna 0.
Sin O seno de um ngulo.
A raiz quadrada de um nmero maior ou igual a zero. Para
Sqr exemplificar, Sqr(49) retorna 7, Sqr(81) retorna 9 e Sqr(0)
retorna 0.
Tan A tangente de um ngulo.

190
Funes
5
Consideremos o seguinte exemplo:

Sub FuncoesMatematicas()
MsgBox Valor absoluto: & Abs(-1)
MsgBox Arco tangente: & Atn(15)
MsgBox Cosseno: & Cos(90)
MsgBox Exponencial: & Exp(2)
MsgBox Inteiro1: & Fix(-50)
MsgBox Inteiro2: & Int(-50.985)
MsgBox Logaritmo = & Log(5)
MsgBox Aleatorio: & Rnd(1)
MsgBox Tipo Num: & Sgn(-10)
MsgBox Seno: & Sin(90)
MsgBox Raiz: & Sqr(49)
End Sub

5.3.Funes de data e hora


As funes de data e hora permitem manipular esse tipo de dado, realizando
operaes como extrair o dia, o ms ou o ano de uma data e obter a data ou o
horrio atual do computador.

As datas so tratadas como nmeros inteiros pelo VBA. Dentro do intervalo


permitido de 01/01/100 a 31/12/9999, a data 30/12/1899 representada
pelo nmero 1, e as datas anteriores (29/12/1899, 28/12/1899 e assim por
diante) so representadas por nmeros inteiros negativos (-1, -2...). As datas
posteriores a 30/12/1899 so representadas por nmeros inteiros positivos.

O fato de o VBA representar datas por nmeros inteiros


permite tambm realizar operaes de adio e subtrao
com esse tipo de dado, obtendo o nmero de dias
existentes em um intervalo de datas, por exemplo.

191
Excel VBA - Mdulo I

Funo Sintaxe Retorno


A data atual, de acordo com
o calendrio do computador.
Date Date
Tambm pode ser utilizada para
definir a data do computador.
O dia de uma data,
Day Day(date) representado por um nmero
inteiro entre 1 e 31.
O ms de uma data,
Month Month(date) representado por um nmero
inteiro entre 1 e 12.
O ano de uma data,
Year Year(date) representado por um nmero
inteiro.
A data e o horrio atuais,
Now Now de acordo com o relgio do
computador.
A data composta por ano, ms
DateSerial DataSerial(year,month,day)
e dia especificados.
A data representada por uma
DateValue DataValue(date)
string (texto).
O dia da semana de uma data,
Weekday
Weekday representado por um nmero
(date,[firstdayofweek])
de 1 a 7.
O nome de um dia da semana
WeekdayName(weekday, (weekday o nmero do dia
WeekdayName
abbreviate, firstdayofweek) da semana cujo nome se deseja
obter).
MonthName(month[,
MonthName O nome de um ms.
abbreviate])
A hora de um horrio,
Hour Hour(time) representada por um nmero
inteiro entre 0 e 23.
Os minutos de um horrio,
Minute Minute(time) representados por um nmero
inteiro entre 0 e 59.

192
Funes
5
Funo Sintaxe Retorno
Os segundos de um horrio,
Second Second(time) representados por um nmero
inteiro entre 0 e 59.
O horrio atual, de acordo
com o relgio do computador.
Time Time Tambm pode ser utilizada
para definir o horrio do
computador.
A quantidade de segundos
Timer Timer
contados a partir da meia-noite.
Um horrio a partir de um valor
TimeValue TimeValue(time)
de texto.
Um horrio composto pela
TimeSerial(hour, minute,
TimeSerial hora, minutos e segundos
second)
especificados.

Neste contexto, consideremos o seguinte exemplo:

Sub Exibedata()
Range(a1) = Date
Range(a2) = Day(Date)
Range(a3) = Month(Date)
Range(a4) = Year(Date)
End Sub

Supondo que a data do sistema operacional seja 25/07/2013, ao executar o


cdigo, sero exibidos os seguintes dados na planilha:

193
Excel VBA - Mdulo I

Observemos o exemplo logo adiante, em que ser exibida a idade de acordo


com a data de nascimento digitada em uma funo Inputbox. Neste caso,
utilizamos o clculo com datas:

Sub idade()
Dim nascimento As Date
Dim idade As Double
nascimento = InputBox(Digite sua data de nascimento)
idade = Int((Date - nascimento) / 365)
MsgBox Voc tem & idade & anos.
End Sub

Como j visto, uma data sempre representada por um valor numrico, ou


seja, ao subtrairmos a data de nascimento da data atual, retornado tambm
um valor numrico que, neste caso, poderia representar os dias vividos.

Imaginando que a data atual seja 06/04/2008 e a data de nascimento 17/07/2000,


a subtrao entre as duas datas ser igual a 2820 (dias de diferena entre a data
atual e nascimento). Ento, dividimos por 365 para retornar a quantidade em
anos, que resulta em 7,726027.... Como precisamos desprezar os decimais e
utilizar apenas o valor inteiro do resultado, utilizamos a funo Int.

Ao dividir esse resultado por 365, dependendo da data


indicada, talvez seja exibido um valor em decimais. Nesta
situao, pode-se utilizar a funo Int para retornar o
valor inteiro.

194
Funes
5
Para as funes Weekday e WeekdayName, firstdayofweek representa o
primeiro dia da semana. Caso no seja especificado, o valor 1 corresponder
ao domingo e o valor 7 ao sbado.

Sub Dia_Semana()
Dim Dia_Data As Date
Dia_Data = 10/05/2005
MsgBox Weekday(Dia_Data)
MsgBox WeekdayName(Weekday(Dia_Data))
End Sub

No exemplo anterior, primeiramente, ser exibido o valor 3 na caixa de


mensagem. Em uma segunda caixa, ser exibida a palavra tera-feira.

O argumento abbreviate pode assumir o valor False (padro), ou True,


resultando em strings no abreviadas ou abreviadas, respectivamente (como
Domingo ou Dom).

MsgBox WeekdayName(Weekday(Dia_Data), True)

Devemos utilizar os comandos DateSerial e TimeSerial caso queiramos indicar


uma data ou um horrio partindo de valores indicados.

Este exemplo insere na clula A1 o valor 18:10:32:

Range(A1) = TimeSerial(18,10,32)

Este exemplo, por sua vez, insere na clula A2 o valor 10/05/2000:

Range(A2) = DateSerial(2000, 5, 10)

195
Excel VBA - Mdulo I

Para preencher os itens em uma planilha, podemos utilizar o seguinte cdigo:

Sub Preenchimento()
Range(a1) = Data do Sistema: & Date
Range(a2) = Dia: & Day(Date)
Range(a3) = Ms: & Month(Date)
Range(a4) = Ano: & Year(Date)
Range(b2) = WeekdayName(Weekday(Date))
Range(b3) = MonthName(Month(Date))
Range(d1) = Horrio do Sistema: & Now
Range(d2) = Hora: & Hour(Now)
Range(d3) = Minuto: & Minute(Now)
Range(d4) = Segundo: & Second(Now)
Columns(a:d).AutoFit
End Sub

O cdigo a seguir exibir uma mensagem ao usurio dependendo do horrio


do sistema operacional. A funo Hour est retornando os dois dgitos que
representam a hora do horrio do sistema operacional.

Sub Mensagem_Hora()
Select Case Hour(Now)
Case Is < 13
MsgBox Bom Dia!
Case Is < 18
MsgBox Boa Tarde!
Case Else
MsgBox Boa Noite
End Select
End Sub

196
Funes
5
Podemos utilizar o seguinte cdigo para inserir o horrio na clula selecionada e
o minuto na clula ao lado, de acordo com o horrio atual do sistema operacional:

Activecell = Hour(Now)
Activecell.offset(0,1) = Minute(Now)

Suponhamos que seja preciso calcular o tempo (diferena) entre o incio de uma
ocorrncia e o horrio atual. Para isso, utilizamos o seguinte cdigo:

Sub Dif_Horas()
Dim Inicial, Diferenca As Date
Inicial = 8:30
Diferenca = CDate(Time) - CDate(Inicial)
MsgBox Diferenca
End Sub

O horrio inicial foi definido como 08:30. Caso o horrio do sistema operacional
no momento da execuo seja 11:32, aparecer a seguinte mensagem:

Foi utilizada a funo CDate para que o VBA converta


a varivel Inicial e o horrio do sistema (TIME) como
Data/Hora antes de efetuar o clculo da diferena.

197
Excel VBA - Mdulo I

5.4.Funes de tratamento de strings


Existe um conjunto de funes utilizadas para trabalhar com texto e executar
operaes como converter um texto para letras maisculas ou minsculas e
extrair sequncias de caracteres a partir de uma determinada posio do texto.
Algumas dessas funes so descritas a seguir:

Funo Descrio Sintaxe


Converte todos os
LCase(string), em que string
Lcase caracteres de uma string
define a cadeia de texto.
para letras minsculas.
Left(string, length), em que
string define a cadeia de texto
Extrai uma quantidade
e length define a quantidade
especificada de caracteres
Left de caracteres extrados
de um texto, da esquerda
(caso seja definido como
para a direita.
zero, a cadeia de texto ter
comprimento zero ()).
Len(expression), em que
Retorna a quantidade de
Len expression define a cadeia de
caracteres de uma string.
texto.
Remove espaos esquerda Ltrim (string), em que string
Ltrim
de uma string. define a cadeia de texto.
Mid(string, start[, length]),
Extrai uma quantidade
em que string define a cadeia
especificada de caracteres
de texto, start define a posio
Mid de um texto a partir de uma
do primeiro caractere extrado
determinada posio, da
e length define a quantidade
esquerda para a direita.
de caracteres extrados.
Right(string, length), em que
string define a cadeia de texto
Extrai uma quantidade
e length define a quantidade
especificada de caracteres
Right de caracteres extrados
de um texto, da direita para
(caso seja definido como
a esquerda.
zero, a cadeia de texto ter
comprimento zero ()).
Remove espaos direita de Rtrim (string), em que string
Rtrim
uma string. define a cadeia de texto.

198
Funes
5
Funo Descrio Sintaxe
Space(number), em que
Insere espaos em uma
Space number define a quantidade
string.
de espaos.
StrConv(string, conversion,
LCID), em que string define a
cadeia de texto e conversion
define o formato para o qual a
string ser convertida (1 para
caracteres maisculos, 2 para
caracteres minsculos, 3 para
Retorna um texto convertido
StrConv a primeira letra de cada palavra
em outro formato.
em maiscula e o restante em
minsculas e 64 para converter
para Unicode, utilizando a
pgina de cdigo padro do
sistema). LCID define o local e
o ID do sistema (normalmente
no especificado).
String(number, character),
Retorna uma cadeia de
em que number define
caracteres, repetidos um
String a quantidade de vezes e
determinado nmero de
character define o caractere
vezes.
que ser repetido.
Retorna uma string StrReverse(String), em que
StrReverse
invertida. string define a cadeia de texto.
Remove espaos esquerda Trim (string), em que string
Trim
e direita de uma string. define a cadeia de texto.
Converte todos os
UCase(string), em que string
Ucase caracteres de uma string
define a cadeia de texto.
para letras maisculas.

199
Excel VBA - Mdulo I

A partir de agora, apresentaremos exemplos utilizando algumas das funes


descritas:

UCase/LCase/StrConv

O procedimento adiante converte para formato maisculo todas as palavras


contidas na coluna A da planilha, enquanto no houver uma clula vazia:

Sub Maiusculo()
Range(a1).Select
Do Until ActiveCell =
ActiveCell = UCase(ActiveCell)
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Podemos utilizar a mesma estrutura de procedimento para deixar os


caracteres em formato minsculo, alterando apenas a linha de comando
que define que a clula ativa receber o contedo j existente em formato
minsculo:

ActiveCell = LCase(ActiveCell)

Para deixar apenas a primeira letra de cada palavra em formato maisculo


e as demais em minsculo, utilizamos o comando:

Activecell = StrConv(Activecell,3)

200
Funes
5
Left/Right/Mid

A partir de uma varivel denominada Curso, com o contedo Microsoft


Excel VBA, podemos extrair caracteres a partir da esquerda (funo Left),
da direita (funo Right) ou de qualquer parte do texto (funo Mid).

Sub Extrair_Texto()
Dim Texto As String
Texto = Microsoft Excel VBA
MsgBox Left(Texto, 9) & vbCrLf & _
Mid(Texto, 11, 5) & vbCrLf & _
Right(Texto, 3)
End Sub

1. Extrai 9 caracteres partindo da esquerda.


2. Extrai 5 caracteres a partir da posio 11.
3. Extrai 3 caracteres partindo da direita.

Observemos a seguinte planilha:

201
Excel VBA - Mdulo I

Na coluna A consta o descritivo dos programas, sendo necessrio inserir


na coluna B somente o nome do programa na linha correspondente,
desprezando a palavra Microsoft. Alm disso, o nome de cada programa
dever estar em formato maisculo:

Sub Curso()
Range(a2).Select
Do While ActiveCell <>
ActiveCell.Offset(0, 1) = UCase(Mid(ActiveCell, 11,
2000))
ActiveCell.Offset(1, 0).Select
Loop
End Sub

Por meio da funo Mid, foi indicada a extrao do texto a partir da posio
11 (neste caso, igual para todos) e determinada uma quantidade de at
2000 caracteres. Poderia ser indicada uma quantidade menor de caracteres,
baseando-se no exemplo da palavra Power Point, que a maior. Para isso,
definiramos como 11 a quantidade mxima.

202
Funes
5
Len

Segue exemplo para retornar a quantidade de caracteres de uma string.


Observemos que o espao tambm contado como um caractere:

Sub Quantidade_Caracteres()
Dim texto As String
texto = Microsoft Excel
MsgBox Quantidade: & Len(texto) & caracteres.
End Sub

Trim/LTrim/RTrim

No exemplo a seguir, utilizamos as funes Trim, LTrim e RTrim a fim de


extrair, respectivamente, os espaos posicionados no incio e fim de um
texto, somente os espaos esquerda (incio) ou somente os espaos
direita (final de um texto).

Sub Tirar_Espacos()
Dim texto, t_Trim, t_LTrim, t_RTrim As String
texto = Excel VBA
Range(a1) = texto
Range(a2) = Trim(texto)
Range(a3) = LTrim(texto)
Range(a4) = RTrim(texto)
End Sub

203
Excel VBA - Mdulo I

Space

A fim de inserir uma quantidade determinada de espaos, podemos usar o


seguinte cdigo:

Sub Insere_Espaco()
Dim Produto, Espacos As String
Dim Valor As Double
Produto = Impressora
Valor = 1150
Espacos = Space(8)
MsgBox Produto & Espacos & Valor
End Sub

String

Podemos empregar a funo String a fim de repetir um caractere vrias


vezes. Neste caso, o primeiro argumento o nmero de vezes que o
caractere ser repetido e o segundo argumento o prprio caractere, entre
aspas:

Sub Repetir()
Dim texto As String
texto = .
MsgBox Impressora & String(22, .) & R$ 1050,00
End Sub

204
Funes
5
StrReverse

A fim de obter o contedo inverso de uma varivel, podemos utilizar a


funo StrReverse:

Sub exemplo()
Dim Texto, Inverso as string
Texto = Casa
Inverso = StrReverse(Texto)
Msgbox Inverso
End Sub

5.5.Funes de converso
Utilizamos as funes de converso, listadas na prxima tabela, para converter
uma determinada expresso para um tipo de dado diferente do atual:

Funo Valor de retorno


CBool Boolean (True ou False)
CByte Byte
CCur Currency
CDate Date
CDbl Double
CDec Decimal
CInt Integer
CLng Long
CStr String
CSng Single
Cvar Variant

205
Excel VBA - Mdulo I

Para qualquer uma dessas funes, a sintaxe Funo(expression), em que


expression representa os dados que sero convertidos.

A funo Cdate, que converte uma expresso em data, muito utilizada para
converter dados inseridos em objetos InputBox e TextBox, que assumem por
padro todos os dados como texto (string).

Devido ao tipo de dado resultante da converso com as funes CInt e CLng,


as fraes so arredondadas.

5.6.Utilizando funes de planilha do Excel


Pertencente ao objeto Application, a propriedade WorksheetFunction permite
executar uma funo da planilha a partir do cdigo VBA, com exceo das
funes j existentes em VBA.

Para que o Excel reconhea a funo, necessrio escrev-la em ingls.


Observemos a seguinte sintaxe:

Application.WorksheetFunction.<Nome da funo>(<Argumentos
da funo>)

Podemos omitir Application ou WorksheetFunction. Assim, existem mais duas


sintaxes vlidas e que produzem o mesmo efeito:

WorksheetFunction.Nome da funo(Argumentos da funo)

Application.Nome da funo(Argumentos da funo)

206
Funes
5
Consideremos o seguinte exemplo e planilha:

Sub Funcao_Planilha()
MsgBox WorksheetFunction.Sum(Range(a1:a4))
End Sub

Vejamos a informao a ser exibida na caixa de mensagem:

No exemplo a seguir, utilizada a funo Romano(), sendo retornado na caixa


de mensagem o valor correspondente em algarismos romanos de um nmero
digitado na caixa de entrada:

Sub Conversao_Romanos()
Dim valor As Long
valor = InputBox(Digite o nmero)
MsgBox Application.WorksheetFunction.Roman(valor)
End Sub

207
Excel VBA - Mdulo I

Na planilha a seguir, necessrio que seja inserido, nas clulas da coluna D, o


descritivo de acordo com o tipo da contratao (1, 2, 3 ou 4). Com a utilizao da
funo Procv(), a macro ir buscar a informao do tipo na coluna H e retornar
o descritivo contido na coluna I.

A seguir, h um exemplo de utilizao da funo Procv():

Sub Altera_Tipo()
Dim tipo As Byte
Range(a2).Select
Do Until ActiveCell =
tipo = ActiveCell.Offset(0, 3)
ActiveCell.Offset(0, 3) = _
Application.WorksheetFunction.VLookup(tipo,
Range(H1:I5), 2, 0)
ActiveCell.Offset(1, 0).Select
Loop
End Sub

208
Funes
5
Aps a execuo da macro, teremos o seguinte resultado na coluna D:

Ao utilizar uma funo da planilha do Excel no cdigo


VBA, necessrio inserir todos os parmetros contidos na
sintaxe da funo.

209
Excel VBA - Mdulo I

5.7.Criando funes
Alm das funes do VBA e das funes de planilha do Excel, podemos criar
novas funes personalizadas para atender necessidades especficas. As funes
criadas podem ser utilizadas no VBA ou nas planilhas do Excel.

As funes podem ser criadas a partir da gerao de uma macro iniciada com a
instruo Function, seguida pelo nome da funo, seus argumentos e tipos de
dados, entre parnteses, como a sintaxe a seguir:

Function NomeFuno(Arg1 As tipo, Arg2 as tipo) As tipo

A seguinte funo define o texto Impacta Tecnologia como contedo da


varivel Nome_Emp e em seguida atribui clula A5:

Function Nome_Emp()
Nome_Emp = Impacta Tecnologia
Range(A5).Value = Nome_Emp
End Function

Caso seja necessrio executar a funo a partir da planilha do Excel, basta


digitar o seguinte em qualquer clula:

=Nome_Emp()

A funo a seguir requer dois parmetros (valores) que devero ser digitados.
Os valores esto representados por N1 e N2 do tipo Long, porm, o resultado
da funo do tipo Double, pois, caso N1=10 e N2=3, o resultado ser um
valor decimal.

Function dgeral(n1, n2 As Long) As Double


dgeral = n1 / n2
End Function

210
Funes
5
5.7.1.Utilizando as funes criadas
Executando funes a partir de um cdigo em VBA

Podemos executar a funo a partir de uma macro, em que o valor dos


argumentos poder ser fixo ou estar contido em uma varivel.

Observemos o exemplo, com a utilizao da funo dgeral(), em que os


argumentos so passados a partir de Inputbox:

Function dgeral(n1, n2 As Long) As Double


dgeral = n1 / n2
End Function

Sub Exemplo_Funcao()
Dim valor1, valor2 As Long
valor1 = InputBox(Digite o primeiro nmero)
valor2 = InputBox(Digite o segundo nmero)
If valor2 = 0 Then
MsgBox Valor Invalido, vbCritical
Exit Sub
End If
MsgBox dgeral(valor1, valor2)
End Sub

Executando funes a partir da planilha

Para utilizar a funo em uma clula, basta pressionar o sinal de igual (=)
seguido do nome da funo e dos argumentos que ela possuir. Os argumentos
podero ser valores fixos ou valores buscados de clulas especficas, de
acordo com os exemplos:

Argumento fixo

=dgeral(10;2)

211
Excel VBA - Mdulo I

Argumento buscando valor contido em clulas da planilha

=dgeral(A20;A21)

Tambm possvel utilizarmos a funo criada, executando-a a partir do


Assistente de Funo (fx). Como padro, as funes criadas no VBA ficam
na categoria Definida pelo usurio.

A funo deve ser finalizada com a instruo End Function.

5.8.Utilizando funes em diversas pastas


de trabalho
Executando a funo a partir de outra pasta de trabalho

Vamos imaginar que a funo dgeral() foi criada em uma pasta de trabalho
denominada funcao.xlsm. Nesse caso, a funo poder ser utilizada em
qualquer planilha dessa pasta de trabalho, e ser possvel digitar em
qualquer clula o seguinte exemplo:

=dgeral(10;2)

No entanto, ao digitarmos a instruo acima em outra pasta de trabalho,


o Excel no a reconhecer. Nesse caso, preciso referenciar o arquivo que
contm a funo.

necessrio manter o arquivo funcao.xlsm aberto e, em qualquer clula do


outro arquivo, digitar a instruo a seguir. Percebe-se, ento, a necessidade
de referenciar o arquivo que contm o cdigo da funo:

=funcao.xlsm!dgeral(10;2)

212
Funes
5

Criando um suplemento

Para que as funes criadas possam ser utilizadas nos demais arquivos,
podemos criar um arquivo como suplemento do Excel (.xlam), o qual ter
todas as funes. Depois disso, basta vincular esse suplemento ao aplicativo
Excel.

Observemos o procedimento a seguir:

1. Em um arquivo novo, insira dentro de um mdulo de VBA todas as funes


com seus respectivos cdigos;

2. Salve o arquivo como Suplemento do Excel (ser criado um arquivo com


a extenso .xlam).

Ao salvarmos um arquivo como suplemento, na caixa de


dilogo Salvar como, ser sugerido que o arquivo seja salvo
na pasta de Suplementos. No entanto, permitido salvar
em outro local.

Anexando o suplemento ao Excel

1. Clique no em Arquivo / Opes;

213
Excel VBA - Mdulo I

2. Clique na opo Suplementos do Excel e, em seguida, no boto Ir;

3. O nome do arquivo que criamos, aparecer na caixa de dilogo


Suplementos, marque a opo correspondente ao arquivo de suplemento
que voc criou, neste exemplo, Funo, e clique em Ok.

Para desativar o
suplemento, basta
desmarcar o item
desejado, contido na
janela Suplementos.

214
Funes
5

5.9.Assistente de Funo
Por meio do cdigo em VBA, possvel alterar o descritivo da funo e de seus
respectivos argumentos, os quais podero aparecer na janela Assistente de
Funo.

Conforme descrito anteriormente, como padro, as funes criadas em VBA


ficam na categoria Definida pelo Usurio. Porm, podemos criar uma nova
categoria dentro do assistente, deixando a funo dentro dela.

No exemplo a seguir, ao ser executada a macro Configurar_Assistente(), ser


definida em qual categoria a funo dgeral() ficar dentro do Assistente de
Funes, assim como a descrio da macro e seus argumentos.

215
Excel VBA - Mdulo I

Por meio da macro Configurar_Assistente(), executada a macro Reg_Funcao,


que tem por objetivo alterar as caractersticas no Assistente de Funo de
acordo com a verso do Excel, sendo 2013 ou verses anteriores. Somente
na verso 2010 e em diante podemos inserir texto independente para cada
argumento da funo, com a utilizao da matriz inserida dentro do item
ArgumentDescriptions.

Function dgeral(n1, n2 As Long) As Double


dgeral = n1 / n2
End Function

Sub Configurar_Assistente()
reg_funcao True
MsgBox Acesse o assistente de funo e olhe o resultado!
End Sub

Sub reg_funcao(ByVal registro As Boolean)


Const descr As String = Exibe o resultado da diviso
entre dois nmeros
If registro Then
#If VBA7 Then
Verso 2010 e 2013
Excel.Application.MacroOptions dgeral, descr, _
Category:=Nova_Cat, _
ArgumentDescriptions:=Array(Insira o primeiro
nmero , _
Insira o Segundo nmero.)
#Else
verso 2007 ou anterior
Excel.Application.MacroOptions dgeral, descr,
_ Category:=Nova_Cat
#End If
Else
cdigo padro para verses anteriores a 2010
Excel.Application.MacroOptions dgeral, Empty,
Category:=Empty
End If
End Sub

216
Funes
5

Bloco #if...#else#endif

Essa estrutura, que possui comportamento similar estrutura condicional


If...Then...Else, utilizada para compilar condicionalmente o cdigo VBA
em plataformas diferentes.

217
Excel VBA - Mdulo I

Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

O VBA oferece um grupo de funes que realizam operaes matemticas.


As funes Cos, Fix e Sqr, entre outras, fazem parte desse grupo;

As datas so tratadas como nmeros inteiros pelo VBA, o que nos permite
tambm realizar operaes de adio e subtrao com esse tipo de dado,
obtendo o nmero de dias existentes em um intervalo de datas, por exemplo;

As funes de tratamento de string permitem trabalhar com texto e executar


operaes como converter um texto para letras maisculas ou minsculas;

Para qualquer funo de converso, a sintaxe Funo(expression), em


que expression representa os dados que sero convertidos;

As funes de planilha podem ser inseridas por meio do objeto


WorksheetFunction, que faz parte do objeto Application;

Podemos criar funes a partir da gerao de uma macro iniciada com a


instruo Function, seguida pelo nome da funo, seus argumentos e tipos
de dados, entre parnteses.

218
Funes
5
Teste seus conhecimentos
Excel VBA - Mdulo I

1. A clula B4 contm o valor -5. Para obtermos o valor positivo do


nmero contido nessa clula, que funo devemos utilizar?

a) sen

b) exp

c) cos

d) abs

e) sqr

2. Sabendo-se que o valor da clula G10 Pedro Toledo, qual o


comando utilizado para exibir apenas o nome Pedro?

a) Msgbox Right(Pedro,5)

b) Msgbox Left(Range(g10),5)

c) Msgbox Mid(Pedro Toledo,5,5)

d) Msgbox Right(Range(g10),6)

e) Msgbox Len(Range(g10))

220
Funes
5
3. Para exibir na clula selecionada o dia da semana da data de hoje,
que comando utilizamos?

a) Debug.print now

b) Activecell.date

c) Activecell = dayweek(hoje())

d) Activecell = weekdayname(weekday(date))

e) Nenhuma das alternativas anteriores est correta.

4. Qual a finalidade da funo len?

a) Transformar o texto em letras maisculas.

b) Deixar somente a primeira letra do texto maiscula.

c) Retornar a quantidade de caracteres de uma string.

d) Remover espaos esquerda de um texto.

e) Nenhuma das alternativas anteriores est correta.

221
Excel VBA - Mdulo I

5. Qual das alternativas a seguir contm apenas funes de texto?

a) LCase, String, Mid.

b) CDate, Mid, Day.

c) Month, NPer, Hour.

d) StrReverse, Format, Now.

e) Nenhuma das alternativas anteriores est correta.

222
Funes
5
Mos obra!
Excel VBA - Mdulo I

Laboratrio1
A Trabalhando com funes de texto e estrutura Do While

1. Com base nas informaes da planilha a seguir, crie uma macro denominada
Produto para escrever nas clulas da coluna B somente o nome dos produtos,
desprezando o cdigo. Para padronizar o texto, deixe a primeira letra de cada
produto maiscula.

224
Formulrios
(UserForms)
6
99 Importncia dos formulrios;
99 Criao de formulrios;
99 Insero de controles;
99 Configuraes de propriedades de controles;
99 Configuraes de aparncia dos controles;
99 Aplicao de cdigos aos controles;
99 Exibio de formulrios.
Excel VBA - Mdulo I

6.1.Importncia dos formulrios


O Visual Basic utiliza o objeto UserForm como interface entre os usurios e
o computador. O objeto UserForm, tambm conhecido como formulrio,
apresenta-se para o usurio como uma caixa de dilogo que pode incluir
controles diversos, como espaos para a insero de texto, botes (como OK
ou Cancelar, entre outros), imagens e caixas de seleo. Todos os controles
podem ser associados a aes especficas.

6.2.Criando formulrios
To importante quanto criar de fato o formulrio o processo de seu
planejamento. Os formulrios so interfaces grficas do usurio (ou GUI,
Graphical User Interface), por isso, sua aparncia, instrues e organizao de
seus elementos devem ser cuidadosamente planejadas para que eles possam
ser utilizados de forma simples e eficiente pelos usurios da aplicao.

Para criar um formulrio, devemos, no Editor VBE, acessar o menu Inserir e,


ento, clicar na opo UserForm. Vale ressaltar que um objeto UserForm,
ilustrado na imagem seguinte, contm um nico formulrio.

226
Formulrios (UserForms)
6
Ao inserir o primeiro UseForm tambm aberta a Caixa de ferramentas, na qual
dispomos de controles que podem ser adicionados aos formulrios. Falaremos
mais sobre ela adiante.

Caixa de
ferramentas

Formulrio

Em seguida, devemos utilizar os prximos passos, que sero abordados


detalhadamente nos tpicos deste captulo:

1. Adicione os controles necessrios ao UserForm, como botes e caixas de


texto;

2. Modifique as propriedades dos controles e do UserForm, utilizando a janela


Properties;

3. Escreva procedimentos destinados ao gerenciamento de eventos para os


controles, como macros que sero executadas quando botes forem clicados;

4. Escreva, em um mdulo VBA, um procedimento que exiba o formulrio criado


para o usurio.

227
Excel VBA - Mdulo I

6.2.1.Inserindo controles em um formulrio


Inicialmente, todos os formulrios criados so vazios, ou seja, no apresentam
controles como botes, caixas de texto ou caixas de opes. Todos os controles
devem ser inseridos por meio da Caixa de ferramentas, exibida a seguir:

Grande parte dos controles da Caixa de ferramentas


semelhante aos controles da Barra de ferramentas
Formulrios do Excel.

Para inserir um controle, devemos clicar sobre o mesmo e arrast-lo at o ponto


desejado do formulrio. O tamanho do controle pode ser alterado por meio da
janela de propriedades, arrastando-se as alas de edio (da mesma forma que
redimensionamos objetos de desenho do Windows) ou por cdigo em tempo
de execuo.

228
Formulrios (UserForms)
6
6.2.1.1. Caixa de ferramentas

Conheceremos, a seguir, os controles que podem ser inseridos nos formulrios


a partir da Caixa de ferramentas:

Label (rtulo): O controle Label, mostrado a seguir, utilizado para exibir


um texto no formulrio:

TextBox (caixa de texto): O controle TextBox, exibido a seguir, cria uma


caixa de texto que permite a insero de texto pelo usurio:

ComboBox (caixa de combinao): Este controle, exibido a seguir,


similar ao ListBox, com a diferena de que exibe apenas um item por vez,
apresentando-se como uma caixa drop-down, e permite a insero de um
valor diferente dos que a lista apresenta:

Podemos utilizar o mtodo AddItem para adicionar itens ao


controle, caso a lista de itens no esteja disponvel em uma
planilha.

229
Excel VBA - Mdulo I

ListBox (caixa de listagem): O controle ListBox, exibido a seguir, permite


que o usurio selecione um ou mais itens de uma lista:

CheckBox (caixa de seleo): Este controle utilizado para obter escolhas


binrias, como verdadeiro ou falso e sim ou no. A figura a seguir exibe
o controle CheckBox:

OptionButton (boto de opo): O controle OptionButton, exibido a seguir,


apresenta ao usurio um grupo de dois ou mais itens, dentre os quais um
pode ser selecionado. Os controles OptionButton podem ser agrupados
por meio da propriedade GroupName ou podem ser colocados dentro de
um mesmo controle Frame;

ToggleButton (boto de ativao): Este controle apresenta-se na forma de


um boto que, quando clicado, alterna entre os estados ativado (True),
cuja aparncia de um boto pressionado, e desativado (False), cuja
aparncia de um boto no pressionado. Adiante, temos uma imagem do
ToggleButton:

Frame (moldura): O controle Frame utilizado para organizar outros


controles, reunindo grupos lgicos ou apenas organizando visualmente os
elementos do formulrio. Este controle exibido na prxima imagem:

230
Formulrios (UserForms)
6
CommandButton (boto de comando): O controle CommandButton, exibido
a seguir, apresenta-se para o usurio como um boto que pode ser clicado.
Este controle utilizado com procedimentos que manipulam eventos, que
so executados quando o boto clicado. Ao clicarmos neste controle,
uma macro armazenada na janela Cdigo do UserForm executada. O
nome dessa macro deve ser composto pelo nome do boto seguido de uma
sublinha (underline) e da palavra Click, por exemplo, Abrir_Click;

TabStrip (faixa de tabulao): O controle TabStrip exibe guias no formulrio.


Este controle, exibido a seguir, semelhante ao controle MultiPage, porm
sua utilizao mais complexa:

MultiPage (multipgina): Este controle utilizado para criar caixas de


dilogo com guias, como exibido na prxima imagem. O padro que o
controle apresente duas guias, mas podemos inserir outras clicando com o
boto direito do mouse sobre uma guia existente e selecionando a opo
New Page do menu de contexto;

ScrollBar (barra de rolagem): O controle ScrollBar, exibido a seguir,


semelhante ao SpinButton, com a diferena de que permite que o usurio
arraste o boto do controle para aumentar ou diminuir os valores com
incrementos maiores. Este controle, normalmente, utilizado quando existe
a necessidade de o usurio especificar um valor dentro de um intervalo de
valores possveis;

231
Excel VBA - Mdulo I

SpinButton (boto de rotao): O controle SpinButton apresenta ao usurio


duas setas, uma apontando para cima e outra para baixo, as quais aumentam
ou diminuem um valor quando clicadas. A prxima imagem exibe o controle
SpinButton:

Image (imagem): O controle Image utilizado para exibir imagens no


formulrio, como fotos ou logotipos, assim como ilustrado na prxima
imagem. As imagens dos controles Image so armazenadas junto com a
pasta de trabalho. Por um lado, isso traz a vantagem de no ser necessrio
enviar arquivos adicionais quando compartilhamos a pasta de trabalho com
algum; por outro lado, o tamanho do arquivo da pasta de trabalho pode
aumentar muito. recomendvel, portanto, utilizarmos imagens pequenas.

Para inserir um clip-art no formulrio, devemos


primeiramente inseri-lo em uma planilha e, ento,
copi-lo e col-lo no formulrio.

232
Formulrios (UserForms)
6
6.2.2.Configurando as propriedades dos
controles
O objeto UserForm e cada um dos controles que podem ser inseridos em um
formulrio possuem propriedades diversas que, de acordo com o valor definido,
fazem com que os controles apresentem uma aparncia ou comportamento
especfico. Essas propriedades podem ser visualizadas e editadas por meio
da janela de propriedades do VBE, exibida na prxima imagem. importante
salientar que essa janela exibe as propriedades do controle selecionado
atualmente no formulrio.

Caso a janela de propriedades no esteja visvel, basta


pressionar a tecla F4, ou acessar o menu Exibir e clicar
na opo Janela Propriedades.

233
Excel VBA - Mdulo I

As principais propriedades dos controles de formulrios esto descritas na


prxima tabela. importante destacar que essas propriedades variam de controle
para controle, ou seja, no esto presentes, obrigatoriamente, em todos eles,
apesar de alguns controles possurem propriedades comuns.

Propriedade Descrio
Define uma tecla que acessa o controle quando
Accelerator pressionada em conjunto com a tecla ALT, por
exemplo, ALT+L.
Quando definida como True, faz com que o controle
seja automaticamente redimensionado de acordo com
AutoSize
a largura do texto que inserido. Quando definida
como False, a largura do controle fixa.
Quando definida como True, ativa a ocorrncia da
tabulao automtica para o prximo controle sempre
AutoTab que o nmero mximo de caracteres permitido para
o controle for inserido. Quando definida como False,
no ocorre tabulao.
Quando definida como True, as palavras so
consideradas unidades bsicas se o usurio estender
uma seleo (ao colocar o ponto de insero no
AutoWordSelect
meio de uma palavra e arrastar, toda a palavra
ser selecionada). Quando definida como False, os
caracteres so tomados como unidades bsicas.
BackColor Define a cor de preenchimento do controle.
O valor 1 define o plano de fundo como opaco, e o
BackStyle valor 0 define o plano de fundo como transparente,
caso em que a propriedade BackColor ser ignorada.
Define a cor da borda do controle. Para a visualizao
BorderColor da borda, a propriedade BorderStyle dever ser
definida com o valor 1.
O valor 1 define uma borda simples para o controle, e
BorderStyle o valor 0 faz com que o controle no possua bordas,
caso em que a propriedade BorderColor ser ignorada.
Quando o controle possui vrias colunas, indica a
BoundColumn
coluna que contm os dados que sero armazenados.

234
Formulrios (UserForms)
6
Propriedade Descrio
Quando definido como True, faz com que o controle
Cancel assuma a funo do boto Cancelar. Quando definido
como False, o controle no assume essa funo.
Define o rtulo do controle, ou seja, o texto que
Caption
exibido para o usurio.
Esta uma propriedade utilizada nos controles
ComboBox e ListBox. Quando definida como 0, o
ColumnCount controle no exibe nenhuma coluna da lista. Quando
definida como -1, todas as colunas da lista so exibidas
pelo controle.
Especifica a clula que armazena ou define o valor do
controle. A utilizao da propriedade ControlSource
em controles SpinButton deve ser evitada em planilhas
ControlSource
que levam muito tempo para serem calculadas, j que
essa propriedade faz com que toda a planilha seja
recalculada a cada alterao.
Define um texto exibido sempre que o mouse apontar
para o controle, como um comentrio.
Quando definida como True, o controle passa a
Default assumir a funo de boto de comando padro do
formulrio, podendo ser acessado com a tecla ENTER.
Quando definida como True, o controle habilitado,
Enabled ou seja, pode receber foco. Quando definida como
False, o controle desabilitado.
Font Define o formato da fonte para o texto do controle.
ForeColor Define a cor do texto do controle.
Define um nome de grupo para o controle. Os
controles que possuem o mesmo valor para essa
GroupName propriedade so associados, formando grupos. Caso
essa propriedade no seja definida, todos os controles
faro parte de um s grupo.
Define a largura do controle, utilizando pontos (cada
Height
ponto igual a 0,0353 cm).

235
Excel VBA - Mdulo I

Propriedade Descrio
Quando definida como True, faz com que o texto do
controle perca o foco, ou seja, deixe de ser selecionado
HideSelection quando o usurio faz a seleo de outro controle.
Quando definida como False, o texto mantm o foco
mesmo aps outro controle ser selecionado.
Quando definida como True, faz com que o controle
seja automaticamente redimensionado de acordo
com a altura do texto, ou seja, a quantidade de linhas
que so inseridas. Quando definida como False, a
altura do controle fixa. importante ressaltar que
IntegralHeight
ao definirmos a propriedade IntegralHeight como
True, o Visual Basic ajustar a altura do controle para
que a ltima entrada possa ser visualizada por inteiro.
Assim, possvel que a altura do controle exibido ao
usurio seja diferente da altura que definimos.
Define o valor que ser incrementado ou decrementado
LargeChange a cada clique esquerda ou direita do boto de um
controle ScrollBar.
Define a posio do controle em relao borda
Left
esquerda do controle que o contm.
Define quantas linhas sero exibidas pelo controle.
Caso o controle possua uma quantidade de itens
ListRows
maior que o nmero definido nesta propriedade, ser
exibida uma barra de rolagem.
ListStyle Define a aparncia dos itens exibidos pelo controle.
Quando definida como True, o controle bloqueado,
Locked no aceitando edies. Quando definida como False,
o controle pode ser editado normalmente.

236
Formulrios (UserForms)
6
Propriedade Descrio
Define como feita a pesquisa enquanto o usurio
digita um valor no controle:

Quando definida como 0, sero exibidas ao


usurio as primeiras palavras da lista que sejam
iniciadas com cada letra digitada, uma de cada
vez: em uma lista com os Estados brasileiros,
por exemplo, um usurio que deseje digitar
Pernambuco encontrar a seguinte situao: ao
digitar P, ser exibido Par; ao digitar o E, ser
exibido Esprito Santo; e ao digitar o R ser
MatchEntry
exibido Rio de Janeiro;

Quando definida como 1, a pesquisa considera a


sequncia de caracteres digitados pelo usurio:
ao digitar A, ser exibido Acre; em seguida, se
o usurio digitar L, ser exibido Alagoas, e se
digitar M ser exibido Amap;

Quando definida como 2, no h pesquisa; o


controle exibir apenas os caracteres digitados
pelo usurio.
Quando definida como True, no aceita entradas que
no correspondam exatamente a algum item da lista.
MatchRequired Quando definida como False, permite que o usurio
insira qualquer sequncia de caracteres, mesmo que
no corresponda a nenhum item da lista.
Define o valor mximo aceito pelo controle. muito
Max
utilizado nos controles SpinButton e ScrollBar.
Define o nmero de caracteres que podem ser
MaxLenght
inseridos no controle.
Define o valor mnimo aceito pelo controle. muito
Min
utilizado nos controles SpinButton e ScrollBar.

237
Excel VBA - Mdulo I

Propriedade Descrio
Define um cone personalizado para o ponteiro do
mouse, exibido quando este for posicionado sobre o
controle. O estilo do ponteiro pode ser indicado por
meio da pasta que contm os ponteiros de mouse,
MouseIcon
a qual est localizada dentro da pasta Windows.
Para utilizar esta propriedade, necessrio que a
propriedade MousePointer esteja definida com o
valor 99.
Define um cone para o ponteiro do mouse, exibido
quando este for posicionado sobre o controle. O valor
MousePointer
desta propriedade pode ser um nmero de 0 a 15 ou
99.
Quando definida como True, faz com que o controle
MultiLine exiba o texto em vrias linhas. Quando definida como
False, o texto exibido em uma nica linha.
Quando definida como 1 ou 2, permite que o usurio
selecione mais de um item da lista exibida pelo
controle. Vale salientar que, com isso, no possvel
MultiSelect
especificar uma propriedade ControlSource. Para
definir os itens que sero selecionados, necessrio
escrever uma macro.
Define um nome utilizado para fazer referncias ao
controle nos procedimentos. recomendvel adotar
um padro para nomear os controles, para que sua
Name identificao e a manuteno do cdigo sejam mais
simples. Podemos, por exemplo, utilizar prefixos que
identifiquem o tipo de controle, como txtNomeCurso
e imgFotoAluno.
Define o caractere que ser exibido no lugar de cada
PasswordChar caractere digitado no controle. Esta propriedade
utilizada em campos de senha, por exemplo.
Picture Define uma figura para ser exibida no controle.
Define a forma como uma imagem ser exibida no
PictureSizeMode formulrio quando os tamanhos do controle e da
imagem no forem correspondentes.

238
Formulrios (UserForms)
6
Propriedade Descrio
Define o intervalo de clulas onde esto armazenados
RowSource
os itens que so exibidos no controle.
De acordo com o valor, define a presena de barras
de rolagem no controle: nenhuma barra de rolagem
ScrollBars
(0), apenas a barra de rolagem horizontal (1), apenas
a barra de rolagem vertical (2) ou ambas (3).
Define o valor do incremento do controle (utilizado
SmallChange
nos controles SpinButton e ScrollBar).
Define o local de origem dos dados exibidos pelo
Source
controle, como um intervalo de clulas.
Utiliza valores de 0 a 6 para definir como o controle
SpecialEffect
ser apresentado.
Quando definida como 2, no aceita entradas que
no correspondam exatamente a algum item da lista.
Style Quando definida como 0, permite que o usurio insira
qualquer sequncia de caracteres, mesmo que no
corresponda a nenhum item da lista.
Determina qual a posio do controle na ordem de
tabulao. A tabulao (atravs da tecla TAB) muda o
foco de um controle para outro em ordem crescente,
TabIndex de acordo com o nmero que cada controle possui
para esta propriedade. Tambm possvel realizar o
controle de tabulao utilizando a opo Ordem de
Tabulao contida no menu Exibir do Editor VBE.
Quando definida como True, o controle permite que
o usurio insira tabulaes no texto digitado. Quando
TabKeyBehavior definida como False, pressionar a tecla TAB mover o
foco para o prximo controle de acordo com a ordem
de tabulao.
Quando definida como True, permite que o controle
TabStop receba foco com a tecla TAB. Quando definida como
False, o controle no recebe foco.
Text Define ou retorna o texto do controle.
Define o alinhamento esquerda (1), centralizado (2)
TextAlign
ou direita (3) para o texto do controle.

239
Excel VBA - Mdulo I

Propriedade Descrio
Define a coluna do controle que ser exibida ao
TextColumn
usurio.
Define a posio do controle em relao borda
Top
superior do controle que o contm.
Esta propriedade varia de acordo com alguns controles:

Para os controles ComboBox e ListBox, a


propriedade Value define um texto para o item
selecionado pelo usurio;

Para o controle CheckBox, a propriedade Value


pode ser definida como True, apresentando uma
marca de checagem no controle, ou como False,
apresentando o controle sem essa marca;
Value
Para o boto OptionButton, a propriedade pode
fazer com que o boto aparente estar selecionado
(True), ou no (False);

Para o controle MultiPage, esta propriedade


define qual guia exibida (0 exibe a primeira guia,
1 exibe a segunda, 2 exibe a terceira, e assim
sucessivamente);

Para os controles ScrollBar e SpinButton, esta


propriedade define o valor atual do controle.
Quando definida como True, determina que o controle
Visible seja visvel no formulrio. Quando definida como
False, o controle oculto.
Width Define a largura do controle, em pontos.
Quando definida como True, o texto do controle
apresenta quebras automticas de linha. Quando
WordWrap
definida como False, as quebras de linha so
desativadas.

240
Formulrios (UserForms)
6
6.2.3.Configurando a aparncia dos controles
importante criarmos formulrios de fcil utilizao, ou seja, que possuam
um nmero pequeno de controles, com tamanhos adequados e alinhados
perfeitamente (podemos considerar como parmetro, por exemplo, a aparncia
das caixas de dilogo do Excel).

Caso seja necessrio um grande nmero de controles,


recomendvel organiz-los em controles MultiPage
(multipginas), de forma que grupos pequenos sejam
exibidos em cada guia.

A Barra de ferramentas UserForm, exibida a seguir, possui ferramentas teis


no trabalho de edio e organizao dos controles. Para visualiz-la, devemos
clicar no menu Exibir, depois, em Barras de ferramentas e, em seguida, em
UserForm.

Algumas dessas ferramentas so descritas a seguir:

: Altera o zoom da exibio da caixa de dilogo;

: Alinha dois ou mais controles entre si com as opes Esquerdas,


Centros, Direitas, Superiores, Meios, Inferiores, ou um ou mais controles
com a opo grade. Os controles so alinhados em relao posio do
controle que possui as alas de edio brancas (antes de acessar esse boto,
necessrio que os objetos a serem alinhados estejam selecionados);

: Centraliza um ou mais controles em relao ao formulrio, por meio


das opes Horizontalmente e Verticalmente;

241
Excel VBA - Mdulo I

: Define a mesma altura, a mesma largura ou o mesmo tamanho (altura


e largura) para os controles selecionados, por meio das opes Altura,
Largura e Ambos.

A seleo simultnea de vrios controles muito utilizada para agilizar a edio


da aparncia e at mesmo das propriedades dos controles. Com vrios controles
selecionados, podemos arrastar as alas de edio de apenas um deles para
que todos sejam redimensionados proporcionalmente de forma automtica, ou
alterar as propriedades de todos os controles de uma nica vez. importante
notarmos que a janela de propriedades exibir apenas as propriedades que so
comuns a todos os controles selecionados.

Para selecionar simultaneamente vrios controles adjacentes, basta clicarmos


no primeiro controle e mantermos a tecla SHIFT pressionada enquanto clicamos
no ltimo controle, ou clicarmos e arrastarmos o mouse sobre a rea que contm
os controles que desejamos selecionar. Tambm possvel selecionarmos
simultaneamente vrios controles no adjacentes mantendo a tecla CTRL
pressionada enquanto clicamos nos controles desejados.

Muitas vezes, necessrio inserir vrios controles do mesmo tipo (por exemplo:
label, textbox). Em casos assim, podemos copiar o controle com a utilizao
dos atalhos CTRL+C e CTRL+V, ou, ainda, clicando sobre o controle de origem
e, com a tecla CTRL pressionada, arrastando com o mouse at a posio de
destino.

6.2.4.Aplicando cdigos aos controles


Para que os controles do formulrio executem aes, ou seja, tornem-se
funcionais, necessrio que sejam vinculados a eventos de objetos. Os eventos
ocorrem quando aes geram acontecimentos, e sua presena no est apenas
em formulrios, mas em todos os objetos do software. Exemplos de eventos so
clicar em um boto, ativar uma janela ou selecionar uma clula. Os procedimentos
de eventos executam aes em resposta a um evento.

242
Formulrios (UserForms)
6
Dos tipos de eventos existentes, dois so utilizados com mais frequncia:
os eventos de planilha (worksheet), que ocorrem sempre que uma planilha
ativada ou uma de suas clulas alterada, e os eventos de pasta de trabalho
(workbook), que ocorrem sempre que uma pasta de trabalho, suas planilhas,
tabelas dinmicas ou suplementos so alterados. Ambos os tipos de eventos
so ativados automaticamente.
Caixa procedimento

A caixa Procedimento, do VBE, est dentro da janela


cdigo e ao lado da caixa Objeto. Ela exibe uma lista dos
eventos para a planilha ou pasta de trabalho selecionada.

Alguns desses eventos so:

Eventos de planilha

Evento Descrio
Activate Ocorre quando a planilha ativada.
Ocorre quando o usurio clica duas vezes em uma
BeforeDoubleClick
clula da planilha.
Ocorre quando o usurio clica com o boto direito
BeforeRightClick
do mouse em uma planilha.
Calculate Ocorre sempre que a planilha recalculada.
Change Ocorre quando uma clula da planilha alterada.
Deactivate Ocorre quando a planilha desativada.
FollowHyperlink Ocorre sempre que um hyperlink ativado.
SelectionChange Ocorre sempre que a seleo alterada.

243
Excel VBA - Mdulo I

Eventos de pasta de trabalho

Evento Descrio
Activate Ocorre quando a pasta de trabalho ativada.
AddinInstall Ocorre sempre que um suplemento instalado.
AddinUninstall Ocorre quando um suplemento desinstalado.
BeforeClose Ocorre quando a pasta de trabalho fechada.
BeforePrint Ocorre quando a pasta de trabalho impressa.
BeforeSave Ocorre sempre que a pasta de trabalho salva.
Deactivate Ocorre quando a pasta de trabalho desativada.
Ocorre sempre que uma nova planilha
NewSheet
adicionada pasta de trabalho.
Open Ocorre quando a pasta de trabalho aberta.
Ocorre quando uma planilha da pasta de trabalho
SheetActivate
ativada.
Ocorre quando o usurio clica duas vezes em
SheetBeforeDoubleClick
uma pasta de trabalho.
Ocorre sempre que o usurio clica com o boto
SheetBeforeRightClick
direito do mouse sobre a pasta de trabalho.
Ocorre sempre que uma pasta de trabalho
SheetCalculate
recalculada.
Ocorre sempre que uma clula da pasta de
SheetChange
trabalho alterada.
Ocorre quando uma planilha da pasta de trabalho
SheetDeactivate
desativada.
Ocorre quando o usurio clica em um hyperlink
SheetFollowHyperlink
da pasta de trabalho.
Ocorre quando a seleo alterada na pasta de
SheetSelectionChange
trabalho.
Ocorre sempre que a janela da pasta de trabalho
WindowActivate
ativada.
Ocorre quando a janela da pasta de trabalho
WindowDeactivate
desativada.
Ocorre quando a janela da pasta de trabalho
WindowResize
restaurada.

244
Formulrios (UserForms)
6
Outros eventos

Evento Descrio
Ocorre depois da alterao dos dados de um
AfterUpdate controle, antes do evento Exit e depois do evento
BeforeUpdate.
BeforeDragOver Ocorre durante o arraste de um objeto com mouse.
BeforeDropOrPaste Ocorre antes de colar dados em um formulrio.
Ocorre antes da alterao do contedo de um
BeforeUpdate
controle.
Change Ocorre sempre que o contedo do controle alterado.
Click Ocorre quando um controle clicado.
Ocorre sempre que o controle recebe um duplo-
DblClick
clique.
Ocorre quando a lista do controle exibida ou
DropButtonClick
fechada.
Ocorre quando o controle recebe o foco que estava
Enter
em outro controle do formulrio.
Ocorre quando o controle perde o foco porque este
Exit
foi dado a outro controle do formulrio.
Ocorre sempre que um objeto carregado, antes de
Initialize
sua exibio.
KeyDown Ocorre quando uma tecla pressionada.
KeyUp Ocorre quando uma tecla liberada.
Layout Ocorre quando o tamanho de um objeto alterado.
Ocorre sempre que o mouse movido sobre o
MouseMove
controle.
Resize Ocorre quando um formulrio redimensionado.
Ocorre quando a seta esquerda ou inferior de um
SpinDown
controle clicada.
Ocorre quando a seta direita ou superior de um
SpinUp
controle clicada.
Zoom Ocorre quando o zoom do objeto alterado.

245
Excel VBA - Mdulo I

Todos os controles de formulrio possuem um conjunto predefinido de eventos


relacionados. Ao selecionarmos um controle na lista Objeto da janela Cdigo,
a lista Procedimento exibe todos os eventos para o controle selecionado.
Cada procedimento de evento precedido pelo nome do controle ao qual est
vinculado. Assim, Salvar_Click o nome do evento Click para um controle
chamado Salvar. muito importante sabermos que o cdigo no atualizado
automaticamente quando alteramos os nomes dos controles.

Os procedimentos de evento no VBA so sempre


procedimentos Sub, e no Function.

Para criarmos um procedimento de evento de um formulrio, devemos


determinar o evento que ser utilizado, abrir o VBE e utilizar os seguintes passos:

1. Clique duas vezes no objeto adequado na lista a seguir dos objetos do


Excel. Para criar procedimentos de eventos de planilha, por exemplo, devemos
selecionar uma das planilhas da pasta de trabalho. A janela Cdigo ser aberta;

246
Formulrios (UserForms)
6
2. Selecione o objeto e o evento para os quais o cdigo ser criado. O objeto
deve ser selecionado na lista Objeto, e o evento na lista Procedimento;

2. Indique Worksheet.

3. Clique
sobre o
1. Selecione PLAN1. evento
desejado.

3. Escreva, na janela Cdigo, o procedimento destinado ao gerenciamento de


eventos que ser executado sempre que o evento ocorrer.

247
Excel VBA - Mdulo I

No exemplo a seguir, os procedimentos do evento foram inseridos na planilha


Plan1. O evento Deactivate ser executado quando o usurio sair da planilha
Plan1. Desta forma, quando sair da planilha em questo, ser executado o
comando para selecionar a mesma planilha:

Private Sub Worksheet_Deactivate()


Evento ativado quando sair da Plan1
Sheets(Plan1).Select
End Sub

6.2.5.Elaborando um formulrio
Para entendermos o funcionamento de todas as etapas de criao de um
formulrio, criaremos um para efetuar o cadastramento de alunos. Os dados
sero cadastrados no prprio formulrio e inseridos na planilha denominada
Alunos quando for pressionado o boto Cadastrar do formulrio. Para a criao
de tal formulrio, devemos seguir os passos adiante:

1. Crie uma pasta de trabalho contendo as planilhas Alunos e Apoio. Na


planilha Alunos, sero armazenadas as informaes cadastradas. Utilizaremos
a planilha Apoio para guardar as informaes a serem exibidas no formulrio;

2. Digite as informaes conforme o exemplo e nomeie o intervalo de clulas


A2:B6 como cursos:

248
Formulrios (UserForms)
6
3. Na planilha Alunos, faa como mostrado no exemplo seguinte:

1 Etapa: Criao do layout do formulrio

1. Acesse o VBE e insira um novo formulrio por meio da opo UserForm,


contida no menu Inserir;

2. Nomeie o formulrio (que at o momento tem o nome de UserForm1) por


meio da janela Properties, alterando o contedo da propriedade Name para
frmAlunos;

3. Altere o texto contido na Barra de ttulo do formulrio, alterando o contedo


da propriedade Caption para Cadastro de Alunos;

249
Excel VBA - Mdulo I

4. Para executar o formulrio, clique uma vez sobre ele e pressionar a tecla de
funo F5;

Contedo inserido
na propriedade
Caption.

5. Para obter os controles que sero inseridos no frmAlunos, utilize a Caixa de


ferramentas, contida em Exibir;

6. Insira um rtulo, alterando a propriedade Name para IblAluno e a propriedade


Caption para Nome;

250
Formulrios (UserForms)
6
7. Insira outro rtulo abaixo do primeiro. Nesse caso, podemos usar o mesmo
procedimento para a criao do primeiro rtulo ou efetuar uma cpia dele. A
propriedade Name deve ser alterada para lblCurso, e a propriedade Caption
deve ser alterada para Curso;

8. Alinhe os controles mantendo a tecla SHIFT pressionada e, ento, clicar em


todos os controles desejados a fim de selecion-los. Em seguida, clique com o
boto direito do mouse e acesse a opo desejada dentro do submenu Alinhar,
como mostra o exemplo seguinte:

251
Excel VBA - Mdulo I

9. Insira o controle Caixa de Texto alterando a propriedade Name para txtAluno,


a propriedade MaxLength para 40 (que o nmero mximo de caracteres a
serem inseridos no controle) e a propriedade Width para 195 (que a largura
do controle);

Controle
Caixa de Texto.

10. Insira, na frente da palavra Curso, o controle Caixa de Combinao, o


qual permitir que o usurio escolha o curso desejado de acordo com uma lista
predefinida. Este controle buscar as informaes referentes aos cursos que
esto digitadas na planilha Apoio, regio nomeada como Cursos;

11. Altere a propriedade Name para cmbCurso, a propriedade RowSource para


Cursos (nome da regio indicada na planilha Apoio), a propriedade ListRows
para 5 (nmero de itens a serem exibidos) e a propriedade Style para 2 (somente
poder ser digitado um valor contido na lista). Veja na imagem abaixo, aps
executar, qual sua aparncia:

ListRows: 5

252
Formulrios (UserForms)
6
Ser possvel observar que so exibidas apenas as informaes contidas na
primeira coluna do intervalo Cursos, porm, o controle Caixa de Combinao
permite a visualizao das demais colunas do intervalo, conforme o status da
propriedade ColumnCount deste controle, sendo:

0, para no exibir coluna alguma;

-1, para exibir todas as colunas;

Outro nmero, para exibir um nmero especfico de colunas.

A inteno exibir apenas os nomes dos cursos, ou seja, a primeira coluna do


intervalo nomeado (ColumnCount = 1), pois, no momento em que selecionarmos
um curso na Caixa de Combinao, dever ser exibido o valor correspondente
em um rtulo.

12. Crie mais dois rtulos, alterando, no primeiro rtulo, a propriedade Name
para IblRotValor e a propriedade Caption para Valor:. No segundo rtulo,
altere a propriedade Name para IblValor, a propriedade Caption para 0,00 e a
propriedade TextAlign para 3fmTextAlignRight;

13. Caso necessrio, selecione todos os controles desta linha e efetue o


alinhamento. Para tanto, clique com o boto direito do mouse sobre a seleo,
selecione Alinhar e, ento, Inferiores;

253
Excel VBA - Mdulo I

14. Insira o controle Quadro alterando a propriedade Name para framTipo e a


propriedade Caption para Tipo de Pagamento;

15. No controle Quadro, insira dois controles Boto de Opo alterando as


seguintes propriedades:

Name: optPrazo;
Caption: A Prazo.

Name: optVista;
Caption: Vista.

16. Insira dois controles Boto de Comando, alterando as seguintes propriedades:

Name: cmdCadastrar;
Caption: Cadastrar;
Accelerator: C (define a tecla de atalho para o controle).

Name: cmdFechar;
Caption: Fechar;
Accelerator: F (define a tecla de atalho para o controle).

Controles:
Quadro / Boto
de Opo

Botes de
Comando

254
Formulrios (UserForms)
6
No momento em que for indicado o tipo de pagamento por meio de um dos
botes de opo, ser efetuada uma das condies:

Vista: Ser exibido um controle indicando o valor total a ser pago, com
15% de desconto sobre o valor do curso;

A Prazo: De acordo com a indicao do nmero de parcelas, dever ser


exibido o valor de cada uma das parcelas, sendo possvel a diviso em at
12 vezes iguais.

17. Crie os seguintes controles, os quais ficaro ocultos, sendo exibidos somente
no momento do clique no boto de opo A Prazo:

Propriedades dos rtulos

Name: lblRotQtde;
Caption: Parcelas;
Visible: False (oculta o controle).

Name: lblRotlParcela;
Caption: Valor / Parcela
Visible: False (oculta o controle).

Name: lblValParcela;
Caption: 0,00
SpecialEffect: 2 (efeito para o controle);
TextAlign: 3 fmTextAlignRight (alinhamento de texto direita);
Visible: False (oculta o controle).

Propriedades da Caixa de Texto

Name: txtQtde;
Text: 2;
Visible: False (oculta o controle).

255
Excel VBA - Mdulo I

Propriedades do Boto de Rotao

Name: spiQtde;
Min: 2 (valor mnimo);
Max: 12 (valor mximo);
SmallChange: 1 (valor incremental);
Visible: False (oculta o controle).

Organize-os da seguinte maneira:

Estes controles sero


exibidos somente
quando indicado o tipo
de pagamento A Prazo.

18. Crie os seguintes controles a serem exibidos no momento do clique no


boto de opo Vista:

Propriedades dos Rtulos:

Name: lblRotVista;
Caption: Total a Pagar;
Visible: False (oculta o controle).

256
Formulrios (UserForms)
6
Name: lblVista;
Caption: 0,00;
TextAlign: 3 fmTextAlignRight (alinhamento de texto direita).
SpecialEffect: 2 (efeito para o controle);

Estes controles sero


exibidos somente
quando indicado o tipo
de pagamento Vista.

2 Etapa: Tornando o formulrio funcional eventos dos controles

Aps a criao do layout do formulrio necessrio automatizar os controles.


Este recurso ocorre atravs dos eventos, ou seja, o evento acionado quando
ocorre alguma ao em um controle, por exemplo, um clique em um boto, a
insero de dados em uma caixa de texto etc. Voc deve realizar os seguintes
passos:

1. Dentro do evento, digite o cdigo que ser executado quando esse evento
ocorrer para o controle. A seguir, temos descritas duas formas para editar um
evento:

Clique duas vezes no controle para abrir o evento automaticamente;

257
Excel VBA - Mdulo I

Dentro do Editor VBE, indique o controle dentro da Caixa de seleo Objetos


do Formulrio e selecione o evento em Procedimento.

Procedimentos

Objetos do
Formulrio

2. Dentro do evento, digite o cdigo que ser executado quando esse evento
ocorrer para o controle.

258
Formulrios (UserForms)
6
Podemos citar como exemplo o controle Boto de Comando, o qual receber um
cdigo para fechar o formulrio quando ocorrer o evento Clicar nesse controle.
Este um evento padro para esse controle, ou seja, se, no VBE, dermos um
duplo-clique sobre o boto, ser criada a instruo para este evento, no sendo
necessrio escolher evento algum na Lista de Procedimentos:

3. Clique duas vezes sobre o controle cmdFechar e digite o comando UnloadMe


para fechar o formulrio atual, como mostrado a seguir:

Private Sub CmdFechar_Click()


Unload Me
End Sub

259
Excel VBA - Mdulo I

4. Na rea de edio de cdigo, execute o formulrio por meio de uma das


seguintes opes:

Pressione a tecla de funo F5;

Na janela Project Explorer, d um duplo-clique em frmAlunos e, em


seguida, pressione F5.

Ento, ser necessrio automatizar os demais controles no formulrio. Por


exemplo, ao selecionarmos um determinado curso no controle cmbCurso,
dever ser exibido o seu valor no controle lblValor, ou seja, o evento Change
da caixa de combinao ir buscar na planilha Apoio o valor correspondente
ao item selecionado, o qual est na mesma linha do curso e em uma coluna
direita.

A seguir, temos os dados da Planilha Apoio:

CURSO VALOR
Windows R$ 290,00
Word R$ 350,00
Excel R$ 450,00
Power Point R$ 380,00
Access R$ 440,00

Alguns itens devem ser observados com ateno. So eles:

Intervalo na planilha foi nomeado como Cursos;

Este mesmo intervalo est sendo utilizado pelo controle cmbCurso


(propriedade RowSource);

A caixa de combinao exibe somente as informaes da primeira coluna;

Quando selecionado um item na caixa de combinao (primeira coluna),


dever ser exibido o valor que est na mesma linha e na primeira coluna
direita, a propriedade Column(1).

260
Formulrios (UserForms)
6
5. Clique duas vezes no controle cmbCurso e digite o seguinte cdigo:

Private Sub CmbCurso_Change()


lblValor = CmbCurso.Column(1)
End Sub

Durante a execuo do formulrio, ao escolhermos um determinado curso, ser


exibido no controle lblValor o valor correspondente a ele. No entanto, esse valor
no ser apresentado com a mesma formatao numrica que se apresentava
na planilha, sendo necessrio realizar a formatao deste valor tambm dentro
do formulrio.

Valor sem formatao

6. Defina a formatao do valor a ser exibido no controle Rtulo utilizando a


funo Format, conforme o exemplo a seguir:

lblvalor = Format(cmbcurso.Column(1), #,##0.00)

Ao clicarmos no boto de opo optVista, sero necessrias as seguintes aes:

Garantir que os controles de opo A Prazo estejam ocultos;

Deixar visveis os controles da opo Vista;

261
Excel VBA - Mdulo I

Exibir o valor do curso com 15% de desconto.

Private Sub optVista_Click()


ocultar controles da opo A Prazo
lblRotQtde.Visible = False
txtqtde.Visible = False
spiqtde.Visible = False
lblRotParcela.Visible = False
lblValParcela.Visible = False
exibir controles da opo Vista
lblRotVista.Visible = True
lblVista.Visible = True
Calcular o valor com 15% de desconto
lblVista = Format(lblvalor - (lblvalor * 0.15),
#,##0.00)
End Sub

Para o procedimento do controle optPrazo, so necessrias as seguintes aes:

Garantir que os controles da opo Vista estejam ocultos;

Deixar visveis os controles da opo A Prazo;

Calcular o valor da parcela.

Private Sub optPrazo_Click()


ocultar controles da opo Vista
lblRotVista.Visible = False
lblVista.Visible = False
Exibir controles da opo A Prazo
lblRotQtde.Visible = True
txtqtde.Visible = True
spiqtde.Visible = True
lblRotParcela.Visible = True
lblValParcela.Visible = True
Calcular o valor de cada parcela
lblValParcela = Format(lblvalor / txtqtde, #,##0.00)
End Sub

262
Formulrios (UserForms)
6
7. Defina o cdigo para o controle spiQtde para que seja exibido o seu valor
automaticamente na caixa de texto txtQtde e, tambm, para que seja atualizado
o valor das parcelas no controle lblParcela. Para tanto, clique duas vezes no
Boto de Rotao e digite o seguinte cdigo:

Private Sub SpiQtde_Change()


txtQtde = SpiQtde
lblValParcela = format(lblValor / txtQtde,#,##0.00)
End Sub

8. Depois de automatizados os botes de opo vista e A Prazo, clique duas


vezes no controle cmbCurso e oculte todos os controles, conforme o exemplo
a seguir, pois eles devero ser exibidos somente com a ativao de um dos
botes de opo:

Private Sub cmbcurso_Change()


Exibir o valor do curso no Rtulo
lblvalor = Format(cmbcurso.Column(1), #,##0.00)
Ocultar os controles
lblRotQtde.Visible = False
txtqtde.Visible = False
spiqtde.Visible = False
lblRotParcela.Visible = False
lblValParcela.Visible = False
lblRotVista.Visible = False
lblVista.Visible = False
optVista = False
optPrazo = False
End Sub

263
Excel VBA - Mdulo I

3 Etapa: Inserindo as informaes na planilha

Utilizaremos o evento Click do boto de comando cmdCadastrar a fim de


inserir os dados cadastrados no formulrio para a planilha Dados.

Iniciaremos o cdigo realizando as consistncias nos controles, pois os dados


s sero cadastrados na planilha se todas as informaes tiverem sido inseridas
no formulrio. Caso exista alguma informao pendente no formulrio, um
alerta dever ser exibido ao usurio:

Private Sub cmdCadastrar_Click()


Consistncias
If txtAluno = Then
MsgBox Digite o nome do aluno
txtAluno.SetFocus
Exit Sub
ElseIf IsNumeric(txtAluno) Then
MsgBox Informao Invlida
txtAluno =
txtAluno.SetFocus
Exit Sub
End If
If cmbCurso = Then
MsgBox Selecione o curso desejado
cmbCurso.DropDown
Exit Sub
End If
If optVista = False And optPrazo = False Then
MsgBox Indique o tipo de Pagamento
End If
End Sub

O mtodo SetFocus permite posicionar o cursor dentro do controle. J o mtodo


DropDown que foi utilizado no controle cmbCurso responsvel por expandir
a caixa de combinao, permitindo ao usurio a escolha de uma opo contida
na lista.

Aps as consistncias, podemos prosseguir o procedimento com os comandos


para inserir as informaes na planilha, continuando dentro do evento
cmdCadastrar_Click.

264
Formulrios (UserForms)
6
Na primeira coluna da planilha (Coluna A), iremos identificar os alunos por
um nmero de registro, que ser incrementado automaticamente, iniciando a
primeira linha no valor 1.

O cdigo a seguir ir posicionar o cursor na primeira clula vazia da coluna A.


Se a clula da linha anterior no for numrica, significa que o cdigo posicionou
o ponteiro na clula A2 e a clula anterior o ttulo. Neste caso, o registro ser
iniciado com a insero do valor 1. Caso contrrio, ser obtido o valor da clula
anterior adicionando +1.

Sheets(Alunos).Select
Range(a65536).End(xlUp).Offset(1, 0).Select
if Not IsNumeric(ActiveCell.Offset(-1, 0)) Then
ActiveCell = 1
Else
ActiveCell = ActiveCell.Offset(-1, 0) + 1
End If

Agora, necessrio colocar nas demais colunas da planilha as informaes


contidas nos controles do formulrio:

ActiveCell.Offset(0, 1) = txtAluno
ActiveCell.Offset(0, 2) = cmbCurso
ActiveCell.Offset(0, 3) = lblvalor
If optVista = True Then
ActiveCell.Offset(0, 4) = Vista
ActiveCell.Offset(0, 5) = 15%
ActiveCell.Offset(0, 6) = 1
ActiveCell.Offset(0, 7) = lblVista
Else
ActiveCell.Offset(0, 4) = A Prazo
ActiveCell.Offset(0, 5) = -
ActiveCell.Offset(0, 6) = txtQtde
ActiveCell.Offset(0, 7) = lblValParcela
End If

265
Excel VBA - Mdulo I

Ao efetuarmos o cadastro, observamos que os valores numricos (Parcelas


/ Valor por Parcela) foram inseridos na planilha como texto, inclusive esto
alinhados esquerda da clula. Para que o valor seja inserido na clula como
valor numrico, necessrio utilizar a funo Cdbl() que ir realizar a converso.
Apesar de termos formatado essas informaes dentro do procedimento dos
controles com a funo Format() aps a converso para valor numrico, ser
necessrio tambm format-las na clula da planilha:

Valores inseridos como texto

266
Formulrios (UserForms)
6
No cdigo anterior, foram acrescentadas a funo Cdbl() e CInt() para a converso
numrica e a propriedade NumberFormat para a formatao da clula:

ActiveCell.Offset(0, 3) = CDbl(lblvalor)
If optVista = True Then
ActiveCell.Offset(0, 4) = Vista
ActiveCell.Offset(0, 5) = 15%
ActiveCell.Offset(0, 6) = 1
ActiveCell.Offset(0, 7) = CDbl(lblVista)
Else
ActiveCell.Offset(0, 4) = A Prazo
ActiveCell.Offset(0, 5) = -
ActiveCell.Offset(0, 6) = CInt (txtQtde)
ActiveCell.Offset(0, 7) = CDbl(lblValParcela)
End If
ActiveCell.Offset(0, 3).NumberFormat = #,##0.00
ActiveCell.Offset(0, 7).NumberFormat = #,##0.00

Observemos o exemplo aps a alterao da macro e o recadastramento do


registros anteriores, a partir do incio:

267
Excel VBA - Mdulo I

Aps a insero das informaes, vemos que o contedo permanece nos


controles da janela de cadastro, no entanto, podemos limpar o contedo dos
controles do formulrio e posicionar o cursor no controle txtAluno para o que
o usurio possa digitar um novo registro:

txtAluno =
lblvalor = 0,00
cmbcurso =
optVista = False
optPrazo = False
lblRotQtde.Visible = False
txtQtde.Visible = False
spiQtde.Visible = False
lblRotParcela.Visible = False
lblValParcela.Visible = False
lblRotVista.Visible = False
lblVista.Visible = False
txtAluno.SetFocus

Ao executar este procedimento, ocorrer um erro de execuo no evento Change


do controle cmbCurso, isto porque ao executar o comando cmbCurso = , a
informao vazio ser procurada dentro da planilha Apoio.

268
Formulrios (UserForms)
6
A fim de resolver este problema, devemos dar um duplo-clique no controle
cmbCurso e inserir a seguinte consistncia:

Private Sub cmbcurso_Change()


If cmbcurso = Then
Exit Sub
End If
.... continuao dos demais comandos
End Sub

Podemos centralizar as informaes contidas nas clulas conforme o exemplo


a seguir:

ActiveCell.Offset(0, 4).HorizontalAlignment = xlCenter

Observemos todo o contedo do procedimento inserido no controle


cmdCadastrar:

Private Sub cmdCadastrar_Click()


Consistncias
If txtAluno = Then
MsgBox Digite o nome do aluno
txtAluno.SetFocus
Exit Sub
ElseIf IsNumeric(txtAluno) Then
MsgBox Informao Invlida
txtAluno =
txtAluno.SetFocus
Exit Sub
End If
If cmbCurso = Then
MsgBox Selecione o curso desejado
cmbCurso.DropDown
Exit Sub
End If
If optVista = False And optPrazo = False Then
MsgBox Indique o tipo de Pagamento
End If

269
Excel VBA - Mdulo I

inserindo dados na planilha


Sheets(Alunos).Select
Range(a65536).End(xlUp).Offset(1, 0).Select
If Not IsNumeric(ActiveCell.Offset(-1, 0)) Then
ActiveCell = 1
Else
ActiveCell = ActiveCell.Offset(-1, 0) + 1
End If

ActiveCell.Offset(0, 1) = txtAluno
ActiveCell.Offset(0, 2) = cmbCurso
ActiveCell.Offset(0, 3) = CDbl(lblValor)
If optVista = True Then
ActiveCell.Offset(0, 4) = Vista
ActiveCell.Offset(0, 5) = 15%
ActiveCell.Offset(0, 6) = 1
ActiveCell.Offset(0, 7) = CDbl(lblVista)
Else
ActiveCell.Offset(0, 4) = A Prazo
ActiveCell.Offset(0, 5) = -
ActiveCell.Offset(0, 6) = CInt(txtQtde)
ActiveCell.Offset(0, 7) = CDbl(lblValParcela)
End If
ActiveCell.Offset(0, 3).NumberFormat = #,##0.00
ActiveCell.Offset(0, 7).NumberFormat = #,##0.00
Centralizando as informaes nas clulas
ActiveCell.Offset(0, 4).HorizontalAlignment = xlCenter
ActiveCell.Offset(0, 5).HorizontalAlignment = xlCenter
Limpando o contedo dos controles
txtAluno =
lblValor = 0,00
cmbCurso =
optVista = False
optPrazo = False
lblRotQtde.Visible = False
txtQtde.Visible = False
spiQtde.Visible = False
lblRotParcela.Visible = False
lblValParcela.Visible = False
lblRotVista.Visible = False
lblVista.Visible = False
Posicionando o cursor no controle
txtAluno.SetFocus
End Sub

270
Formulrios (UserForms)
6
Private Sub cmdFechar_Click()
Unload Me
End Sub

Private Sub optPrazo_Click()


ocultar controles da opo Vista
lblRotVista.Visible = False
lblVista.Visible = False
Exibir controles da opo A Prazo
lblRotQtde.Visible = True
txtQtde.Visible = True
spiQtde.Visible = True
lblRotParcela.Visible = True
lblValParcela.Visible = True
Calcular o valor de cada parcela
lblValParcela = Format(lblValor / txtQtde, #,##0.00)
End Sub

Criando um formulrio para inserir um novo curso na planilha Apoio

Como o controle Caixa de Combinao est capturando as informaes


contidas no intervalo denominado Cursos da planilha Apoio, criaremos um
formulrio para inserir um novo curso na planilha, o qual pertencer lista
de opes do cmbCurso do formulrio de alunos.

Primeiramente criaremos um novo formulrio com o nome frmCursos,


conforme o exemplo adiante:

271
Excel VBA - Mdulo I

Propriedades dos Objetos

Name: frmCurso;
Caption: Incluso de Cursos.

Name: lblRotCurso;
Caption: Curso.

Name: lblRotValor;
Caption: Valor.

Name: txtCurso.

Name: txtValor.

Name: cmdInserir;
Accelerator: I.

Observemos a seguir um exemplo bem simples para definir uma mscara de


formatao no controle que ir receber o valor do curso (txtValor) e que ir
formatar o valor numrico com separador de milhares e duas casas decimais.
Utilizaremos a funo Format() dentro do evento AfterUpdate da Caixa de
combinao:

Private Sub txtValor_AfterUpdate()


txtValor = Format(txtValor, #,##0.00)
End Sub

O controle Boto de Comando (neste caso cmdInserir) ser responsvel por


executar os cdigos de procedimentos para cadastrar a nova informao na
planilha. Faremos a consistncia das informaes e, com o auxlio da instruo
For Each, verificaremos, na planilha Apoio, a existncia do curso a ser cadastrado,
no permitindo o cadastramento de dois ou mais cursos com o mesmo nome.

Caso a informao digitada no controle txtCurso no exista na planilha, o cursor


ir selecionar uma clula dentro do intervalo Cursos e inserir uma nova linha
neste local, a qual receber as informaes digitadas nas caixas de texto. Aps
este processo, ser feita a classificao por ordem alfabtica de cursos.

272
Formulrios (UserForms)
6
Em seguida, damos um duplo-clique no controle cmdInserir e digitamos o
seguinte procedimento:

Private Sub cmdInserir_Click()


Dim procura As Object
Consistncia de Dados
If txtCurso = Then
MsgBox Digite o Curso
txtCurso.SetFocus
Exit Sub
End If
If txtValor = Or Not IsNumeric(txtValor) Then
MsgBox Digite o valor
txtValor =
txtValor.SetFocus
Exit Sub
End If
Sheets(Apoio).Select
verificar a existncia do Curso
For Each procura In Range(cursos)
If UCase(procura.Value) = UCase(txtCurso) Then
MsgBox txtCurso & vbCrLf & _
Curso j existente! Digite outro
txtCurso =
txtValor =
txtCurso.SetFocus
Exit Sub
End If
Next
Posicionar na tabela e inserir uma linha
Range(a65536).End(xlUp).Select
ActiveCell.EntireRow.Insert
Inserir informaes
ActiveCell = txtCurso
ActiveCell.Offset(0, 1) = CDbl(txtValor)
ActiveCell.Offset(0, 1).NumberFormat = #,##0.00
Classificar a planilha pela coluna de cursos (Coluna A)
Range(a2).Sort key1:=Range(a2), _
order1:=xlAscending, Header:=xlYes
End Sub

273
Excel VBA - Mdulo I

6.2.6.Exibindo um formulrio
Para fazer com que um formulrio criado seja exibido ao usurio, devemos criar
um procedimento com o mtodo Show. Esse procedimento deve ser inserido
em um mdulo VBA, e no no cdigo do formulrio. O cdigo de exemplo a
seguir exibir um formulrio chamado FrmAlunos:

Sub ShowDialog()
frmAlunos.Show
Demais instrues
End Sub

possvel indicarmos a exibio de um formulrio assim que o arquivo for


aberto, atravs do mtodo Auto_Open:

Sub Auto_Open()
frmAlunos.Show
Demais instrues
End Sub

Os procedimentos a seguir abordam a criao de cdigos para a abertura de


formulrios, a atribuio desses cdigos a botes de planilha e a criao de
outros cdigos envolvidos no trabalho com formulrios:

1. Insira no mdulo os cdigos para abrir os formulrios frmAlunos e frmCursos,


exibidos a seguir:

Sub Abrir_Alunos()
frmAlunos.show
End Sub

Sub Abrir_Cursos()
frmCursos.show
End Sub

274
Formulrios (UserForms)
6

2. Insira uma nova planilha com o nome Abertura, incluindo botes que sero
responsveis pela abertura dos formulrios, como ilustra a imagem a seguir:

275
Excel VBA - Mdulo I

Para adicionar um boto diretamente na planilha, basta ir guia Desenvolvedor


e, no grupo Controles, clicar no boto Inserir. Ento ser exibida uma lista
com diversos controles que podem ser adicionados planilha. Ao adicionar
cada boto, aparecer uma janela, na qual vamos atribuir uma macro para eles,
atribua para o primeiro boto a macro Abrir_Alunos e para o segundo a macro
Abrir_Cursos.

Depois renomeie os botes como Alunos e Cursos respectivamente, clicando


com o boto direito no boto e na opo Editar Texto.

3. Insira mais uma linha de cdigo para o boto cmdFechar do formulrio


frmAluno. Esse cdigo, exibido a seguir, deve fazer com que um clique no
boto alm de fechar o formulrio, que era o que j fazia, tambm retorne para
a planilha Abertura:

Private Sub cmdFechar_Click()


Unload Me
Sheets(abertura).Select
End Sub

276
Formulrios (UserForms)
6
4. Crie um cdigo para que o evento Terminate do formulrio frmCurso retorne
para a planilha Abertura:

Private Sub UserForm_Terminate()


Sheets(abertura).Select
End Sub

5. Dentro no mdulo, insira um cdigo para ocultar alguns objetos do Excel,


insira a data do sistema operacional na barra de status e selecione a planilha
Abertura:

Sub auto_open()
oculta as guias de planilha
ActiveWindow.DisplayWorkbookTabs = False
oculta cabealho de linha e coluna
ActiveWindow.DisplayHeadings = False
oculta as barras de rolagem vertical e horizontal
ActiveWindow.DisplayHorizontalScrollBar = False
ActiveWindow.DisplayVerticalScrollBar = False
Exibe a data do sistema na barra de status
Application.StatusBar = Data: & Date
Seleciona a planilha
Sheets(abertura).Select
End Sub

Quando utilizamos o mtodo Show, a execuo da macro


pausada quando o formulrio exibido. Assim que
o formulrio fechado, a macro retoma sua execuo,
executando quaisquer outros procedimentos que possua
(na maioria das vezes no utilizamos outros procedimentos).

277
Excel VBA - Mdulo I

Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

O Visual Basic utiliza o objeto UserForm, tambm conhecido como


formulrio, como interface entre os usurios e o computador;

Inicialmente, todos os formulrios criados so vazios, ou seja, no


apresentam controles como botes, caixas de texto ou caixas de opes.
Todos os controles devem ser inseridos por meio da Caixa de ferramentas;

O objeto UserForm e cada um dos controles que podem ser inseridos


em um formulrio possuem propriedades diversas que, de acordo com o
valor definido, fazem com que os controles apresentem uma aparncia ou
comportamento especfico. Essas propriedades podem ser visualizadas e
editadas por meio da janela de propriedades;

A Barra de ferramentas UserForm possui ferramentas teis no trabalho


de edio e organizao dos controles. Para visualiz-la, devemos clicar
no menu Exibir, depois, em Barras de ferramentas e, em seguida, em
UserForm;

Para que os controles do formulrio executem aes, ou seja, tornem-


se funcionais, necessrio que sejam vinculados a eventos de objetos.
Exemplos de eventos so clicar em um boto, ativar uma janela ou selecionar
uma clula. Os procedimentos de eventos executam aes em resposta a
um evento. Os eventos mais frequentemente utilizados so os eventos de
planilha (worksheet) e os eventos de pasta de trabalho (workbook);

Para fazer com que um formulrio criado seja exibido ao usurio, devemos
criar um procedimento com o mtodo Show. Esse procedimento deve ser
inserido em um mdulo VBA, e no no cdigo do formulrio.

278
Formulrios
(UserForms)
6
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Qual o procedimento para criar um UserForm?

a) Menu Inserir / Userform.

b) Pressionar a tecla F5.

c) No possvel criar um UserForm.

d) Aplicar um duplo-clique na janela de projeto.

e) Nenhuma das alternativas anteriores est correta.

2. Qual das alternativas a seguir representa o local que contm os


controles que sero inseridos no formulrio?

a) Menu Inserir / Arquivo

b) Caixa de Ferramentas

c) UserForm

d) Project Explorer

e) As alternativas A e B esto corretas.

280
Formulrios (UserForms)
6
3. Qual das alternativas a seguir utilizada para exibir um texto
dentro do formulrio?

a) Controle Combobox

b) Userform

c) Caixa de Ferramentas

d) No possvel exibir um texto dentro do formulrio.

e) Controle Label

4. Qual o procedimento utilizado para alinhar controles dentro de


um formulrio?

a) Menu Arquivo / Alinhamento

b) Selecionar todos os controles, clicar com o boto direito do


mouse e acessar a opo desejada no submenu Alinhar.

c) Selecionar apenas um controle e pressionar as teclas SHIFT +


CTRL.

d) Selecionar todos os controles e realizar o alinhamento arrastando


o mouse para a direita.

e) Nenhuma das alternativas anteriores est correta.

281
Excel VBA - Mdulo I

5. Para que um controle Combobox liste informaes contidas em


uma regio de clulas, qual propriedade dever ser alterada?

a) RowSource

b) Value

c) Select

d) Name

e) Column

282
Formulrios
(UserForms)
6
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Criando um formulrio que ser executado automaticamente ao abrirmos
a Pasta de trabalho

1. Desenvolva o formulrio denominado frmCalcular, conforme o exemplo a


seguir:

Ao clicar nos botes +, -, x e /, dever ser exibido, na ltima caixa de texto,


o resultado do clculo da operao entre o primeiro e o segundo nmero;

Ao clicar no boto Limpar, o contedo das trs caixas de texto dever ser
removido, e o cursor deve ficar posicionado na primeira caixa de texto;

Ao clicar no boto Fechar, o formulrio dever ser encerrado;

Criar uma macro Auto_Open() para executar o formulrio no momento em


que o arquivo for aberto.

284
Eventos no
associados
a objetos
7
99 Introduo;
99 Mtodo OnKey;
99 Mtodo OnTime.
Excel VBA - Mdulo I

7.1.Introduo
Existem alguns tipos de eventos, como os de pressionar teclas e os de tempo,
que, diferentemente dos eventos de planilha e de pasta de trabalho, no so
associados a objetos. Esses eventos podem ser programados em um mdulo
VBA normal. Neste captulo sero apresentados o OnKey e o OnTime.

7.2.Mtodo OnKey
Por meio do mtodo OnKey, podemos fazer com que a execuo de um
procedimento seja desencadeada quando pressionarmos uma combinao
especfica de teclas, uma vez que o Excel acompanha cada tecla que digitamos.
justamente essa combinao que o OnKey, cuja sintaxe descrita a seguir,
define:

expresso.OnKey(Tecla_ou_conjunto_de_teclas, Procedimento)

A seguir, temos a descrio de cada um dos argumentos presentes na sintaxe


de OnKey:

expresso: Aqui devemos inserir uma expresso que retorna um objeto


Application;

Tecla_ou_conjunto_de_teclas: Este argumento uma string. onde


devemos inserir as teclas que desejamos combinar, as quais podem ser as
teclas ALT, CTRL ou SHIFT (que tambm podem ser combinadas entre elas
prprias), mais outra tecla. As teclas podem ser representadas por mais de
um caractere; ento, para a tecla A devemos digitar a e para a tecla ENTER,
devemos digitar {ENTER};

Procedimento: Este argumento uma variant e a parte em que devemos


especificar o nome do procedimento a ser utilizado. Seu uso no
obrigatrio, ou seja, se utilizarmos um texto vazio (), a combinao de
teclas especificada em Tecla_ou_conjunto_de_teclas no gerar resultado
algum. Esse modo de OnKey tem a capacidade de modificar as aes
resultantes do pressionamento de teclas predefinidas pelo Excel, mas
possvel retornar s aes originais omitindo o Procedimento. Ento, se
omitido, Tecla_ou_conjunto_de_teclas reverte seu resultado normal e as
combinaes determinadas com OnKey so excludas.

286
Eventos no associados a objetos
7
Algumas teclas, quando pressionadas, no exibem um caractere correspondente
a ela, como a tecla ENTER ou TAB. Para essas teclas, existem cdigos que as
representam, os quais sero mostrados na tabela seguinte:

Tecla Cdigo
BACKSPACE {BACKSPACE} ou {BS}
BREAK {BREAK}
CAPS LOCK {CAPSLOCK}
CLEAR {CLEAR}
DELETE ou DEL {DELETE} ou {DEL}
END {END}
ENTER ~ (til)
ENTER (teclado numrico) {ENTER}
ESC {ESCAPE} ou {ESC}
F1 a F15 {F1} a {F15}
HELP {HELP}
HOME {HOME}
INSERT {INSERT}
NUMLOCK {NUMLOCK}
PAGE DOWN {PGDN}
PAGE UP {PGUP}
RETURN {RETURN}
SCROLL LOCK {SCROLLLOCK}
TAB {TAB}
Seta para a direita {RIGHT}
Seta para a esquerda {LEFT}
Seta para cima {UP}
Seta para baixo {DOWN}

287
Excel VBA - Mdulo I

Alm de serem utilizadas sozinhas, as teclas tambm podem ser aplicadas em


adio a CTRL, ALT e SHIFT, sendo que estas trs podem ser combinadas tambm
entre elas. Para combinar uma tecla com SHIFT, o cdigo desta tecla deve ser
precedido por um sinal de mais (+). Para combinar com CTRL, devemos preceder
o cdigo com acento circunflexo (^). J para combinar com ALT, preceder com
o sinal de porcentagem (%).

Os procedimentos tambm podem ser atribudos a


caracteres especiais, como +, ^, % e outros. Nesse caso,
o caractere especial deve estar entre chaves { }.

A seguir, temos como exemplo um cdigo que executa a macro Editar quando
a tecla F7 pressionada:

Application.OnKey {F7}, Editar

No prximo exemplo, a mesma macro Editar executada quando pressionamos


as teclas CTRL + F7:

Application.OnKey ^{F7}, Editar

J o cdigo seguinte executa a macro Editar quando so pressionadas as teclas


CTRL + ALT + F7:

Application.OnKey ^%{F7}, Editar

O atalho somente comear a funcionar depois de executada


a linha de cdigo (tecla de funo F5).

288
Eventos no associados a objetos
7
O cdigo a seguir faz com que a tecla F7 tenha seu resultado restaurado, ou
seja, volte a ter sua funo original, pois o nome da macro, ou procedimento,
emitida no cdigo:

Application.OnKey {F7}

Tambm possvel desativar a funo de uma tecla ou atalho inserindo duas


aspas () no lugar do procedimento, como mostra o exemplo seguinte, o qual
desativa a funo da tecla F7:

Application.OnKey {F7},

O mtodo OnKey, uma vez especificado, fica ativo enquanto o Excel estiver
aberto, mesmo que a pasta de trabalho para o qual ele foi desenvolvido seja
fechada. Ento, cada vez que um atalho criado para essa pasta de trabalho for
pressionado, ela abrir novamente, a no ser que o cdigo seja includo no
cdigo de evento Workbook_BeforeClose.

Por meio de macros, podemos definir um atalho para exibio de um formulrio


de cadastro, atalho este que dever executar a macro Abrir_Cursos, responsvel
por exibir o formulrio.

A macro responsvel por abrir o formulrio a seguinte:

Sub Abrir_Cursos()
frmCursos.Show
End Sub

J a macro que ir definir o atalho descrita a seguir:

Sub atalhos()
Application.OnKey {f2}, Abrir_Cursos
End Sub

289
Excel VBA - Mdulo I

Tambm possvel definir o atalho criado para funcionamento apenas enquanto


o arquivo estiver aberto. Sendo assim, devemos inserir o comando dentro
do evento Workbook_BeforeClose do arquivo em questo, como mostrado
adiante:

Private Sub Workbook_BeforeClose(Cancel As Boolean)


Application.OnKey {F2},
End Sub

7.3.Mtodo OnTime
O mtodo OnTime permite agendar a data e a hora para a execuo de uma
macro. Utilizar o mtodo OnTime no impede o usurio de retornar interao
normal com o Excel e nem de utilizar outras macros, mesmo que esse mtodo
ainda no tenha sido executado.

A seguir, temos a sintaxe do OnTime e, depois, a descrio de cada um de seus


argumentos:

expresso.OnTime(Incio, Procedimento, Trmino, NovoProcedimento)

expresso: Aqui devemos inserir uma expresso que retorna um objeto


Application;

Incio: Este argumento uma variant de uso obrigatrio. onde definimos


o incio da execuo do procedimento;

Procedimento: Este argumento uma string de uso obrigatrio. o nome


do procedimento a ser executado;

Trmino: Este argumento uma variant opcional. Ele determina at quando


o procedimento poder ser executado. Vamos supor que, quando a hora
do Incio for atingida, o Excel esteja executando outro procedimento e o
Trmino tenha sido definido como Incio+45. Sendo assim, 45 segundos
sero aguardados at que o procedimento anterior termine sua execuo.
Se o Excel ainda no estiver pronto aps 45 segundos, o procedimento no
ser executado;

290
Eventos no associados a objetos
7
NovoProcedimento: Este argumento uma variant opcional. Por meio dele,
podemos definir um novo procedimento OnTime. Se o resultado for False,
o procedimento anterior excludo; se for True, que o valor padro,
podemos programar um novo procedimento.

A funo TimeValue a representao do tempo do VBA. Quando utilizamos


TimeValue(horrio), o mtodo OnTime executado num horrio especfico.
Porm, se utilizarmos Now+TimeValue(tempo decorrido), o mtodo
executado depois de um determinado espao de tempo, contando a partir
do momento atual. A funo TimeValue converte a cadeia de caracteres que
definimos como tempo em um valor que o Excel consegue interpretar e acessar.

A seguir, temos um exemplo de cdigo que executa o procedimento Bombar


em 27 segundos a partir do momento atual:

Application.OnTime Now + TimeValue(00:00:27), Bombar

No prximo exemplo, o procedimento Bombar ser executado s 15:00:

Application.OnTime TimeValue(15:00:00), Bombar

Alm de programar um horrio, podemos programar o dia em que deve ser


executado o procedimento utilizando o DateValue. O exemplo a seguir mostra
um cdigo que executa o procedimento Bombar s 20:00h do dia 12 de fevereiro
de 2016:

Application.OnTime DateValue(02/12/2016 8:00 pm),


Bombar

Para utilizar o DateValue, necessrio manter o computador


funcionando. Alm disso, a pasta de trabalho que contm o
procedimento deve permanecer aberta.

291
Excel VBA - Mdulo I

O evento OnTime tambm funciona em conjunto com o procedimento


UpdateClock. Esse procedimento insere a hora em uma clula e programa
outro evento para algum tempo depois, que a sua prpria execuo outra vez.
Dessa forma, a clula escolhida tem a hora atualizada periodicamente, a menos
que o evento seja cancelado com o procedimento StopClock.

A seguir, temos como exemplo um cdigo que insere na clula B4 a hora


atualizada a cada 21 segundos. Nesse cdigo, NextTick uma varivel que
armazena a hora para o prximo evento:

Dim NextTick As Date

Sub ExibeHorario()
atualiza a clula B4 com o tempo atual
Range(B4) = Time
Prepara o prximo evento para que ocorra daqui a
02 segundos
NextTick = Now + TimeValue(00:00:02)
Application.OnTime NextTick, ExibeHorario
End Sub

Como j foi dito, o mtodo OnTime fica ativo mesmo que a pasta de trabalho
para a qual ele foi desenvolvido seja fechada, o que quer dizer que, a cada
21 segundos (tomando como base o exemplo dado), a pasta de trabalho ser
aberta novamente, se o procedimento StopClock no tiver sido executado.
Podemos evitar que isso ocorra utilizando o evento Workbook_BeforeClose
com a seguinte instruo:

Sub PararRelogio()
On Error Resume Next
Cessa o relgio (OnTime interrompido)
Application.OnTime NextTick, ExibeHorario, , False
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call PararRelogio
End Sub

292
Eventos no associados a objetos
7
Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

Existem alguns tipos de eventos, como os de pressionar teclas e os de


tempo, que, diferentemente dos eventos de planilha e de pasta de trabalho,
no so associados a objetos;

Por meio do mtodo OnKey, podemos fazer com que a execuo de um


procedimento seja desencadeada quando pressionarmos uma combinao
especfica de teclas, uma vez que o Excel acompanha cada tecla que
digitamos. justamente essa combinao que o OnKey define;

O mtodo OnTime permite agendar a data e a hora para a execuo de uma


macro. Utilizar o mtodo OnTime no nos probe de retornar interao
normal com o Excel e nem de utilizar outras macros, mesmo que esse
mtodo ainda no tenha sido executado.

293
Eventos no
associados a
objetos
7
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Que mtodo atribui um atalho para realizar a execuo de uma


macro?

a) OnOpen

b) Auto_Open

c) OnKey

d) NextKet

e) CTRL

2. Sobre o mtodo OnTime, qual das alternativas a seguir est


correta?

a) Permite agendar data e hora para a execuo de uma macro.

b) Atribui uma tecla de atalho para a execuo da macro.

c) utilizado para cancelar a tecla de atalho indicada na macro.

d) As alternativas B e C esto corretas.

e) Nenhuma das alternativas anteriores est correta.

296
Eventos no associados a objetos
7
3. Qual das alternativas a seguir contm a sintaxe de comando
correta?

a) Activecell.OnTime = 12:00

b) ActiveWindow.Onkey.Time = 12:00

c) Application.OnKey {f8},Editar

d) Application.OnTime TimeValue(12:00:00),Formatar

e) Nenhuma das alternativas anteriores est correta.

4. Foi criada a macro Formatar e atribudo o atalho F8 para a execuo


do cdigo. Que comando utilizamos para remover a macro deste

a) Activewindow.Onkey = false

b) Range(a1:IV5000).OnKey =

c) Application.OnTime =

d) Application.Onkey {F8},

e) Nenhuma das alternativas anteriores est correta.

297
Excel VBA - Mdulo I

5. Que comando executa uma macro automaticamente aps 30min


do horrio atual?

a) Application.Ontime now + TimeValue(00:30:00),MacroTeste

b) Application.Onkey 27

c) Activewindow.OnTime agora + 30

d) Workbooks now()+ 00:30

e) Nenhuma das alternativas anteriores est correta

298
Eventos no
associados
a objetos
7
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Utilizando o mtodo OnTime

1. Desenvolva macros que devero exibir uma caixa de texto para o usurio
quando o arquivo j estiver aberto h 30 minutos, questionando se ele deseja
salvar o arquivo. Se o usurio clicar no boto SIM, o arquivo dever ser salvo.
Caso contrrio, a mensagem Operao Cancelada dever ser exibida:

Macro Salvar_Arq: Dever exibir a funo Msgbox() e salvar o arquivo,


caso a resposta seja positiva;

Macro Auto_Open: Dever chamar a macro Salvar_Arq aps o arquivo


estar aberto por 30 minutos.

300
Variveis arrays

8
99 Variveis arrays;
99 Declarando arrays;
99 Arrays Mmultidimensionais;
99 Arrays dinmicas.
Excel VBA - Mdulo I

8.1.Arrays
Os arrays, suportados pela maioria das linguagens de programao, so variveis
indexadas, sendo assim armazenam elementos que so referenciados por um
ndice. O ndice de uma varivel array define quantos dados sero armazenados,
bem como a posio de cada elemento em sequncia. Todos os elementos
contidos dentro de arrays devem ser do mesmo tipo de dado.

Para referenciar uma dessas variveis no array, basta utilizar o nome desta
seguido de um nmero de ndice. Para exemplificar, podemos imaginar um
array chamado dias_da_semana que possua sete variveis armazenadas do
tipo String, uma para cada dia da semana, e referenciar cada elemento como
dias_da_semana(1), dias_da_semana(2), dias_da_semana(3) e assim por
diante.

Veja exemplos de arrays:

Array tamanho 4 (unidimensional)

Array tamanho 2x3 (bidimensional)

302
Variveis arrays
8
8.1.1.Declarando arrays
Os arrays, assim como as variveis, precisam ser declarados antes de serem
utilizados. Podemos declar-los inserindo uma instruo Dim ou Public, mais o
nome do array e os nmeros do primeiro e ltimo ndices, seguidos da palavra-
chave As e de um tipo de dado. O exemplo a seguir cria um array chamado
arrayexemplo de 50 nmeros inteiros:

Dim arrayexemplo(1 to 50) As Integer

A quantidade de elementos de um array definida de acordo com os nmeros


que inserimos dentro dos parnteses. Devemos inserir o nmero do primeiro
ndice, a palavra-chave to e o nmero do ltimo ndice. possvel especificar
apenas o ltimo ndice, caso em que o VBA assume 0 como o valor inicial. Os
dois exemplos a seguir criam arrays de 51 elementos:

Dim arrayexemplo(0 to 50) As Integer

Dim arrayexemplo(50) As Integer

Ao executarmos os cdigos adiante, observamos que a macro exemplo1 exibe


na caixa de mensagem a informao Quinta-Feira, contida no ndice nmero
5. Nesse caso, foi indicado o valor inicial do ndice como 1.

303
Excel VBA - Mdulo I

O exemplo2, por sua vez, exibir a informao Sexta-Feira, visto que o ndice
iniciou-se com o valor zero.

Sub exemplo1()
Dim dia_semana(1 To 7) As String
dia_semana(1) = Domingo
dia_semana(2) = Segunda-Feira
dia_semana(3) = Tera-Feira
dia_semana(4) = Quarta-Feira
dia_semana(5) = Quinta-Feira
dia_semana(6) = Sexta-Feira
dia_semana(7) = Sbado
MsgBox dia_semana(5)
End Sub

Sub exemplo2()
Dim dia_semana(6) As String
dia_semana(0) = Domingo
dia_semana(1) = Segunda-Feira
dia_semana(2) = Tera-Feira
dia_semana(3) = Quarta-Feira
dia_semana(4) = Quinta-Feira
dia_semana(5) = Sexta-Feira
dia_semana(6) = Sbado
MsgBox dia_semana(5)
End Sub

Podemos inserir a instruo Option Base 1 na seo Declaraes de um mdulo


para que o VBA assuma 1 como o valor inicial. Com essa instruo, os dois
exemplos a seguir criariam arrays de 50 elementos:

Dim arrayexemplo(1 to 50) As Integer


Dim arrayexemplo(50) As Integer

304
Variveis arrays
8

Com a execuo do exemplo adiante, ser exibido o ms de Fevereiro na caixa


de mensagem:

8.1.2.Arrays multidimensionais
Alm dos arrays unidimensionais, como os criadas nos exemplos anteriores,
podemos criar arrays multidimensionais. Apesar de os arrays multidimensionais
mais utilizados serem os que contm duas ou trs dimenses (que podem ser
imaginadas como matriz e cubos, respectivamente), possvel criar arrays de
at 60 dimenses no VBA.

305
Excel VBA - Mdulo I

Os elementos de arrays multidimensionais so referenciados a partir da


especificao de dois nmeros, como ilustra o exemplo a seguir, que designa
um valor para um elemento de um array multidimensional:

Sub predio()
Dim andar(2, 2) As String
andar(0, 0) = Maria
andar(0, 1) = Matheus
andar(0, 2) = Marina
andar(1, 0) = Jorge
andar(1, 1) = Jos
andar(1, 2) = Joo
andar(2, 0) = Pedro
andar(2, 1) = Paulo
andar(2, 2) = Patrcia
MsgBox Moradores do primeiro Andar: & vbCrLf & _
andar(1, 0) & - & andar(1, 1) & - & andar(1, 2)
End Sub

Foram inseridos dois elementos na matriz andar, cada qual contendo trs
ndices (0, 1 e 2). Podemos supor, ento, que o primeiro elemento corresponda
aos andares e o segundo, aos apartamentos, ou por linhas e colunas se formos
pensar apenas na matriz em si. Assim, teramos como primeiro elemento: ndice
0 (trreo), ndice 1 (primeiro andar) e ndice 2 (segundo andar).

306
Variveis arrays
8
possvel especificar a quantidade de ndices de uma macro multidimensional,
conforme apresentado adiante:

Sub regiao()
Dim area(1 To 2, 1 To 2) As Integer
area(1, 1) = 11
area(1, 2) = 12
area(2, 1) = 21
area(2, 2) = 22
Range(a1).Value = area(1, 1)
Range(a2).Value = area(1, 2)
Range(b1).Value = area(2, 1)
Range(b2).Value = area(2, 2)
End Sub

Podemos utilizar a instruo Option Base 1, assumindo


o valor 1 como sendo o valor inicial de um array, em vez
de zero.

307
Excel VBA - Mdulo I

8.1.3.Arrays dinmicos
Os arrays dinmicos se diferenciam dos demais por no possurem um nmero
predeterminado de elementos. A declarao de um array dinmico feita como
no exemplo a seguir, em que no so inseridos ndices nos parnteses:

Dim arrayexemplo() As Tipo

Antes de utilizarmos um array dinmico, devemos utilizar a instruo ReDim,


que define a quantidade de elementos do array, quantia esta normalmente
determinada durante a execuo do cdigo. Essa instruo pode ser utilizada
quantas vezes forem necessrias para redimensionar o array, como no exemplo
a seguir, que considera que a varivel resultado possui um valor calculado
anteriormente pelo cdigo:

ReDim arrayexemplo(resultado)

Por padro, a instruo ReDim exclui os valores armazenados anteriormente


nos elementos do array. Para evitar esse comportamento, podemos utilizar a
palavra-chave Preserve, como no prximo exemplo:

ReDim Preserve arrayexemplo(resultado)

Supondo que o array arrayexemplo possua atualmente sete elementos e que


a varivel resultado possua um valor atual igual a 10, a instruo ReDim
redimensionar o array, que passar a ter dez elementos e manter os sete
anteriores. Caso a varivel resultado seja igual a 5, o array ter sua a quantidade
de elementos diminuda, mantendo apenas os cinco primeiros elementos dos
sete que tinha anteriormente.

308
Variveis arrays
8
Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

Os arrays, suportados pela maioria das linguagens de programao,


so variveis indexadas, sendo assim armazenam elementos que so
referenciados por um ndice;

Por padro, a contagem das posies de uma varivel array, comea em


zero, mas podemos inici-la em com a posio 1;

O comando Option Base 1 na seo Declaraes de um mdulo faz com


que o VBA assuma 1 como o valor inicial;

Os arrays possuem dimenses;

Arrays podem ser dinmicos, isto , podem ter seu tamanho redefinido
utilizando a instruo ReDim, que define a quantidade de elementos do
array, quantia esta normalmente determinada durante a execuo do cdigo.

309
Variveis arrays
8
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Qual das alternativas a seguir est correta?

a) A varivel array serve apenas para insero de texto.

b) No possvel inserir valor do tipo string em uma varivel array.

c) A varivel array permite que sejam armazenados diversos itens


em uma varivel definida como um nome nico.

d) O limite mximo de argumentos em uma varivel matricial de


20 itens.

e) Nenhuma das alternativas anteriores est correta.

2. Qual a sintaxe para exibir em uma caixa de mensagem o contedo


de uma varivel array, o qual est na posio 8?

a) Dim nome(8) as integer

b) Dim nome(8) as string

c) Msgbox nome(8)

d) Msgbox Redim Nome(8)

e) Range(a2) = dim nome(8)

312
Variveis arrays
8

3. Assinale o comando que permite a criao de variveis array:

a) Dim

b) Redim

c) Option Database

d) Alternativas A e B esto corretas.

e) Alternativas B e C esto corretas.

4. Indique a sintaxe correta para declarar um array bidimensional:

a) Dim area(2, 2) As Integer

b) Dim nome(0 - 1 To 2, 1 To 2) As string

c) Msgbox nome(1 to 10) as double

d) Msgbox nome(3) as string

e) Dim nome(Ana) as string

313
Excel VBA - Mdulo I

5. Para atribuirmos um valor em uma varivel, podemos utilizar qual


comando?

a) Dim nome as Double, byte

b) Option Base 2

c) Msgbox nome(4)

d) Nome(4) = Ana

e) No possvel atribuir valor em uma varivel matriz.

314
8
Variveis arrays
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Utilizando varivel array

1. Desenvolva uma macro chamada ExibirProduto, que dever exibir em uma


Msgbox o nome do produto que estar em promoo, dependendo do dia da
semana, sendo:

Segunda-feira: Caneta;

Tera-feira: Caderno;

Quarta-feira: Lpis;

Quinta-feira: Borracha;

Sexta-feira: Rgua;

Sbado / Domingo: Nenhum produto (retornar nulo).

316
Tratamento de
erros
9
99 Introduo ao tratamento de erros;
99 Tipos de erros;
99 Tratamento em tempo de execuo;
99 Depurador do VBA.
Excel VBA - Mdulo I

9.1.Introduo
Se desejarmos trabalhar com VBA, uma das coisas mais importantes que
devemos ter em mente a probabilidade de ocorrerem erros. Dentre os erros
possveis, existem dois tipos muitos comuns, que so os erros de programao
e os de tempo de execuo.

Por mais que, no momento de desenvolver um aplicativo, tenhamos removido


as falhas do cdigo e criado uma lgica sem defeitos, visando prevenir um
mau funcionamento, ainda assim o cdigo pode travar devido a um problema
operacional. Em muitos casos, exibido nada alm de uma mensagem que
nem sempre traz ajuda para o usurio solucionar o erro.

Como ltimo recurso, podemos usar um cdigo que impede que as mensagens
de erro do Excel sejam exibidas, com o intuito de prever e lidar com os erros
antes que uma delas surja. Ser fcil lidar com erros de programas bem escritos
usando as ferramentas de identificao de erros que o prprio VBA disponibiliza.

9.2.Tipos de erros
Dado o primeiro passo, que saber das chances existentes de ocorrerem erros
e da necessidade de corrigi-los para que se obtenha o resultado esperado, o
segundo passo conhecer os tipos de erros mais frequentes.

Alguns tipos de erros so mais fceis de serem corrigidos do que outros. Erros
de sintaxe, por exemplo, podem ser facilmente impedidos com o recurso de
verificao de sintaxe, o qual exibe uma mensagem informando o erro quando
o cursor posicionado em outra linha. Os erros de tempo de execuo, que
ocorrem quando uma operao no pode ser executada, como excluir uma
clula de uma planilha protegida, tambm so impedidos sem dificuldades.

318
Tratamento de erros
9
Porm, de soluo mais complexa do que erros de sintaxe e de tempo de
execuo, so os de lgica. Isso porque difcil identificar a causa de um
resultado inesperado quando todos os comandos so bem executados. Um
erro desse tipo ocorre, por exemplo, quando digitamos o sinal >= (maior ou
igual a) onde deveria estar o sinal > (maior que) para inserir uma condio em
uma estrutura condicional. Por mais simples que possa parecer, algumas vezes
perdemos muito tempo at encontrar um erro assim e, em alguns casos, pode
ser que se faa necessrio refazer todo um projeto.

Algumas prticas de grande valia, como inserir comentrios


no cdigo e fazer recuo nas linhas, garantem mais agilidade
no momento da manuteno do cdigo.

9.3.Tratamento em tempo de execuo


Um erro pode ser tratado at mesmo enquanto o cdigo executado, desde que
sua presena tenha sido percebida e, portanto, tenha sido feita uma configurao
no cdigo que permite seu tratamento.

A instruo On Error aplicada exatamente nesses casos, pois ela posiciona


no procedimento e pe em funcionamento uma rotina de tratamento de erro.

Da mesma forma que ativa, a instruo On Error tambm


pode ser usada para desativar uma rotina de tratamento
de erro.

319
Excel VBA - Mdulo I

As sintaxes da instruo On Error so trs. A seguir, citamos cada uma delas,


assim como a respectiva descrio:

On Error GoTo line

Nesta sintaxe, o argumento line obrigatrio e determina a linha onde


deve ser iniciada a rotina de tratamento. Podemos definir esse argumento
como qualquer rtulo ou nmero de linha. Seu funcionamento se d
quando ocorre um erro em tempo de execuo e o controle desvia para
line, iniciando o tratamento do erro. Para que no ocorra erro em tempo de
compilao, devemos atentar para o fato de que necessrio especificar a
line no mesmo procedimento onde se encontra a instruo On Error.

No exemplo a seguir, foi criada a varivel idade para receber um valor


numrico. Ser solicitada a insero de um valor dentro de uma caixa de
entrada que ir atribuir o valor digitado dentro da varivel. Sabemos que
uma varivel do tipo Byte no pode armazenar valores do tipo texto (string)
e que esse tipo de varivel aceita somente valores numricos no intervalo
de 0 a 255.

Sub exemplo_erro()
Dim idade As Byte
idade = InputBox(Entre com a idade)
MsgBox A idade & idade
End Sub

Se for digitado na caixa de texto um valor numrico, o mesmo ser exibido


em uma caixa de mensagem. Caso seja digitado um texto, ocorrer um
erro de execuo na macro, visto que a varivel do tipo numrica.

320
Tratamento de erros
9

Ao pressionar o boto OK, surgir o seguinte erro:

Poderemos, ento, utilizar o tratamento de erros. Nesta situao, caso ocorra


qualquer tipo de erro, sero executados os comandos contidos dentro do rtulo
Tratamento.

Para On Error GoTo Tratamento, em caso de erros, o processo seguir para


a instruo Tratamento, que, por sua vez, contm o comando para a exibio
de uma mensagem.

Sub exemplo_erro()
On Error GoTo Tratamento
Dim idade As Byte
Idade = InputBox(Entre com a idade)
MsgBox A idade & idade
Exit Sub
Tratamento:
MsgBox Valor Invlido
End Sub

321
Excel VBA - Mdulo I

Caso no ocorram erros durante a execuo, sero executados todos os


comandos, inclusive o contedo de Tratamento, visto que as linhas de
programao esto sendo executadas em cascata. Dessa forma, para que no
seja exibida a mensagem Valor Invlido mesmo quando for digitado um valor
numrico, necessria a insero da instruo Exit Sub na linha anterior
rotina Tratamento.

Informao digitada.

Comando contido
dentro da rotina
Tratamento.

possvel inserir quantas linhas de comandos forem


necessrias dentro da rotina de tratamento de erros.

On Error Resume Next

Esta sintaxe faz com que o controle passe para a instruo seguinte em
caso de erro de tempo de execuo, e, assim, a execuo continua. Para
acessar objetos, este ser o tipo de tratamento mais apropriado.

322
Tratamento de erros
9
O exemplo a seguir consiste em inserir nas linhas de uma coluna o nome
das barras de ferramentas contidas no Excel. Em caso de erros durante
a execuo, o objeto em questo ser ignorado e o prximo objeto ser
executado (barra de ferramentas):

Sub Nome_Barras()
On Error Resume Next
Dim barra As Object
Range(a1) = Nomes
Range(a2).Select
For Each barra In CommandBars
ActiveCell = barra.Name
ActiveCell.Offset(1, 0).Select
Next
End Sub

On Error GoTo 0

Se utilizarmos esta sintaxe, todo manipulador de erro que estiver ativo no


procedimento atual ser desativado.

Sub exemplo_erro1()
On Error GoTo 0
Dim idade As Byte
idade = InputBox(Entre com a idade)
MsgBox A idade & idade
Exit Sub
Tratamento:
MsgBox Valor Invlido
End Sub

tambm por meio da utilizao da instruo On Error


que impedimos que as mensagens de erro sejam exibidas
no momento da execuo de uma macro.

323
Excel VBA - Mdulo I

Rotinas de tratamento de erros so sees identificadas por um rtulo ou


nmero de linha, e no um procedimento Sub ou Function. Elas identificam a
razo do erro por meio do valor na propriedade Number do objeto Err. Ento,
salvam e testam os valores relevantes, o que deve ser feito antes da ocorrncia
de outro erro ou da execuo de um procedimento que cause um erro. Os
valores de propriedade no objeto Err demonstram apenas o ltimo erro que
ocorreu. Em Err.Description est presente a mensagem de erro relacionada a
Err.Number.

Para cada erro que surge enquanto um procedimento executado, existe


um cdigo correspondente. A propriedade Number da instruo Err permite
identificar e tratar erros, assim como a instruo On Error.

Suponhamos que seja necessria a insero da quantidade de um produto


dentro de uma caixa de texto e tenha sido criada uma varivel do tipo Byte.
Nesse caso, a informao no poder ser do tipo string, nem possuir um valor
acima de 255.

Sub quantidade()
On Error GoTo Tratar
Dim qtde As Byte
qtde = InputBox(Digite a quantidade)
If qtde < 10 Then
MsgBox Estoque Insuficiente
End If
Exit Sub
Tratar:
If Err.Number = 6 Then
MsgBox Valor Excedido. Mximo = 255
ElseIf Err.Number = 13 Then
MsgBox Digite um valor numrico
End If
End Sub

324
Tratamento de erros
9
9.3.1.Erros interceptveis
Em algumas situaes, podemos nos deparar com erros interceptveis. Eles
ocorrem durante a execuo de um aplicativo ou durante o desenvolvimento ou
tempo de compilao. Para testar e responder a erros interceptveis, devemos
usar a instruo On Error ou o objeto Err.

A seguir, temos uma tabela com os nmeros de erros interceptveis. Como


podemos notar, essa lista pula alguns nmeros. Dentre os nmeros pulados, os
de 1 at 1000 sero usados futuramente pelo Visual Basic.

Cdigo do erro Mensagem


3 Retornar sem GoSub.
5 Chamada de procedimento invlida.
6 Estouro.
7 Sem memria.
9 Subscrito fora do intervalo.
10 Esta matriz est fixa ou temporariamente bloqueada.
11 Diviso por zero.
13 Tipos incompatveis.
14 Sem espao para sequncia de caracteres.
16 Expresso muito complexa.
17 No possvel executar a operao solicitada.
18 Ocorreu uma interrupo do usurio.
20 Continuar sem erro.
28 Continuar sem erro.
35 Sub, Function ou Property no definido.
Clientes de aplicativo da DLL ou de recurso de cdigo em
47
excesso.
48 Erro ao carregar recurso de cdigo ou DLL.
Conveno de chamada de recurso de cdigo ou DLL
49
incorreta.
51 Erro interno.
52 Nome ou nmero de arquivo incorreto.
53 Arquivo no encontrado.
54 Modo de arquivo incorreto.

325
Excel VBA - Mdulo I

Cdigo do erro Mensagem


55 Arquivo j aberto.
57 Erro de E/S do dispositivo.
58 O arquivo j existe.
59 Comprimento de registro incorreto.
61 Disco cheio.
62 Entrada aps fim de arquivo.
63 Nmero de registro incorreto.
67 Arquivos em excesso.
68 Dispositivo no disponvel.
70 Permisso negada.
71 Disco no est pronto.
74 No possvel renomear com unidade diferente.
75 Erro de acesso ao Caminho/Arquivo.
76 Caminho no encontrado.
91 Varivel Object ou varivel de bloco With no definida.
92 For Loop no inicializado.
93 Sequncia de caracteres padro invlida.
94 Uso de Null invlido.
No possvel chamar o procedimento Friend ou um objeto
97
que no seja uma ocorrncia da classe de definio.
Uma chamada de propriedade ou mtodo no pode incluir
98 uma referncia a um objeto particular, tanto como um
argumento ou como um valor de retorno.
298 O recurso ou DLL do sistema no pde ser carregado.
No possvel usar nomes de dispositivo de caracteres em
320
nomes de arquivo especificados.
321 Formato de arquivo invlido.
322 No possvel criar o arquivo temporrio necessrio.
325 Formato invlido no arquivo de recursos.
327 Valor de dados nomeado no encontrado.
328 Parmetro no permitido; no possvel gravar matrizes.
335 No foi possvel acessar o Registro do sistema.
336 Componente no registrado corretamente.
337 Componente no encontrado.

326
Tratamento de erros
9
Cdigo do erro Mensagem
338 O componente no foi executado corretamente.
360 Objeto j carregado.
361 No possvel carregar ou descarregar este objeto.
363 Controle especificado no encontrado.
364 O objeto foi descarregado.
365 No possvel descarregar dentro deste contexto.
O arquivo especificado est desatualizado. Este programa
368
requer uma verso mais recente.
O objeto especificado no pode ser usado como um
371
formulrio de proprietrio para Show.
380 Valor de propriedade invlido.
381 ndice de matriz de propriedades invlido.
382 Property Set no pode ser executado em tempo de execuo.
Property Set no pode ser usado com uma propriedade
383
somente leitura.
385 necessrio o ndice de matriz de propriedades.
387 Property Set no permitido.
393 Property Get no pode ser executado em tempo de execuo.
Property Get no pode ser executado na propriedade
394
somente gravao.
O formulrio j est sendo exibido; no possvel exibir de
400
forma modal.
402 O cdigo deve fechar primeiro o formulrio modal superior.
419 Permisso para usar o objeto negada.
422 Propriedade no encontrada.
423 Propriedade ou mtodo no encontrado.
424 Objeto obrigatrio.
425 Uso invlido de objeto.
O componente no pode criar objeto ou referncia de
429
retorno para este objeto.
430 A classe no suporta Automao.
Nome do arquivo ou nome da classe no encontrado durante
432
a operao de Automao.
438 O objeto no suporta esta propriedade ou mtodo.

327
Excel VBA - Mdulo I

Cdigo do erro Mensagem


440 Erro de automao.
A conexo com a biblioteca de tipos ou biblioteca de objetos
442
para o processo remoto foi perdida.
443 O objeto de automao no possui um valor padro.
445 O objeto no suporta esta ao.
446 O objeto no suporta argumentos nomeados.
447 O objeto no aceita a definio de localidade atual.
448 Argumento nomeado no encontrado.
Argumento no opcional ou atribuio de propriedade
449
invlida.
Nmero incorreto de argumentos ou atribuio de
450
propriedade invlida.
451 O objeto no uma coleo.
452 Ordinal invlido.
453 Cdigo de especificado no encontrado.
454 Recurso de cdigo no encontrado.
455 Erro de bloqueio do recurso de cdigo.
457 Esta chave j est associada a um elemento desta coleo.
458 A varivel usa um tipo no suportado no Visual Basic.
459 Este componente no suporta o conjunto de eventos.
460 Formato invlido da rea de transferncia.
461 Mtodo ou membro de dados no encontrado.
A mquina do servidor remoto no existe ou no est
462
disponvel.
463 Classe no registrada na mquina local.
480 No possvel criar uma imagem AutoRedraw.
481 Figura invlida.
482 Erro na impressora.
A propriedade especificada no suportada pelo driver da
483
impressora.
Problemas ao obter informaes da impressora a partir do
484 sistema. Certifique-se de que a impressora esteja configurada
corretamente.
485 Tipo de figura invlido.

328
Tratamento de erros
9
Cdigo do erro Mensagem
No possvel imprimir a imagem do formulrio neste tipo
486
de impressora.
520 No possvel esvaziar a rea de transferncia.
521 No possvel abrir a rea de transferncia.
735 No possvel salvar arquivo no diretrio TEMP.
744 Texto de pesquisa no encontrado.
746 Substituies muito longas.
31001 Sem memria.
31004 Nenhum objeto.
31018 A classe no est definida.
31027 No possvel ativar o objeto.
31032 No possvel criar objeto incorporado.
31036 Erro ao salvar no arquivo.
31037 Erro ao carregar do arquivo.

Criemos uma planilha de acordo com o exemplo a seguir, nomeando o intervalo


das clulas como Estado:

329
Excel VBA - Mdulo I

Criaremos, ento, uma macro onde o usurio dever digitar uma sigla dentro
de uma caixa de entrada para que seja procurado o estado correspondente.
Chamaremos a funo ProcV dentro do cdigo em VBA.

Utilizaremos o comando a seguir para executar uma funo da planilha, estando


dentro do cdigo em VBA. Devemos observar que o nome da funo dever ser
especificado em ingls:

Application.WorksheetFunction. <funo em ingls>(argumentos


da funo)

Digitemos a seguinte macro:

Sub Procura()
On Error GoTo Tratamento
Dim sigla, Result As String
sigla = InputBox(Digite a sigla)
Result = Application.WorksheetFunction. _
VLookup(sigla, Range(estado), 2, 0)
MsgBox Result
Exit Sub
Tratamento:
MsgBox Sigla Invlida
End Sub

A funo VLookup (ProcV) utilizada a partir do VBA possui a mesma


funcionalidade demonstrada quando executada na planilha, ou seja, traz
os dados correspondentes a uma informao encontrada. Caso no exista na
tabela o item procurado, surgir uma mensagem de alerta de erro.

Na verdade, o fato de a sigla no existir na tabela no significa um erro de macro,


mas sim um problema na localizao da informao. Nesse caso, necessrio
colocar o tratamento de erros no procedimento, fazendo com que seja exibida
uma mensagem ao usurio caso no seja localizada determinada sigla.

330
Tratamento de erros
9
Se na macro Procura no tivssemos utilizado o tratamento de erros e, durante
a execuo da macro, fosse inserida uma sigla inexistente, seria exibida a
seguinte mensagem:

9.4.Depurador do VBA
O Excel disponibiliza diversas ferramentas para depurao de erros dos cdigos
VBA. Tais ferramentas so mais eficazes do que as tcnicas abordadas at
agora, porm, so mais complexas, exigindo do desenvolvedor que trabalhe
diretamente com as configuraes.

9.4.1.Pontos de interrupo
Um ponto de interrupo usado para que possamos fazer uma pausa na
execuo de uma rotina e, assim, poder analisar as variveis que esto sendo
usadas; mas sem comprometer tal rotina, que continuar a ser executada
normalmente depois da pausa.

A seguir, so descritos os modos como possvel determinar pontos de


interrupo em um cdigo VBA:

Posicione o cursor e clique sobre a instruo em que deve ser interrompida


a execuo das operaes e, ento, pressione F9;

Clique diretamente na margem cinza esquerda da instruo em que deve


ser interrompida a execuo das operaes;

331
Excel VBA - Mdulo I

Clique sobre a instruo em que deve ser interrompida a execuo das


operaes, clique no menu Depurar e, em seguida, clique em Ativar/
desativar pontos de interrupo;

Clique com o boto direito do mouse sobre a instruo em que deve ser
interrompida a execuo das operaes e, no menu de atalho que surgir,
aponte para Alternar e, em seguida, clique em Pontos de interrupo.

O exemplo a seguir demonstra os resultados da configurao de um ponto de


interrupo. O ponto de interrupo faz com que a margem cinza esquerda
da instruo fique marcada com um ponto.

332
Tratamento de erros
9
possvel definir mais de uma linha com ponto de interrupo dentro de uma
macro. No cdigo a seguir, ao executar a macro, sero executados os comandos
at chegar ao primeiro ponto de interrupo, e ento ela fica marcada de amarelo.

Ao pressionar a tecla F5, sero executados os comandos contidos na linha


demarcada do primeiro ponto de interrupo, at chegar ao prximo ponto de
interrupo.

Caso no existam mais pontos de interrupo, a macro ser executada at o


final.

333
Excel VBA - Mdulo I

Quando a execuo do procedimento chegar linha na qual est configurado um


ponto de interrupo, automaticamente o Excel iniciar o modo de interrupo
e, ento, a palavra Interromper passar a ser exibida na barra de ttulos do
VBE, como vemos na imagem anterior.

Quando o modo de interrupo ativado, torna-se possvel realizar algumas


aes no cdigo, pois sua execuo fica suspensa at determinarmos sua
reativao. Alm disso, ao posicionarmos o mouse sobre uma varivel, podemos
visualizar seu valor em uma janela pop-up. As aes que podemos realizar so
descritas a seguir:

Digitar instrues VBA na janela Verificao imediata;

Observar a sequncia do cdigo e analisar cada uma das linhas para conferir
o que for necessrio;

Pular ou retroceder algumas instrues para depois continuar a executar o


cdigo;

Editar instrues antes de continuar a execuo do cdigo.

Aps fazer as observaes desejadas, podemos retornar execuo do


procedimento clicando no boto Executar macro, presente na barra de
ferramentas do VBE ou, simplesmente, pressionando a tecla F5.

334
Tratamento de erros
9
Os pontos de interrupo, depois de inseridos, tambm podem ser removidos
do procedimento. Para remover um deles existem dois modos diferentes:
podemos clicar sobre o ponto da margem esquerda ou posicionar o cursor
sobre a linha que est em realce amarelo e clicar F9. Para remov-los todos do
mdulo de uma s vez, devemos pressionar CTRL + SHIFT + F9.

A palavra Stop funciona como uma palavra chave do VBA,


a qual inicia o modo de interrupo quando a execuo
do cdigo chega at ela. Porm, se o cdigo estiver
protegido, esta palavra chave ser ignorada.

335
Excel VBA - Mdulo I

9.4.1.1. Janela Verificao imediata

A janela Verificao imediata, ilustrada a imagem a seguir, exibe tanto as


informaes que resultam de instrues de depurao do cdigo como os
comandos que podemos digitar diretamente nela. Para exibi-la, basta clicar em
Exibir / Verificao imediata ou pressionar CTRL + G.

Se desejarmos executar um cdigo na janela Verificao imediata, devemos


apenas digitar uma linha de cdigo nela e pressionar ENTER. Nos seguintes
tpicos, esto descritas as aes que podemos realizar por meio dessa janela:

Testar cdigos novos ou problemticos;

Consultar ou alterar, durante a interrupo na execuo de um aplicativo,


valores de variveis da mesma forma como seria feito no cdigo;

Consultar ou alterar um valor de propriedade durante a execuo de um


aplicativo;

Chamar procedimentos da mesma forma como seria feito no cdigo;

Visualizar sada de depurao durante a execuo do programa.

Devemos nos lembrar que utilizar a janela Verificao imediata equivalente


a inserir instrues em mdulo especfico, pois elas so executadas em um
determinado contexto.

336
Tratamento de erros
9
A fim de realizarmos testes, podemos digitar o comando dentro da janela
Verificao imediata. Ao pressionarmos a tecla ENTER, o mesmo ser executado.

O posicionamento da janela Verificao imediata pode ser alterado quando


a arrastamos para outro local na tela. Essa ao apenas no ser possvel nos
casos em que a janela tiver sido definida como encaixvel por meio da caixa de
dilogo Opes, na guia Encaixe.

337
Excel VBA - Mdulo I

Podemos executar funes dentro da janela Verificao imediata. Para tal,


basta iniciar o comando com um ponto de interrogao.

Podemos testar a execuo linha a linha de uma macro com a utilizao da


tecla de funo F8 e exibir o contedo de determinada varivel dentro da janela
Verificao imediata. Utilizaremos o comando Debug.Print <varivel>.

Durante a execuo, ao se
posicionar o ponteiro do
mouse sobre uma varivel,
seu valor ser exibido em
uma caixa de comentrio.

Valores da varivel num


em cada execuo dentro
do lao Until.

Para fechar a janela, basta clicar no boto Fechar, localizado no canto superior
direito da janela. Pode ser que, em alguns casos, esse boto no esteja visvel;
ento, devemos dar um clique duplo na barra de ttulos, o que far com que o
boto Fechar aparea.

338
Tratamento de erros
9
9.4.1.2. Janela Inspees de variveis

A janela Inspees de variveis, ilustrada na imagem seguinte, mostra valores


de variveis e de expresses para verificao. Para exibi-la, v at a guia Exibir
e clique em Janela Inspeo de variveis.

A seguir, sero descritas as informaes que cada uma das colunas de Inspees
de variveis exibe:

Expresso: Esta primeira coluna mostra as expresses de inspeo de


variveis. Podemos notar que tambm exibido o cone de inspeo de
variveis esquerda de cada expresso;

Valor: Esta coluna exibe os valores que as expresses possuam no momento


em que foi feita a transio para o modo de interrupo. Aqui podemos
alterar valores digitando um novo valor para uma expresso e, em seguida,
validar a alterao clicando em outro local da janela ou pressionando
qualquer uma das seguintes teclas: ENTER, TAB, SHIFT + TAB ou as teclas
de seta para cima ou para baixo. Se tiver sido digitado um valor considerado
invlido, o campo para edio continuar ativo com o valor realado e uma
mensagem comunicando o erro surgir. Para cancelar uma alterao, basta
pressionar ESC;

Tipo: Nesta coluna exibido o tipo de cada expresso;

Contexto: O contexto da expresso de inspeo de variveis mostrado


nesta coluna. Se o valor atual da expresso no for exibido, significa que
o contexto da expresso no estava em escopo no momento da transio
para o modo de interrupo.

339
Excel VBA - Mdulo I

Para inserir uma varivel na janela Inspees de variveis, devemos clicar


sobre a varivel e arrast-la, soltando-a dentro da janela, conforme mostra o
exemplo a seguir:

Para inserir uma expresso dentro da janela, basta selecionar a expresso e


arrast-la da mesma forma que foi inserida a varivel. Observemos o exemplo
adiante:

340
Tratamento de erros
9

Os cabealhos das colunas da janela Inspees de variveis so ajustveis,


ou seja, podemos aumentar ou diminuir sua largura arrastando cada uma das
bordas para a direita ou para a esquerda. Para fechar a janela, basta clicar no
boto Fechar, localizado no canto superior direito da janela. Pode ser que,
em alguns casos, esse boto no esteja visvel; ento, devemos dar um clique
duplo na barra de ttulos, o que far com que o boto Fechar aparea para que
possamos clicar sobre ele.

possvel arrastar variveis tanto para dentro da janela


Verificao imediata quanto para a janela Inspees de
variveis.

341
Excel VBA - Mdulo I

Pontos principais
Atente para os tpicos a seguir. Eles devem ser estudados com muita
ateno, pois representam os pontos mais importantes do captulo:

Se desejarmos trabalhar com VBA, uma das coisas mais importantes que
temos que ter em mente a probabilidade de ocorrerem erros. Dentre os
erros possveis, existem dois tipos muitos comuns, que so os erros de
programao e os de tempo de execuo;

Alguns tipos de erro so mais fceis de serem corrigidos do que outros.


Erros de sintaxe, por exemplo, podem ser facilmente impedidos. Os erros
de tempo de execuo tambm so impedidos sem dificuldades. Porm, de
soluo mais complexa do que erros de sintaxe e de tempo de execuo
so os erros de lgica;

Um erro pode ser tratado at mesmo enquanto o cdigo executado, desde


que sua presena tenha sido percebida e, portanto, tenha sido feita uma
configurao no cdigo que permite seu tratamento;

O Excel disponibiliza diversas ferramentas para depurao de erros dos


cdigos VBA. Tais ferramentas so eficazes, porm, so complexas, exigindo
do desenvolvedor que trabalhe diretamente com as configuraes.

342
Tratamento
de erros
9
Teste seus conhecimentos
Excel VBA - Mdulo I

1. Qual das alternativas a seguir est correta?

a) Ao executarmos uma macro com a utilizao da tecla de funo


F8, se posicionarmos o cursor do mouse sobre uma varivel, ser
exibida uma caixa de texto informando o seu contedo.

b) CTRL + Q ativa a janela Verificao imediata.

c) O comando Debug. Print cancela a execuo de uma macro.

d) No possvel executar uma funo na janela Verificao


imediata.

e) Nenhuma das alternativas anteriores est correta.

2. Qual dos procedimentos a seguir permite ignorar um erro em


tempo de execuo, passando para a instruo posterior?

a) Utilizar Exit sub.

b) Pressionar a tecla de funo F2.

c) Utilizar On Error Resume Next.

d) Utilizar Exit For.

e) Utilizar a janela Verificao Imediata.

344
Tratamento de erros
9
3. O que faz o comando On Error GoTo Teste?

a) Exibe a mensagem de teste durante um erro.

b) Ativa o depurador de funes em caso de erros.

c) Em caso de erro durante a execuo, executa a rotina


denominada Teste.

d) Encerra a execuo da macro.

e) Nenhuma das alternativas anteriores est correta.

4. O que utilizamos para que no momento da execuo de uma macro


seja realizada uma pausa em determinada linha do cdigo?

a) Janela Verificao imediata

b) Depurador VBA

c) Ponto de interrupo

d) Tecla de funo F5

e) Nenhuma das alternativas anteriores est correta.

345
Excel VBA - Mdulo I

5. Qual a quantidade mxima de linhas que podemos inserir em


uma rotina de tratamento de erros?

a) 2

b) 10

c) 5

d) 18

e) Nenhuma das alternativas anteriores est correta.

346
Tratamento
de erros
9
Mos obra!
Excel VBA - Mdulo I

Laboratrio 1
A Utilizando tratamento de erros em tempo de execuo

1. Desenvolva uma macro chamada Calcular, que dever exibir nas clulas de
C8 a C11 o resultado do clculo entre os valores digitados nas clulas C5 e C6:

Armazene os contedos das clulas C4 e C5 em variveis do tipo BYTE;

A macro s dever exibir os resultados se as condies a seguir forem


satisfatrias:

Os contedos das clulas C5 e C6 devero ser numricos. Exibir a mensagem


Favor digitar valor numrico;

O contedo da clula C6 no poder ser 0 (zero);

Os contedos das clulas C5 e C6 no podero ser superiores ao valor 255.

Caso essas condies no sejam satisfatrias, utilize tratamentos de erro


exibindo uma mensagem de alerta ao usurio e limpar todos os valores:

Mensagem caso a condio


Condio
no seja satisfatria
Se o contedo de C5 e/ou C6 for
Favor digitar valor numrico.
texto.
No possvel dividir um valor
Se o contedo de C6 for 0 (zero).
por zero.
Os valores das clulas C5 e C6
Se o contedo de C5 e/ou C6 for
no podero ser superiores a
superior a 255.
255.
Um erro diferente dos trs
Erro interno: & Err.Number
anteriores.

348
Tratamento de erros
9
Observemos a planilha de exemplo:

2. Crie um boto que execute a macro Calcular.

349