Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
INTRODUÇÃO
Esta apostila foi desenvolvida pela TORCH Engenharia e Computação Gráfica para apoio ao aluno
durante o desenvolvimento do curso de Excel com VBA.
Abrange os conceitos fundamentais para criação de macros e funções interagindo com o Excel.
O conteúdo programático deste curso foi projetado com o propósito de, ao final do curso, tornar o
aluno apto a desenvolver macros e funções aplicadas para o Excel, com objetivo de otimizar suas
tarefas na realização dos seus trabalhos.
SUMÁRIO
INTRODUÇÃO....................................................................................................................................................... 2
SUMÁRIO ............................................................................................................................................................. 3
CAPÍTULO 1 .......................................................................................................................................................... 5
Apresentação do Excel com VBA ..................................................................................................................... 5
Como Criar Macros. ......................................................................................................................................... 6
Gravando Uma Macro ..................................................................................................................................... 6
O Editor do Visual Basic ................................................................................................................................... 7
Associando Uma Macro ................................................................................................................................... 8
Exercícios: ...................................................................................................................................................... 12
CAPÍTULO 2 ........................................................................................................................................................ 14
O Ambiente de Programação (Editor VBA) ................................................................................................... 14
Editando Uma Macro..................................................................................................................................... 16
Estrutura de Uma Macro ............................................................................................................................... 17
Nível de Acesso de Uma Sub ou Function (Escopo) ...................................................................................... 17
Passagem de Parâmetros (ByRef / ByVal) ..................................................................................................... 18
Declaração de Variáveis e Constantes........................................................................................................... 18
Escopo de Variáveis e Constantes ................................................................................................................. 20
Criando Funções de Usuário .......................................................................................................................... 21
Exercícios: ...................................................................................................................................................... 22
CAPÍTULO 3 ........................................................................................................................................................ 23
Comandos de Interação Com o Usuário ........................................................................................................ 23
MsgBox ...................................................................................................................................................... 23
Concatenação e Quebra de linha .............................................................................................................. 25
InputBox .................................................................................................................................................... 26
Funções do VBA ............................................................................................................................................. 27
Funções de Conversão de Tipo .................................................................................................................. 27
CDbl ....................................................................................................................................................... 27
CSng ....................................................................................................................................................... 27
CLng ....................................................................................................................................................... 27
CInt ........................................................................................................................................................ 27
CStr ........................................................................................................................................................ 27
Funções de Informação ............................................................................................................................. 27
IsNumeric............................................................................................................................................... 27
IsDate ..................................................................................................................................................... 27
IsNull ...................................................................................................................................................... 27
Is Nothing............................................................................................................................................... 27
VarType.................................................................................................................................................. 27
Funções de Manuseio de Strings ............................................................................................................... 28
Left ......................................................................................................................................................... 28
Right....................................................................................................................................................... 28
Mid......................................................................................................................................................... 28
Len ......................................................................................................................................................... 28
UCase ..................................................................................................................................................... 28
LCase ...................................................................................................................................................... 28
Instr........................................................................................................................................................ 28
Funções Diversas ....................................................................................................................................... 28
Int........................................................................................................................................................... 28
Round .................................................................................................................................................... 28
MOD....................................................................................................................................................... 29
DIR ......................................................................................................................................................... 29
ASC ......................................................................................................................................................... 29
CHR ........................................................................................................................................................ 29
Exercícios: ...................................................................................................................................................... 29
CAPÍTULO 4 ........................................................................................................................................................ 30
Comandos de Estrutura de Decisão .............................................................................................................. 30
Condição Simples - If / Then / End If ......................................................................................................... 30
Condição Composta - If / Then / Else/ End If............................................................................................. 30
Condição Encadeada - If / Then / ElseIf / Else / End If .............................................................................. 30
Múltipla Escolha – Select / Case / Case Else / End Select.......................................................................... 31
Operadores Lógicos And / Or / Not ........................................................................................................... 31
Exercícios: ...................................................................................................................................................... 32
CAPÍTULO 5 ........................................................................................................................................................ 33
Comandos de Estrutura de Repetição (Laços)............................................................................................... 33
Do While / Loop ou Do / Loop While......................................................................................................... 33
Do Until / Loop ou Do / Loop Until ............................................................................................................ 33
Repetição com variável de controle - For / Next....................................................................................... 34
Repetição com objetos de coleção For Each / Next .................................................................................. 34
Exercícios: ...................................................................................................................................................... 35
CAPÍTULO 6 ........................................................................................................................................................ 36
Manipulando Objetos do Excel...................................................................................................................... 36
Coleção Workbooks / Objeto Workbook .................................................................................................. 36
Coleção WorkSheets / Objeto WorkSheet ................................................................................................ 37
Objeto Range ............................................................................................................................................. 38
Objeto Cells ............................................................................................................................................... 39
Eventos de Objetos Excel .............................................................................................................................. 40
Exercícios: ...................................................................................................................................................... 41
CAPÍTULO 7 ........................................................................................................................................................ 42
Formulários de Usuários(UserForms)............................................................................................................ 42
Adicionando um Formulário e Inserindo Controles ...................................................................................... 42
Propriedades e Métodos dos Controles ........................................................................................................ 45
Eventos dos Controles ................................................................................................................................... 48
Exercícios: ...................................................................................................................................................... 49
CAPÍTULO 8 ........................................................................................................................................................ 50
Validação de Dados ....................................................................................................................................... 50
Tratamento de Erros...................................................................................................................................... 52
Comando On Error Goto ... / Resume ....................................................................................................... 52
Exercícios: ...................................................................................................................................................... 53
EXERCÍCIO DE REVISÃO...................................................................................................................................... 54
CAPÍTULO 1
VBA é a abreviação de Visual Basic for Applications e é uma linguagem de programação derivada do
Visual Basic e incorporada nos componentes do pacote de aplicativos Microsoft Office. Para cada
elemento do pacote Office o VBA apresenta objetos específicos para serem manuseados por meio
de programação.
O VBA fornece meios de automatizar praticamente tudo que é possível fazer manualmente. Através
de códigos de programação é possível acessar e manipular os objetos disponíveis no Excel, ou seja,
pastas de trabalho, guias de planilhas, células, gráficos, etc. A essa automatização de tarefas por
meio de programação damos o nome de macro, para ser mais específico, chamamos de macro o
processo em que a chamada de um programa pré-definido realiza atividades que poderiam ser
realizadas manualmente.
Após ativar a barra de ferramentas “Desenvolvedor” será possível ver as opções relacionadas às
macros que o Excel disponibiliza:
Existem duas maneiras de criarmos uma macro no Excel: utilizando o gravador de macros ou
escrevendo toda a codificação necessária diretamente no Editor do Visual Basic.
Para gravar uma macro clique o botão “Gravar Macro”. Na janela que será exibida
digite o nome da macro, escolha a tecla de atalho que irá executar a macro, defina onde a macro
será armazenada e, opcionalmente, digite um texto que descreva a finalidade da macro. A partir do
momento em que o botão “Ok” for clicado o Excel irá registrar tudo que for feito e só irá parar
quando o botão “Parar Gravação” for clicado.
OBS: Será escrito um programa na linguagem VBA contendo comandos para executar todos os
procedimentos que foram executados durante o processo de gravação. Posteriormente esse
programa poderá ser editado.
Esta pasta de trabalho – a macro será gravada e só poderá ser utilizada na pasta de
trabalho atual.
Nova pasta de trabalho – o Excel irá criar uma nova pasta e a macro será associada a essa
nova pasta.
Pasta de trabalho pessoal de macros – a macro será criada em uma pasta disponibilizada
pelo Excel especificamente para o armazenamento de macros e estará disponível para
utilização em qualquer pasta que estiver sendo utilizada.
A outra forma de criarmos uma macro é utilizando o Editor do Visual Basic para escrever o código
necessário.
Depois de criada a macro, seja pelo Gravador de Macros ou pelo Editor do Visual Basic, podemos
associá-la a um botão na barra de ferramentas, a um botão criado na planilha ou a qualquer
desenho inserido na planilha.
O primeiro passo é criar a sua própria guia de opções, para isso clique na opção “Arquivos –
Opções”, na janela que será exibida selecione a opção “Personalizar Faixa de Opções”, clique o
botão “Nova Guia”. Selecione a nova guia criada, clique o botão “Renomear” e defina um nome
para a guia.
Ainda na mesma tela, na opção “Escolher comandos em:” selecione a opção Macros
Serão exibidas todas as macros que estiverem disponíveis na pasta de trabalho atual ou na pasta
de trabalho pessoal de macros. Selecione o “Novo Grupo(Personalizado)” na guia recém criada e
adicione a sua macro ao grupo clicando o botão “Adicionar >>”
Na guia de opções “Desenvolvedor” clique o botão “Inserir” e selecione a opção “Botão (Controle de
Formulário)”.
Após desenhar o botão no local desejado da planilha será exibida uma janela onde você poderá
criar uma nova macro utilizando um dos dois métodos já mostrados ou escolher uma das macros
previamente criadas para associar ao botão.
Por fim veremos como associar uma macro a uma autoforma ou a qualquer imagem ou objeto que
esteja inserido na planilha:
Clique com o botão direito do mouse na autoforma, imagem, gráfico ou objeto e selecione a opção
“Atribuir Macro...”
Será exibida a janela “Atribuir macro” onde é possível criar uma nova macro ou associar o objeto
selecionado a uma macro previamente criada.
Exercícios:
1) Grave uma macro com o nome “FormatarFonte”, associada a combinação de teclas “Ctrl
+Shift + F” e que aplique a seguinte formatação à(s) célula(s) selecionada(s):
2) Crie duas planilhas conforme os modelos abaixo onde na planilha “Vendas” a coluna “E”
totaliza as vendas do primeiro trimestre e a coluna “I” as vendas do segundo trimestre; na
planilha comissões as colunas “C” e “E” devem exibir o valor de comissão de 5% sobre o
primeiro e segundo semestre respectivamente.
3) Grave uma macro com o nome “CopiaVendas” que copie os nomes das vendedoras e os
valores do primeiro e do segundo semestre da planilha “Vendas” para a planilha
“Comissões”, associe a macro à combinação de teclas “Ctrl + Shift + K”.
4) Grave uma macro com o nome “ExcluiDados”, associada a combinação de teclas “Ctrl +Shift
+ D” e que exclua os dados das faixas de células “A3:B7” e “D3:D7” da planilha “Comissões”
5) Crie uma nova guia de opções na “Faixa de Opções” com o nome “Exercícios Macros” e
adicione nessa guia as macros criadas.
6) Crie três botões do tipo “Botão (Controle de Formulário)” na planilha associando as macros
criadas.
CAPÍTULO 2
Em “Projeto – VbaProject” são exibidas todas as pastas de trabalhos que estiverem abertas com
suas respectivas planilhas.
Em “Microsoft Excel Objetos” são mostrados objetos que podem ser programados de alguma forma.
Cada um desses objetos terá eventos programáveis. Os eventos respondem às interações do
usuário. Existem eventos que são associados à pasta de trabalho e eventos associados às guias de
planilha. Com duplo clique no objeto é possível ver quais os eventos que podem ser codificados.
Em “Módulos” são exibidos os módulos de programação inseridos automaticamente pelo Excel para
a codificação das macros de gravação. Também é possível inserir a qualquer tempo um novo
módulo de programação.
No item “(Geral)” é possível criar novas rotinas de programas e funções. No item “Workbook” é
possível codificar os eventos que estão associados a pastas de trabalho.
Em “Módulos” o “Módulo1” contém os códigos criados pelo Excel para as macros de gravação:
Todas as linhas sublinhadas podem ser removidas sem nenhum prejuízo, pois são instruções que
informam que formatos não serão aplicados no texto selecionado.
Os códigos de programação de uma macro devem ser escritos dentro de uma rotina do tipo Sub ou
dentro de uma rotina do tipo Function, ambos os modos de programar podem executar os mesmos
tipos de comandos e realizar as mesmas ações, mas só uma Function pode retornar um valor ao
programa que a executou ou pode retornar um valor diretamente em uma célula de uma planilha.
Veja abaixo exemplos ainda rudimentares de como começar a escrever uma macro.
Sub ExemploDeSub()
<Códigos de programação>
<Códigos de programação>
End Sub
Function ExemploDeFunction()
<Códigos de programação>
<Códigos de programação>
ExemploDeFunction = <Valor que irá retornar>
End Function
Uma rotina de programação, seja ela uma Sub ou uma Function, possui um nível de acesso,
também chamado de escopo de atuação, que define quem poderá executar essa rotina. Este
escopo pode ser público ou privado. As rotinas de programação públicas podem ser executadas por
qualquer programa que faça referência a elas corretamente, as privadas só podem ser executadas a
partir do local onde foram criadas.
Para definir o escopo de uma rotina são utilizados os comandos “Public” e “Private” conforme os
exemplos abaixo:
Public Sub ExemploDeSub()
<Códigos de programação>
<Códigos de programação>
End Sub
Private Function ExemploDeFunction()
<Códigos de programação>
<Códigos de programação>
ExemploDeFunction = <Valor que irá retornar>
End Function
Caso não seja definido um escopo, o padrão do VBA é assumir o escopo público, logo, a utilização do
comando “Public” é opcional.
As rotinas de programação também podem receber informações que serão utilizadas em sua
execução, essas informações são chamadas de parâmetros.
Nos exemplos abaixo, tanto a Sub quanto a Function, estão recebendo três parâmetros. Esses
parâmetros serão utilizados na codificação da rotina.
Public Sub ExemploDeSub(ByVal strNome As String, ByVal strCargo as String, ByRef dblSalário as
Double)
<Códigos de programação>
<Códigos de programação>
End Sub
A passagem de parâmetros pode ser “ByRef” por referência ou “ByVal” por valor. Na passagem por
referência a chamada para o programa passa como parâmetro um endereço de memória onde está
o valor que será manuseado pela rotina, nesse caso, se durante esse manuseio o valor desse
parâmetro for alterado, a alteração irá refletir no procedimento que fez a chamada. Na passagem
por valor, a chamada para o programa passa como parâmetro uma cópia do valor que será
manuseado pela rotina, assim, se durante esse manuseio o valor do parâmetro for alterado, a
alteração não irá refletir no procedimento que fez a chamada.
Além dos objetos disponíveis no Excel, uma macro também manipula variáveis e constantes.
Uma variável é um espaço reservado na memória do computador para guardar um valor que
poderá ser acessado e alterado durante a execução de um programa
Uma constante é um espaço reservado na memória do computador utilizado para guardar um valor
que poderá ser acessado, mas não poderá ser alterado durante a execução de um programa.
Dim – Declara uma variável de um determinado tipo que será inicializada toda vez que a rotina for
executada, tendo o seu valor zerado a cada execução da rotina.
Static – Declara uma variável de um determinado tipo que será inicializada apenas na primeira vez
que a rotina for executada, podendo manter o seu valor caso a rotina seja executada mais de uma
vez.
Os tipos de variáveis e constantes devem ser definidos de acordo o valor que será armazenado
seguindo a tabela abaixo:
Existem algumas convenções para a definição dos nomes de variáveis que são recomendáveis,
embora não sejam obrigatórias:
Devem possuir um prefixo que identifique o tipo da variável, abaixo alguns exemplos:
Assim como as rotinas de programação as variáveis também podem ser públicas ou privadas e
também possuem um nível de acesso. Mas no caso de variáveis e constantes esses níveis
dependem primeiro do local onde elas foram declaradas.
Variáveis e constantes declaradas dentro de uma Sub ou Function só podem ser acessadas dentro
da Sub ou Function onde foram declaradas. Não é permitido utilizar os comandos Public e Private
em declarações de variáveis dentro de uma Sub ou Function.
Variáveis declaradas fora de uma Sub ou Function podem ser declaradas com “Public” ou “Private”.
Se declaradas com “Private” só serão acessadas pelos programas que pertençam ao mesmo local
onde elas foram declaradas. Se declaradas com “Public” poderão ser acessadas por qualquer
programa de qualquer local que as referencie corretamente. O escopo padrão na declaração de
variáveis é “Private”.
Com o que já vimos até aqui podemos criar uma função de usuário simples, que poderá ser
utilizada em qualquer planilha de nossa pasta de trabalho.
Vamos criar uma função de nome MediaPonderada que receba duas notas com seus respectivos
pesos, calcule e retorne a média ponderada das notas.
Caso seja necessário exiba o editor do Visual Basic clicando no botão “Visual Basic” na guia de
opções “Desenvolvedor”.
Se na sua pasta de trabalho ainda não existir nenhum módulo criado insira um novo módulo
clicando na opção “Inserir – Módulo”
MediaPonderada = sngCalculoMedia
End Function
Exercícios:
CAPÍTULO 3
Durante a execução de uma rotina ou função pode ser necessário exibir alguma informação para o
usuário ou solicitar que o usuário forneça alguma informação, para essas situações existem
comandos no VBA responsáveis por interagir com o usuário, são eles:
MsgBox
O MsgBox exibe uma caixa de mensagem para o usuário e ao mesmo tempo pode receber
respostas simples como Ok/Cancelar, Sim/Não, Abortar/Repetir/Ignorar. Com essas opções é
possível utilizar o MsgBox para interações simples, mas efetivas com o usuário.
Existem duas sintaxes possíveis para o MsgBox, uma para apenas exibir uma mensagem e
outra caso seja necessário receber uma resposta:
O TipoDeMensagem serve para definir o estilo da caixa de mensagem e os botões que serão
exibidos para interação com o usuário. O VBA disponibiliza várias constantes internas que
podem ser combinadas para definirem a aparência da caixa de mensagem.
Vale ressaltar que se não for utilizada nenhuma constante para definir o botão que será
exibido, por padrão, será utilizado a constante “vbOkOnly”.
Constantes para definir o estilo da caixa de mensagem
Constante Estilo da Caixa de Mensagem
vbCritical Erro Crítico
vbQuestion Pergunta
vbExclamation Aviso
vbInformation Informação
Constantes para definir que botões serão exibidos
Constante Botão
vbOkOnly Apenas o OK (Esse é o padrão)
vbOkCancel OK e Cancelar
vbAbortRetryIgnore Abortar, Repetir e Ignorar
vbYesNoCancel Sim, Não e Cancelar
vbYesNo Sim e Não
vbRetryCancel Repetir e Cancelar
Ex: MsgBox “Exemplo utilizando o estilo Erro Crítico”, vbCritical, “Esse é o Título”
Ex: MsgBox “Exemplo utilizando o estilo Informação”, vbInformation, “Aqui fica o título da
mensagem”
Ex: intResp = MsgBox (“Mensagem com os botões Sim/Não e o estilo Aviso”, vbExclamation +
VbYesNo, “Título da Mensagem”), nesse exemplo “intResp” é o nome da variável que irá
receber a resposta do usuário, ou seja, se ele clicou o botão “Sim” ou o botão “Não”
Para fazer quebras de linhas o VBA disponibiliza a constante vbCrLf que deve ser utilizado
sempre que for necessário forçar quebras de linhas em uma mensagem.
Sub ProgramaExemplo()
Dim strMensagem As String
Veja o resultado:
InputBox
O InputBox exibe uma caixa de entrada que pode ser utilizada para solicitar qualquer
informação do usuário.
Nessa sintaxe strResp é a variável que irá armazenar a resposta do usuário, salientando que
toda informação recebida do InputBox a princípio é do tipo String.
Ex:
Sub ProgramaSimples()
Dim strNome As String
Funções do VBA
CSng
Converte um número ou uma string de conteúdo numérico para o tipo Single.
CLng
Converte um número ou uma string de conteúdo numérico para o tipo Long.
CInt
Converte um número ou uma string de conteúdo numérico para o tipo Integer.
CStr
Converte qualquer valor para o tipo String
Funções de Informação
Funções de informação são utilizadas para nos dar informações sobre valores ou variáveis.
IsNumeric
Retorna Verdadeiro ou Falso informando se o valor avaliado é ou não numérico.
IsDate
Retorna Verdadeiro ou Falso informando se o valor avaliado é ou não uma data.
IsNull
Retorna Verdadeiro ou Falso informando se o valor avaliado é ou não um valor nulo.
Is Nothing
Retorna Verdadeiro ou Falso informando se um objeto foi ou não inicializado. Sintaxe:
objNomeObjeto Is Nothing.
VarType
Retorna o tipo da variável ou valor avaliado. Para identificar o tipo utiliza-se as constante
do VBA para cada tipo de variável possível: vbInteger, vbLong, vbSingle, vbDouble,
vbCurrency, vbDate, vbString, vbObject.
Right
Retorna n caracteres que estejam à direita da string. Sintaxe: Right(String,n)
Mid
Retorna n caracteres que estejam à esquerda da string a partir de uma posição inicial.
Sintaxe: Mid(String,p,n)
Len
Retorna a quantidade de caracteres de uma string.
UCase
Converte uma string para maiúsculas.
LCase
Converte uma string para minúsculas.
String
Repete um caractere n vezes. Sintaxe: String(n,”X”), Ex: String(3,”A”) => “AAA”
Instr
Retorna a posição em que uma string foi encontrada dentro de outra a partir de uma
posição inicial. Sintaxe: Instr(1,String1,String2). Ex: Instr(1,”ABCDEFG”,”D”). Neste
exemplo a função irá retornar o número 4 que é a posição da string “D” dentro da string
“ABCDEFG”.
Funções Diversas
Mais algumas funções úteis.
Int
Retorna a parte inteira de um número fracionado, Ex: Int(9.9) => 9
Round
Arredonda um número para n casas decimais, Ex: Round(9.1256,2) => 9,13
MOD
Retorna o resto de uma divisão, Ex: 3 MOD 2 => 1
DIR
Retorna o nome de um arquivo se este estiver no caminho informado ou vazio caso este
não esteja no caminho, Ex: Dir(“C:\Windows\notepad.exe”) => “notepad.exe” ou “”
ASC
Retorna o código ASCII do caractere informado, Ex: ASC(“A”) => 65. O código ASCII
(American Standard Code for Information Interchange) é um código que define um valor
numérico para cada caractere.
CHR
Retorna o caractere do código ASCII fornecido, Ex: CHR(65) => “A”.
Exercícios:
CAPÍTULO 4
Else
<Códigos de programação caso nenhuma condição anterior seja atendida >
< Códigos de programação caso nenhuma condição anterior seja atendida >
End If
Exercícios:
1) Desenvolva uma Sub que solicite um valor ao usuário e calcule o valor da comissão
obedecendo os seguintes critérios:
a. Valores de vendas até R$ 20.000,00 será pago 5% de comissão
b. Valores de vendas acima de R$ 20.000,00 até R$ 30.000,00 será pago 10% de
comissão
c. Valores acima de R$ 30.000,00 até R$ 40.000,00 será pago 15% e para valores
acima de R$ 40.000,00 a comissão será de 20%.
d. A Sub deverá exibir em uma caixa de mensagem o valor digitado e o valor que será
pago pela comissão
2) Altere a Sub “CalculaIMC” criada no exercício anterior para além de exibir o nome digitado e
o IMC calculado exibir também o diagnóstico baseado no valor do IMC seguindo a seguinte
tabela:
a. Abaixo de 17 => Muito abaixo do peso
b. Entre 17 e 18,49 => Abaixo do peso
c. Entre 18,5 e 24,99 => Peso normal
d. Entre 25 e 29,99 => Acima do peso
e. Entre 30 e 34,99 => Obesidade I
f. Entre 35 e 39,99 => Obesidade II (severa)
g. Acima de 40 => Obesidade III (mórbida)
CAPÍTULO 5
Do
<Códigos de programação que serão repetidos>
Loop While <Condição 1>
Do
<Códigos de programação que serão repetidos>
Loop Until <Condição 1>
Executa um bloco de instruções enquanto a variável de controle não alcançar o seu valor
final. Sintaxe: For intVariavelControle = <Valor Inicial> To <Valor Final> Step <Incremento>
/ Next.
For bytMeses = 1 to 12 Step 1
<Códigos de programação que serão repetidos>
Next
For bytHoras = 1 to 24
<Códigos de programação que serão repetidos>
Next
Caso o valor do Step seja omitido o valor de incremento utilizado como padrão será 1.
No exemplo acima a variável objPlanilhas irá receber a cada execução do laço uma das
planilhas da pasta de trabalho ativa.
Exercícios:
1) Altere a Sub “CalculaIMC” para após apresentar o resultado, perguntar se o usuário deseja
calcular outro IMC e em caso positivo repetir todo o processo.
CAPÍTULO 6
O principal objetivo do VBA é permitir a manipulação dos objetos do Excel, ou seja, pastas de
trabalhos, planilhas, células, etc. Os objetos no Excel são agrupados em coleções e tanto as
coleções quantos os objetos possuem propriedades e métodos. As propriedades fazem referências
às características das coleções e/ou objetos e os métodos relacionam as operações que podemos
efetuar na coleção e/ou objeto.
Toda coleção possui a propriedade “Count”, que armazena a quantidade de itens da coleção. Possui
também o método “Add” que permite incluir um novo objeto na coleção.
Todo objeto possui a propriedade “Name” que armazena o nome do objeto e o método “Activate”
usado para torná-lo o objeto ativo.
Existem propriedades e métodos diferenciados para cada tipo de objeto, ou seja, algumas
propriedades e métodos são específicas de alguns tipos de objetos.
Neste capítulo veremos alguns dos objetos do Excel, algumas de suas propriedades e métodos e
como manipulá-los através do VBA.
A coleção Workbooks contém os objetos Workbook do Excel que fazem referência às pastas
de trabalho.
Propriedades da coleção:
Workbooks.Count – Informa quantas pastas de trabalhos estão abertas.
Métodos da coleção:
Workbooks.Add – Cria uma nova pasta de trabalho
Workbooks.Close – Fecha todas as pastas de trabalho
Workbooks.Open – Abre uma pasta de trabalho.
Propriedades do objeto:
Workbooks(“Pasta1.xlsx”).Name – Nome da pasta de trabalho
Métodos do objeto:
Workbooks(“Pasta1.xlsx”).Save – Salva pasta de trabalho “Pasta1.xlsx”;
Workbooks(“Pasta1.xlsx”).SaveAs “Caminho\Nome” – Salva a pasta de trabalho
“Pasta1.xlsx” com o nome e no local indicado;
Workbooks(“Pasta1.xlsx”).Activate – Ativa a pasta de trabalho “Pasta1.xlsx”;
Workbooks(“Pasta1.xlsx”).Close – Fecha pasta de trabalho “Pasta1.xlsx”.
Propriedades da coleção:
WorkSheets.Count – Informa quantas guias de planilhas existem na pasta de trabalho.
o Exemplo 1: Workbooks("Pasta1.xlsx").Worksheets.Count – Informa quantas
guias de planilha existem na pasta de trabalho “Pasta1.xlsx”;
o Exemplo 2: Worksheets.Count – Informa quantas guias de planilha existem na
pasta de trabalho que estiver ativa.
Métodos da coleção:
Worksheets.Add – Adiciona uma nova guia de planilha;
Worksheets.Select – Seleciona todas as guias de planilha;
Worksheets.Copy – Cria uma nova pasta de trabalho copiando todas as guias de
planilha da pasta de trabalho ativa ou referenciada.
Propriedades do objeto:
Worksheets(“Plan1”).Name – Informa ou atribui o nome da guia de planilha;
o Exemplo 1: MsgBox Workbooks("Pasta1.xlsx").Worksheets(“Plan 1”).Name
o Exemplo 2: Workbooks("Pasta1.xlsx").Worksheets(“Plan 1”).Name = “Vendas”
Worksheets(“Plan1”).Visible – Informa ou define a visibilidade de uma planilha em
Falso ou Verdadeiro
o Exemplo 1: MsgBox Workbooks("Pasta1.xlsx").Worksheets(“Plan 1”). Visible
o Exemplo 2: Workbooks("Pasta1.xlsx").Worksheets(“Plan 1”). Visible = False
DICA: Não é permitido ocultar todas as guias de planilha, no mínimo uma guia
precisa ter a propriedade Visible definida como True
Métodos do objeto:
Worksheets("Plan2").Select – Seleciona a planilha indicada.
Worksheets("Plan2").Copy – Copia a planilha indicada em uma nova pasta de trabalho
ou na pasta atual antes ou depois de uma planilha já existente.
o Exemplo 1: Worksheets("Plan2").Copy – Irá criar uma nova pasta de trabalho
contendo uma cópia da planilha “Plan2”
o Exemplo 2: Worksheets("Plan2").Copy After:= Worksheets ("Plan1") – Irá
copiar a “Plan2” depois da “Plan1”
o Exemplo 3: Worksheets("Plan2").Copy Before:= Worksheets ("Plan1") – Irá
copiar a “Plan2” antes da “Plan1”
Worksheets("Plan2").Move – Move a planilha indicada em uma nova pasta de trabalho
ou na pasta atual antes ou depois de uma planilha já existente.
o Exemplo 1: Worksheets("Plan2"). Move – Irá criar uma nova pasta de trabalho
e mover a planilha “Plan2” para essa nova pasta.
o Exemplo 2: Worksheets("Plan2"). Move After:= Worksheets ("Plan1") – Irá
mover a “Plan2” para depois da “Plan1”
o Exemplo 3: Worksheets("Plan2"). Move Before:= Worksheets ("Plan1") – Irá
mover a “Plan2” para antes da “Plan1”
Worksheets("Plan2").Delete – Exclui a planilha indicada
Worksheets("Plan2").PrintOut – Envia a planilha indicada para a impressora padrão
Objeto Range
O objeto Range é um objeto filho do objeto WorkSheet e faz referência a uma célula ou um
grupo de células.
Propriedades do objeto:
Range("A1").Value – Exibe ou define o valor de uma célula
o Exemplo 1: MsgBox Range(“A1”).Value
o Exemplo 2: Range(“A1”).Value = “Planilha Mensal de Vendas”
DICA 1: Essa propriedade não pode ser aplicada a um grupo de células.
DICA 2: Essa é propriedade default do Range, por isso não precisa ser especificada,
O “Exemplo 1” poderia ser escrito MsgBox Range(“A1”) e o “Exemplo 2”
Range(“A1”) = “Planilha Mensal de Vendas” .
Métodos do objeto:
Range("A1").Select – Seleciona a célula ou grupo de células
Range("A1").Copy – Copia o conteúdo da célula ou grupo de células
Range("A1").PasteSpecial – Cola na célula ou grupo de células selecionada o conteúdo
da área de transferência. Existem várias constantes do Excel que podem ser utilizadas
para definirem o tipo de colagem que será aplicada, veja abaixo as mais usadas:
o xlPasteAll – Para colar tudo, valores, fórmulas, formatação, etc
o xlPasteAllExceptBorders – Para colar tudo exceto bordas
o xlPasteColumnWidths – Cola apenas a largura das colunas
o xlPasteFormats – Cola apenas a formatação, ignorando valores e fórmulas.
o xlPasteFormulas – Cola apenas fórmulas e valores, não cola formatação.
o xlPasteFormulasAndNumberFormats - Cola fórmulas, valores e formatação de
números
o xlPasteValidation – Cola apenas regras de validação
o xlPasteValues – Cola apenas valores convertendo fórmulas em seus valores
correntes.
o xlPasteValuesAndNumberFormats – Cola valores convertendo fórmulas em
seus valores correntes e formatos numéricos.
Range("A1").Delete – Exclui a célula indicada deslocando as demais células para a
esquerda ou para cima
o Exemplo 1: Range("A1").Delete xlShiftToLeft
o Exemplo 2: Range("A1").Delete xlShiftToUp
DICA: Se não for informado a direção com xlShiftToLeft ou xlShiftToUp será
adotado o xlShiftToLeft por padrão.
Objeto Cells
O objeto Cells é similar ao objeto Range com praticamente os mesmos métodos e
propriedades, mas com o diferencial de tratar tanto colunas como linhas como valores
numéricos. Esse tipo de referência é bem mais fácil de manipular via programação.
Sintaxe: Cells(Linha, Coluna) onde Linha é um inteiro de 1 a 1048576 e coluna um inteiro
entre 1 e 16384, vejamos alguns comparativos:
Range(“A1”) => Cells(1,1) Range(“A1048576) => Cells(1048576,1)
Range(“A10”) => Cells(10,1) Range(“XFD1048576) => Cells(1048576, 16384)
Além das propriedades e métodos os objetos do Excel também possui eventos que podem ser
codificados. Os eventos são as ações que o usuário realiza no objeto.
Exercícios:
a. Não aceite dois números que tenham uma diferença maior que 1000 entre eles,
nesse caso o programa deverá avisar que os números não são válidos e solicitar
novamente 2 números.
b. Crie uma planilha com todos os números existentes entre os dois números fornecidos
colocando os números pares na coluna A e os números ímpares na coluna B
a. Não aceite dois números que tenham uma diferença maior que 1000 entre eles,
nesse caso o programa deverá avisar que os números não são válidos e solicitar
novamente 2 números.
b. Crie uma planilha com todos os números primos entre os números fornecidos. A
planilha deverá ter no máximo 30 números primos por coluna.
CAPÍTULO 7
Formulários de Usuários(UserForms)
Os UserForms são um recurso do VBA que possibilita a construção de uma interface personalizada
com o usuário. Nos UserForms do Excel é possível desenhar uma interface com a maioria dos
recursos disponíveis em aplicações Windows, como caixas de texto, caixas de combinação, botões
de opção, botões de comandos, checkboxs, etc. Estes itens da interface também são chamados de
controles.
Será inserido um formulário vazio onde poderemos desenhar nossa interface utilizando os controles
que o VBA disponibiliza.
Veremos inicialmente as propriedades que são mais comuns e existem na maioria dos controles:
Name – Define o nome do controle que será utilizado em futuras referências dentro do
código VBA. Deve obedecer a mesma regra utilizada para nomes de variáveis. É
recomendável utilizar um prefixo que identifique o tipo de objeto. Abaixo alguns
exemplos de controles e prefixos recomendados:
o Rótulo (Label) – lblNome, lblTelefone
o Caixa de texto (TextBox) – txtNome, txtTelefone
o Caixa de combinação (ComboBox) – cmbEstado, cmbSexo
o Caixa de listagem (ListBox) – lstEstado, lstSexo
o Caixa de seleção (CheckBox) – chkCurso, chkPago
o Botão de opção (OptionButton) – optCasado, optSolteiro
o Quadro (Frame) – fmeDadosPessoais, fmeDocumentos
o Botão de comando (CommandButton) – cmdConfirma, cmdCancela
o Imagem (Image) – imgFoto, imgLogotipo
Caption – Define o título de objetos como o próprio userform, rótulo, quadros, etc.;
BackColor – Define a cor de fundo do controle;
BackStyle – Define se o fundo do controle será opaco ou transparente
ControlTipText – Define um texto de ajuda que será exibido sempre que o mouse
passar sobre o controle. Deve ser usado para orientar o usuário sobre como utilizar ou
de que forma preencher o controle;
Enabled – Define se o controle estará habilitado ou não para o usuário;
Font – Define a fonte do controle;
ForeColor – Define a cor da fonte do controle;
Height – Define a altura do controle;
Left – Define a posição esquerda do controle em relação ao seu container. O container
é o objeto que contém o controle, pode ser o próprio userform ou um quadro(frame),
um Multi-página (MultPage), etc.;
TabIndex – Define a ordem de parada do foco do teclado quando utilizada a tecla tab;
TabStop – Define se o controle receberá ou não o foco do teclado quando utilizada a
tecla tab;
O método mais comum e disponível na maioria dos controles é o SetFocus e é utilizado para atribuir
o foco do teclado a um determinado controle. Bastante utilizado na validação de formulários para
colocar o foco do teclado em um campo de preenchimento obrigatório que não foi preenchido ou
não foi preenchido corretamente, para obrigar o usuário a fazer o correto preenchimento do campo.
o Métodos
Copy – Copia o conteúdo da Caixa de texto que estiver selecionado
para a área de transferência;
Cut - Recorta o conteúdo da Caixa de texto que estiver selecionado
para a área de transferência;
Paste – Cola na Caixa de texto o conteúdo da área de transferência.
Caixa de Combinação e Caixa de listagem
o Propriedades
ListCount – Informa quantos itens a lista possui;
ListIndex – Define ou informa qual o item da lista está selecionado. A
lista começa de zero. Se nem um item estiver selecionado o valor do
ListIndex será -1;
ListStyle (apenas para Caixas de listagem) – Configura o estilo da Caixa
de listagem em uma de duas opções possíves:
fmListStylePlain – Exibe as opções da Caixa de listagem como
itens de uma lista, é a opção Default;
fmListStyleOption – Exibe as opções da Caixa de listagem como
Options Buttons ou CheckBox;
MultiSelect (apenas para Caixas de listagem) – Configura a forma de
seleção da caixa de listagem em uma de três opções possíveis:
fmMultiSelectSingle – Só permite selecionar um item da lista, é a
opção default;
fmMultiSelectExtended – Permite a seleção de mais de um item,
mas apenas com a combinação de teclas Ctrl ou Shift;
fmMultiSelectMulti – Permite a seleção de mais de um item
como padrão.
Selected (apenas para Caixas de listagem) – Informa ou define se um
item da caixa de listagem está selecionado ou não. Mais usado quando
a Caixa de listagem está configurada para múltipla seleção;
o Métodos
AddItem – Adiciona um novo item à caixa de combinação ou de
listagem;
RemoveItem – Remove um item da caixa de combinação ou de
listagem;
Clear – Elimina todos os itens da caixa de combinação ou de listagem;
Botão de comando
o Propriedades
Default – Define se o botão será ou não o botão padrão do formulário.
O botão padrão poderá ser executado também com o pressionar da
tecla Enter.
Cancel – Define se o botão será ou não o botão o botão cancelar do
formulário. O botão cancelar poderá ser executado também com o
pressionar da tecla ESC.
Image
o Propriedades
Picture – Defiine que imagem será exibida no controle;
PictureSizeMode – Configura de que forma a Caixa de imagem irá tratar
o tamanho da imagem original utilizando uma das três formas
possíveis:
fmPictureSizeModeClip – Exibe no controle Image apenas o que
cabe do tamanho original cortando o restante da imagem
original;
fmPictureSizeModeStretch – Reduz ou aumenta a imagem
original para que caiba no controle imagem, se necessário irá
distorcer o formato da imagem para força-la a caber no
controle;
fmPictureSizeModeZoom – Reduz ou aumenta a imagem original
para caber no controle, mas sem distorcer suas proporções.
Os eventos são as ações que os usuários podem realizar em cada controle, assim como as
propriedades e métodos, os eventos podem ser específicos para um ou mais tipos de controles ou
comuns a vários tipos de controle. Todos os eventos podem ser codificados em VBA, ou seja, para
cada ação do usuário é possível escrever um programa correspondente.
Veremos os eventos mais comuns e que estão disponíveis na maioria dos controles:
Click – Responde ao click do mouse sobre o controle;
DblClick – Responde ao duplo click do mouse sobre o controle;
Enter – Responde quando o controle recebe o foco do teclado;
Exit – Responde quando o controle perde o foco do teclado;
KeyPress – Responde quando uma tecla é pressionada;
Exercícios:
CAPÍTULO 8
Validação de Dados
Uma das principais vantagens de se utilizar UserForms na interação com o usuário, ou mesmo, no
preenchimento dos dados de uma planilha, é a possibilidade de uma validação dos dados fornecidos
pelo usuário de uma forma mais completa.
A validação dos dados pode ocorrer em dois momentos: durante o preenchimento individual de
cada campo ou ao final do preenchimento dos campos ao confirmar os dados digitados.
O código acima, se aplicado em uma caixa de texto de nome txtCPF, irá permitir apenas a digitação
de caracteres numéricos na caixa de texto.
O código acima, se aplicado em uma caixa de texto de nome txtNome, irá permitir apenas a
digitação de caracteres não numéricos na caixa de texto.
No código acima a rotina InsereDados só será executada se a função ValidaCampos retornar o valor
True e a função ValidaCampos só irá retornar o valor True se todos os campos do formulário
estiverem preenchidos, caso contrário a função irá exibir uma mensagem informando que campo
não foi preenchido, irá colocar o foco do teclado no campo e retornará o valor False.
Tratamento de Erros
Algumas operações realizadas no VBA podem ocasionar um erro em tempo de execução. Se não
existir nenhum tratamento para o erro o programa será interrompido. Para evitar esse tipo de
situação o VBA dispõe de comandos para tratamento de erros.
O comando On Error Goto desvia a execução do programa para o local especificado onde deverá
ser codificado alguma ação de tratamento do erro e o Resume desvia a execução do programa para
o ponto de onde o programa deverá prosseguir caso ocorra um erro.
Private Sub cmdConfirmar_Click()
On Error GoTo TrataErro
Workbooks.Open "C:\Planilhas\Pasta1.xlsx"
Fim:
Exit Sub
TrataErro:
MsgBox "Não foi possível abrir o arquivo Pasta1.xlsx", vbCritical
Resume Fim
End Sub
No código acima se ocorrer algum erro na tentativa de abrir o arquivo “Pasta1.xlsx” a execução do
programa será desviada para o ponto TrataErro onde é exibida uma mensagem de erro
personalizada e a rotina continua a execução a partir do ponto Fim sem que o programa seja
interrompido.
Sem o tratamento de erro o Excel iria exibir uma mensagem genérica de erro e forçar a interrupção
do programa.
Exercícios:
EXERCÍCIO DE REVISÃO
1) Desenvolva uma sub que solicite dois números ao usuário e lance em uma coluna todos os números
pares e em outra coluna todos os números ímpares entre os dois números fornecidos, só deverão
ser impressos 30 números por coluna e a diferença entre os números fornecidos não deverá ser
maior que 1000. Ao final do programa deverá ser verificado se o usuário deseja repetir todo o
processo.
Folha de Pagamento
Nome Escolaridade Cargo Bruto INSS IRPF Bônus Liquido
2) Dada a planilha acima desenvolva uma função personalizada que receba a escolaridade, o cargo e o
valor do salário e retorne o valor do bônus seguindo o seguinte critério:
Para escolaridade Ensino Fundamental o bônus será de 3%
Para o Nível Médio o bônus será de 5%
Recepcionista ou Aux. Administrativo com Nível Superior o bônus será de 7%
Para Analista o bônus será de 10%
Para Procurador ou Gerente o bônus será de 15%
4) Codifique o evento Change da planilha para não permitir a digitação de uma escolaridade
incompatível com o cargo e vice versa.