apostila de vba e - dbmanagement.infodbmanagement.info/microsoft/vba_para_excel_ms_excel_2016.pdfos...
TRANSCRIPT
2 - RISK MANAGEMENT
ÍNDICE INTRODUÇÃO AO VBA ____________________________________________________ 5
Constantes___________________________________________________________ 5 Variáveis ____________________________________________________________ 5 Tipos de variáveis e constantes _______________________________________ 6 O Comando Option Explicit ____________________________________________ 7 Comentários _________________________________________________________ 7 Operadores __________________________________________________________ 7 Arrays ______________________________________________________________ 10 Estrutura de dados __________________________________________________ 12
FLUXOS DE CONTROLE __________________________________________________ 12 Expressões condicionais _____________________________________________ 13 Loops _______________________________________________________________ 16
FUNÇÕES E PROCEDIMENTOS_____________________________________________ 19 Diferenças __________________________________________________________ 20 Quando usar? _______________________________________________________ 20 Passagem de Parâmetros ____________________________________________ 20 Passagem de parâmetros: Referência X Valor_________________________ 21 Parâmetros Opcionais _______________________________________________ 22 Variáveis locais X Variáveis globais __________________________________ 23
FUNÇÕES MATEMÁTICAS _________________________________________________ 24
FUNÇÕES DIVERSAS _____________________________________________________ 25
FUNÇÕES DE CONVERSÃO ________________________________________________ 26
STRINGS_______________________________________________________________ 27
MACROS _______________________________________________________________ 29 Como criar__________________________________________________________ 29 Geração de Macros pelo Excel ________________________________________ 31 Como executar uma Macro na abertura do arquivo ____________________ 32 Associando objetos a Macros _________________________________________ 32 Como executar passo a passo ________________________________________ 33 Pontos de parada em uma Macro _____________________________________ 34 Visualização de valores de variáveis em tempo de execução ___________ 35
OS PRINCIPAIS OBJETOS DO EXCEL _______________________________________ 35 Application __________________________________________________________ 36 Workbook ____________________________________________________________ 37 Worksheet __________________________________________________________ 37
3 - RISK MANAGEMENT
Range ______________________________________________________________ 38 Cells________________________________________________________________ 39 Collection ___________________________________________________________ 39 Chart _______________________________________________________________ 40
PROPRIEDADES E MÉTODOS______________________________________________ 41 Definições___________________________________________________________ 41 Principais propriedades dos principais objetos ________________________ 42 Principais métodos dos principais objetos _____________________________ 43
TRATAMENTO DE ERROS_________________________________________________ 43 Como tratar um erro no programa ____________________________________ 43
4 - RISK MANAGEMENT
ÍNDICE DE FIGURAS
Figura 1 - Exemplo de Criação de uma M acro no Editor do Excel......................................... 30 Figura 2 - O editor de Visual Basic .......................................................................................... 31 Figura 3 - Como associar uma Macro a um objeto Desenho................................................... 33 Figura 4 - Exemplo de execução de um programa com ponto de parada ................................. 34 Figura 5 - Diagrama de Objetos do Microsoft Excel................................................................ 36 Figura 6 - Diagrama de Objetos do Microsoft Excel a partir do Objeto Worksheet ................ 38 Figura 7 - Diagrama de Objetos do Microsoft Excel a partir do Objeto Chart......................... 41
5 - RISK MANAGEMENT
INTRODUÇÃO AO VBA
VBA (Visual Basic for Application) é uma linguagem de programação
utilizada utilizada para desenvolver programas executados nos principais
softwares do pacote Office (Access, Excel, Word, Power Point) da Microsoft.
Uma linguagem de programação permite montarmos programas que
auxiliam tarefas do dia a dia de seus usuários.
Constantes
Uma constante representa um valor fixo, ou seja, que não é mudado ao longo
da execução do programa.
Para declarar uma constante no VBA, usamos o comando Const. O valor e o
tipo de dados são atribuídos em uma mesma linha de comando.
Exemplo:
Const Valor_Pi As Double = 3,14
Variáveis
Qualquer quantidade que muda de valor no decorrer de um programa é
chamada de variável. Para cada variável, damos uma representação
simbólica, ou nome, para que ela possa ser identificada no programa.
O local e a forma de criação define o escopo da variável, ou seja, onde esta
pode ser visualizada dentro do programa.
6 - RISK MANAGEMENT
A declaração de uma variável em VBA é feita usando o comando Dim em
qualquer local do procedimento, porém é comum os programadores
declararem todas as variáveis logo no início do procedimento.
Exemplo:
Dim juros As Double
Dim nome, sobrenome As String
Tipos de variáveis e constantes
Em VBA, assim como em todas as linguagens de programação, cada variável
ou constante contém um tipo de dados específico.
Tipo de Dado Descrição Possíveis Valores Boolean Permite armazenar valores Booleanos True ou False Byte Permite armazenar números em módulo 0 a 255 Currency Permite armazenar moeda - Date Permite armazenar datas Qualquer data que pode ser
reconhecida pelo Excel Double Permite armazenar números reais -1.79769313486232E308 a
1.79769313486232E308 Single Permite armazenar números reais -3.402823E38 a
3.402823E38 Integer permite armazenar números inteiros -32.768 e 32767 Long permite armazenar números inteiros -2 147 483 648 a 2 147 483
648 Object utilizado para fazer referência a um
objeto do Excel -
String permite armazenar conjuntos de caracteres
Textos em geral
Variant permite armazenar qualquer tipo de dado - User-Defined permite armazenar valores de tipos
definidos pelo usuário -
Obs: Usa-se o caracter # para atribuir data (ex: dteInicio = #07/01/2002 11:00#)
7 - RISK MANAGEMENT
O Comando Option Explicit
Na realidade, a declaração de variáveis é necessária em um programa VBA,
caso o programador use o comando Option Explicit no início do módulo. Caso
contrário, não é necessário a declaração das variáveis utilizadas que
recebem, então, o tipo Variant.
Exemplos:
Option Explicit
Sub calculaMedia()
Dim dblMedia as Double
Comentários
Comentários devem ser feitos para ajudar o entendimento do código,
auxiliando manutenções e modificações futuras. Podemos realizar
comentários no VBA utilizando o caracter ‘.
Exemplos:
Sub calculaMedia()
‘ Comentário: Declaração de Variáveis
Dim dblMedia as Double
Operadores
O VBA utiliza alguns operadores, que permitem a realização de comparações,
atribuições, etc. Podemos dividir os operadores nas seguintes categorias:
8 - RISK MANAGEMENT
AArriittmmééttiiccooss
Utilizados em cálculos e expressões matemáticas.
Operador Representação Sintaxe Soma + [Número 1] + [Número 2] Subtração - [Número 1] - [Número 2] Multiplicação * [Número 1] * [Número 2] Divisão / [Número] / [Divisor] Expoente ^ [Número] ^ [Expoente] Divisão Inteira \ [Número] \ [Divisor] Mod Resto Mod [Número] \ [Divisor]
AAttrriibbuuiiççããoo
Apenas um operador faz parte desta categoria. Este operador é utilizado para
atribuir valores a variáveis.
Operador Representação Sintaxe Atribuição = [Variável] = [Valor]
CCoommppaarraaççããoo
Utilizado na maioria das vezes em expressões de fluxo de controle (ver seção
Fluxo de Controle), para comparar valores ou variáveis. Retornam TRUE ou
FALSE.
Operador Representação Sintaxe Menor que < [Variável] < [Valor] Menor ou igual que <= [Variável] <= [Valor] Maior que > [Variável] > [Valor] Maior ou igual que >= [Variável] >= [Valor] Igual = [Variável] = [Valor] Diferente <> [Variável] <> [Valor] Igual (objetos) Is [Object 1] Is [Object 2]
9 - RISK MANAGEMENT
CCoonnccaatteennaaççããoo
Utilizados para concatenar duas variáveis do tipo String.
Operador Representação Sintaxe Concatenação & [Variável 1] & [Variável 2] Concatenação + [Variável 1] + [Variável 2]
É recomendável o uso do operador & para evitar ambigüidade.
LLóóggiiccooss
Utilizados em expressões lógicas. Retornam TRUE ou FALSE
Operador Representação Sintaxe AND AND [Variável 1] AND [Variável 2] OR OR [Variável 1] OR [Variável 2] NOT NOT NOT [Variável 1] XOR XOR [Variável 1] XOR [Variável 2] Abaixo seguem o resultados das expressões, utilizando cada operador. Podemos chamar as tabelas abaixo de Tabela Verdade. Tabela Verdade para o operador AND
Expressão 1 Expressão 2 Expressão 1 AND Expressão 2 TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
Tabela Verdade para o operador OR
Expressão 1 Expressão 2 Expressão 1 OR Expressão 2 TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE
Tabela Verdade para o operador NOT
10 - RISK MANAGEMENT
Expressão 1 NOT Expressão 1
TRUE FALSE FALSE TRUE
Tabela Verdade para o operador XOR
Expressão 1 Expressão 2 Expressão 1 XOR Expressão 2 TRUE TRUE FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE
Arrays
Variável que contém uma lista de valores do mesmo tipo.
O limite da lista pode ser informado na declaração da variável. O primeiro
valor do Array corresponde a posição 0 (zero).
Exemplo:
Dim arrEmpresas(10) as String arrEmpresas(0) = “Mellon Brascan” arrEmpresas(1) = “Foco Informática” Arrays Multidimensionais O Array pode ser multi-dimensional. A sintaxe de um Array de duas
dimensões seria:
Dim [Nome da Variável](i, j) as [Tipo de Dado]
Exemplo:
11 - RISK MANAGEMENT
Dim mtzValores(2, 2), i, j As Integer
For i = 1 To 2 For j = 1 To 2 mtzValores(i, j) = i * j Next Next Um Array também pode ser dimensionado, de acordo com a necessidade. A
declaração deve ser feita sem a informação do limite do Array.
É necessário dimensionar o Array, antes de atribuir valores. Para isso, usa-
se o comando ReDim.
Exemplo:
Dim arrEmpresas() as String Redim arrEmpresas(1) arrEmpresas(0) = “Mellon Brascan” arrEmpresas(1) = “Shell Brasil”
Caso o Array dinâmico já tenha sido dimensionado, usamos a mesma sintaxe
para redimensioná-lo. Para manter os valores já atribuídos deve-se usar o
comando Preserve. No entanto, só será possível aumentar a sua dimensão.
Exemplo: Dim arrEmpresas() as String Redim arrEmpresas(1) arrEmpresas(0) = “Mellon Brascan” arrEmpresas(1) = “Alfredo D istribuidores” Redim arrEmpresas(3)
12 - RISK MANAGEMENT
arrEmpresas(2) = “Foco Informática”
Estrutura de dados
Em alguns casos, os tipos de dados existentes na linguagem não são
satisfatórios. É possível criar tipos definidos pelo programador.
Exemplo:
É necessário ter sempre no programa, o nome e o CNPJ da empresa. Cria-se,
então, um tipo Empresa.
Type Empresa RazaoSocial as String CNPJ as String End Type
Podemos definir uma variável do tipo Empresa.
Dim empresaAtual as Empresa
É possível definir um array do tipo Empresa
Dim empresas(10) as Empresa
Podemos atribuir valores da seguinte forma:
empresaAtual.CNPJ = “1111111111” empresas(1).RazaoSocial = “Mellon Brascan” empresas(1).CNPJ = “222222222”
FLUXOS DE CONTROLE
Veremos nesta seção as instruções de controle que afetam o fluxo de
execução de um programa e são amplamente utilizadas. Um programa é
13 - RISK MANAGEMENT
executado de diversas formas, de acordo com parâmetros de entrada e
estados de variáveis. O fluxo de execução de um programa é controlado,
basicamente, através de decisões (utilização de expressões condicionais) e
repetição de instruções (loops).
Sendo assim, podemos dividir as instruções de fluxo de controle em duas
categorias: as expressões condicionais e os loops.
Expressões condicionais
IIff--TThheenn--EEllssee
É a expressão condicional mais utilizada.
Sintaxe:
If ([Condição]) Then [Comandos 1] Else [Comandos 2]
Se a condição definida for verdadeira, os comandos definidos em [Comandos
1] serão executados. Se a condição for falsa, o bloco [Comandos 2] será
executado.
Exemplo:
If (intNumero >= 0) Then strMensagem = “A variável é positiva” Else strMensagem = “A variável é negativa” MsgBox(strMensagem)
14 - RISK MANAGEMENT
Existem casos em que temos mais do que apenas duas possibilidades. Sendo
assim, podemos usar a instrução ElseIf.
Exemplo:
If ([Condição 1]) Then [Comandos 1] ElseIf ([Condição 2]) Then [Comandos 2] Else [Comandos 3]
Os blocos de comandos [Comandos 1] ou [Comandos 2] serão executados,
caso as condições [Condição 1] e [Condição 2] forem verdadeiras,
respectivamente. Caso contrário, [Comandos 3] será executado.
Exemplo:
If (intNumero > 0) Then strMensagem = “A variável é positiva” ElseIf (intNumero < 0) Then strMensagem = “A variável é negativa” Else strMensagem = “A variável tem o valor zero.” MsgBox(strMensagem)
CCaassee
Utilizado em expressões condicionais, onde há mais de duas possibilidades.
Sintaxe:
15 - RISK MANAGEMENT
Select Case [expressão] [Case possibilidade-1 [comandos-1]] . . . [Case possibilidade-n [comandos-n]] [Case Else [comandos else]] End Select
Muito semelhante ao If...Then...ElseIf...Else... Indicado para expressões com
várias possibilidades.
Exemplo 1:
Select Case intNumero Case Is > 0 strMensagem = “A variável é positiva” Case Is < 0 strMensagem = “A variável é negativa” Case Else strMensagem = “A variável tem o valor zero.” End Select MsgBox(strMensagem)
Exemplo 2:
Select Case strTipoEmpresa Case “Financeira” MsgBox(“Empresa do ramo financeiro”) Case “Industrial” MsgBox(“Empresa do ramo industrial”) Case “Serviços”
16 - RISK MANAGEMENT
MsgBox(“Empresa do ramo de serviços”) Case Else MsgBox(“Não identificado”) End Select
Loops
Um loop permite a execução de um conjunto de comandos repetidamente.
Alguns loops são executados até uma condição se tornar falsa, outros até a
condição ser verdadeira. Existem ainda loops que permitem a execução de
um bloco de comandos um número fixo de vezes.
WWhhiillee
Executa um bloco de comandos enquanto uma condição for verdadeira.
Sintaxe:
While [condição] [comandos] Wend
Exemplo:
flag = true ... While (flag) If (adicional > 0) Then Total = total + adicional Else flag = false End If adicional = adicional – valor_desconto Wend
17 - RISK MANAGEMENT
FFoorr
Executa um bloco de comandos um número determinado de vezes.
Sintaxe:
For i = [início] To [fim] [Passo] [comandos] [Exit For] [comandos] Next
Exemplo:
Dim arrInteiros(50) As Integer Dim i As Integer ‘Inicializa o array com valor 0 For i = 1 to Ubound(arrInteiros) arrInteiros(i) = 0 Next Obs: Se o limite superior for definido a partir de uma variável e o valor desta
variável for mudado ao longo do loop, a quantidade de iterações não será
alterada.
Exemplo: O loop abaixo é executado apenas 5 vezes. intMaximo = 5 For intContador = 1 To intMaximo
MsgBox(“Valor do Contador: ” & intContador) if (intContador = 3) Then intMaximo = intMaximo + 10 End If Next
18 - RISK MANAGEMENT
DDoo LLoooopp
Executa um bloco de comandos enquanto uma condição for verdadeira, ou
até uma condição se tornar verdadeira.
Sintaxe:
Do [condição] '(While | Until) [comandos] [Exit Do] [comandos] Loop
Ou:
Do [comandos] [Exit Do] [comandos] Loop [condição] '(While | Until)
Exemplo 1:
intContador = 0 Do while intContador < 5 MsgBox(“Valor do Contador: ” & intContador) intContador = intContador + 1 Loop
Exemplo 2:
intContador = 0 Do Until intContador = 5 MsgBox(“Valor do Contador: ” & intContador)
19 - RISK MANAGEMENT
intContador = intContador + 1 Loop
FUNÇÕES E PROCEDIMENTOS
Muitas funcionalidades em um programa são executadas mais de uma vez.
Com isso, surge a necessidade de se criar pedaços de códigos que executam
tarefas específicas. Isto facilita o entendimento do programa, além de
diminuir a quantidade de linhas de código, facilitando a manutenção e novas
implementações.
Podemos dividir o programa em partes menores denominadas Funções e
Procedimentos.
Podemos identificar uma função em VBA como sendo o código que será
executado entre os comandos Function e End Function, enquanto
procedimentos são identificados pelos comandos Sub e End Sub.
Sintaxe:
Sub procedimento() [Corpo do Procedimento] End Sub Podemos chamar o procedimento usando o comando Call. Ex: Call procedimento() É possível chamar o procedimento sem o comando Call. Neste caso não usamos o parênteses. Ex: procedimento
20 - RISK MANAGEMENT
Diferenças
A diferença básica entre uma função e um procedimento é muito simples. A
função retorna um valor de algum tipo, enquanto o procedimento não
retorna valor. Os tipos de valores para o retorno de uma função são os
mesmos definidos para uma variável, ou seja, uma função pode retornar um
tipo Integer, String ou até mesmo um Objeto.
Sintaxe:
Function funcao() As Integer [Corpo da Função] End Function
Quando usar?
É fundamental realizar a divisão do programa em tarefas menores, de modo
a deixar o código limpo e organizado. Sendo assim, usamos funções e
procedimentos para definirmos tais tarefas. Caso haja necessidade de
retorno de valor, usamos funções. Caso contrário, usamos procedimentos.
Passagem de Parâmetros
Funções e procedimentos podem receber parâmetros de entrada, o que não é
obrigatório, mas ocorre na maioria das vezes. Assim como o retorno de uma
função, parâmetros devem ter um tipo definido.
Sintaxe:
Function funcao(parametro As Integer) As String [Corpo da Função] End Function
21 - RISK MANAGEMENT
Passagem de parâmetros: Referência X Valor
Um parâmetro pode ser passado para uma função ou procedimento de duas
formas: por valor ou por referência.
Por Valor
Uma forma de passar o valor de um argumento a um procedimento em vez
de passar o endereço. Permite que o procedimento acesse uma cópia da
variável. Como resultado, o valor real da variável não pode ser alterado pelo
procedimento ao qual é passado.
Usamos o comando ByVal pare definir que um parâmetro será passado por
valor.
Exemplo:
Sub principal() Dim meuNumero As Integer meuNumero = 2 somaUm meuNumero MsgBox ("Valor da variavel meuNumero: " & meuNumero) End Sub Sub somaUm(ByVal valor As Integer) valor = valor + 1 End Sub ‘Valor da variável meuNumero: 2
22 - RISK MANAGEMENT
Por Referência
Uma forma de passar o endereço de um argumento a um procedimento em
vez de passar o valor. Isso permite que o procedimento acesse a variável real.
Como resultado, o valor real da variável pode ser alterado pelo procedimento
ao qual é passado. A menos que especificado o contrário, os argumentos são
passados por referência.
Usamos o comando ByRef pare definir que um parâmetro será passado por
valor.
Exemplo:
Sub principal() Dim meuNumero As Integer meuNumero = 2 somaUm meuNumero MsgBox ("Valor da variavel meuNumero: " & meuNumero) End Sub Sub somaUm(ByRef valor As Integer) valor = valor + 1 End Sub ‘Valor da variável meuNumero: 3
Parâmetros Opcionais
Para definir um parâmetro opcional em um procedimento ou função, usamos
o comando Optional.
23 - RISK MANAGEMENT
Exemplo:
Sub principal(ByVal param1 As Integer, Optional param2 As Strting) O exemplo abaixo mostra uma chamada válida para o procedimento.
Call principal(2)
Variáveis locais X Variáveis globais
O escopo de atuação das variáveis de um programa varia de acordo com o
local de declaração da mesma. Variáveis definidas dentro de uma função, por
exemplo, só podem ser acessadas no escopo daquela função. Estas são
denominadas variáveis locais.
Entretanto, podemos ter variáveis que são acessadas por todas as funções ou
procedimentos. Para isso devemos declarar a variável no início do módulo
VBA. Desta forma, o conteúdo da variável pode ser modificado em qualquer
lugar do programa. Estas são denominadas variáveis globais.
Exemplo:
Dim varGlobal As Integer Sub proc1() Dim varLocal1 As Integer
varLocal1 = 5 varGlobal = 3 proc2 MsgBox(‘Valor de varGlobal: ’ & varGlobal)
End Sub Sub proc2() Dim varLocal2 as Integer
24 - RISK MANAGEMENT
MsgBox(‘Valor de varGlobal: ’ & VarGlobal)
varGlobal = VarGlobal + 5 End Sub
FUNÇÕES MATEMÁTICAS
As funções matemáticas são muito utilizadas em programas estatísticos e
financeiros. A tabela abaixo lista as funções básicas. O capítulo referente a
propriedades e métodos do Excel abordará funções matemáticas mais
complexas.
Função Descrição
Abs Retorna o valor absoluto do número
Atn Retorna o valor do arco tangente do número
Cos Retorna o valor do cosseno do número
Exp Retorna o valor de e elevado a uma determinada potência
Fix Retorna a parte inteira do número. Exemplo: Fix(-7,4) = -8
Int Retorna a parte inteira do número. Exemplo: Int(-7,4) = -7
Log Retorna o logaritmo natural do número
Rnd Retorna um número aleatório
Sgn Retorna o sinal do número.
-1, se o número for menor que 0
0, se o número for igual a 0
1, se o número for maior que 0
Sin Retorna o valor do seno do número.
Sqr Retorna o valor da raiz quadrada do número.
Tan Retorna o valor da tangente do número.
25 - RISK MANAGEMENT
FUNÇÕES DIVERSAS
Algumas funções são muito utilizadas nos programas, especialmente aquelas
que apresentam algum tipo de caixa de diálogo e permitem a interação, em
tempo de execução, com o usuário.
θ MsgBox
Exibe uma mensagem em uma caixa de diálogo, e aguarda que o usuário
clique em um botão. Um Integer é retornado indicando qual botão o
usuário clicou.
Exemplo:
Dim intRetorno As Integer
intRetorno = MsgBox("Deseja continuar?", _
vbYesNo + vbQuestion, "Pergunta")
If (intRetorno = vbYes) Then
MsgBox ("Aguarde, o programa irá continuar.")
Else
MsgBox ("Fim da Execução.")
End If
θ InputBox
26 - RISK MANAGEMENT
Exibe um aviso em uma caixa de diálogo, aguarda até que o usuário
insira algum texto ou clique em um botão e retorna uma String com o
conteúdo da caixa de texto.
Exemplo:
Dim strRetorno, strMsg As String
strRetorno = InputBox("Digite o seu nome", _
"Entrada de Dados")
strMsg = "O nome digitado foi " & strRetorno
MsgBox (strMsg)
FUNÇÕES DE CONVERSÃO
Como vimos anteriormente, uma variável pode ser de vários tipos. Em alguns
casos quereremos converter uma variável String para uma variável inteira,
por exemplo. As funções de conversão são muito utilizadas e convertem uma
variável de um tipo para outro. Caso a função não consiga converter, um
erro é gerado. A tabela abaixo mostra as funções de conversão mais usadas e
suas respectivas sintaxes.
Descrição Sintaxe
Converte uma expressão para um tipo Double cDbl(exp) Converte uma expressão para um tipo Integer cInt(exp) Converte uma expressão para um tipo String cStr(exp)
27 - RISK MANAGEMENT
Converte uma expressão para um tipo Date cDate(exp)
Exemplo:
Dim valorNumerico As Double
valorNumerico = cDbl(“4,56”)
STRINGS
Variáveis do tipo String são muito usadas em programas e muitas vezes têm
que ser manipuladas, para que possamos chegar ao resultado desejado.
Existem muitas funções no VBA que permitem esta manipulação.
As principais funções de manipulação são:
Instr
A variável String pode ser considerada um Array de Caracteres. Cada
caracter da String é uma posição no Array. Podemos localizar um ou mais
caracteres utilizando a função InStr().
Sintaxe:
[posicao]=InStr([posicaoInicial],[varPesquisada],[caracterPesquisa],[tipoPesquisa])
onde:
posicaoInicial: Posição de início da pesquisa. varPesquisada: String a ser pesquisada.
28 - RISK MANAGEMENT
caracterPesquisa: Caracter (ou String) a ser encontrado. tipoPesquisa: Tipo de pesquisa (para comparação de texto, usa-se vbTextCompare).
Exemplo:
strSeparador = “ – ” strTelEmpresa = “55555555 – Mellon Brascan” intPosicao = InStr(1, strTelEmpresa, strSeparador, vbTextCompare) MsgBox(“Polsição do Separador: ” & intPosicao)
Mid
A função Mid retorna uma parte da String delimitada pelos parâmetros de
entrada [posicaoInicial], [tamanhoExtracao].
Sintaxe:
[extracao] = Mid([variavel], [posicaoInicial], [tamanhoExtracao])
Onde:
[variavel] = String. [posicaoInicial] = posição do primeiro caracter que deve ser extraído de [variavel]. [tamanhoExtracao] = quantidade de caracteres que devem ser extraídos.
Exemplo:
strTelEmpresa = “55555555 – Mellon Brascan” strTelReal = Mid(strTelEmpresa, 1, 8) Msgbox(“Telefone real da empresa: ” & strTelReal)
29 - RISK MANAGEMENT
Trim
Podemos eliminar os caracteres “ ” no início e final de uma variável String,
utilizando a função trim().
Sintaxe:
[varSemEspaco] = Trim([varComEspaco])
Exemplo:
strTelEmpresa = “55555555 – Mellon Brascan” strTelReal = Trim(Mid(strTelEmpresa, 1, 9)) Msgbox(“Telefone real da empresa: ” & strTelReal)
MACROS
Macros são seqüências de comandos e funções definidos usando a linguagem
de programação VBA, que automatizam tarefas realizadas no aplicativo
Microsoft Excel.
Como criar
Para criar uma Macro, deve-se acessar o menu Ferramentas > Macro >
Macros.
30 - RISK MANAGEMENT
Figura 1 - Exemplo de Criação de uma M acro no Editor do Excel
Clicando na opção de menu Macros, uma nova janela será aberta. O usuário
poderá nomear a Macro e apertar o botão Criar, que abrirá o editor de código
Visual Basic e permitirá a edição da Macro criada.
31 - RISK MANAGEMENT
Figura 2 - O editor de Visual Basic
Geração de Macros pelo Excel
O Excel permite que o usuário grave um conjunto de tarefas realizado na
planilha em um procedimento, ou seja, em uma Macro. Para isso, deve-se
acessar o menu Ferramentas > Macro > Gravar Nova Macro. A partir daí,
todas as ações que o usuário fizer na planilha serão convertidas em
comandos Visual Basic. Para finalizar a gravação da nova Macro, deve-se
32 - RISK MANAGEMENT
acessar o menu Ferramentas > Macro > Parar Gravação. A Macro gerada
realizará exatamente todos os comandos feitos pelo usuário.
Como executar uma Macro na abertura do arquivo
É possível executar uma determinada Macro na abertura do arquivo Excel.
Para isso, o procedimento deve ter o nome Auto_Open.
Exemplo:
Sub Auto_Open()
MsgBox(“Procedimento executado na abertura do arquivo.”)
End Sub
Associando objetos a Macros
Podemos utilizar os objetos de desenho do Excel como links para execução
de macros. Os objetos de desenho são acessados a partir da barra de
ferramentas Desenho.
Para associar um objeto desenho produzido a uma macro, deve-se clicar com
o botão direito do mouse a escolher a opção Atribuir Macro.
33 - RISK MANAGEMENT
Figura 3 - Como associar uma Macro a um objeto Desenho
Como executar passo a passo
Uma forma muito útil de analisarmos o código de um programa e descobrir
possíveis falhas, é executar os comandos passo a passo, ou seja, um de cada
vez. O editor de código Visual Basic permite a execução passo a passo, a
partir do menu Depurar.
A opção de menu Depuração Total incializa a execução do programa. É
possível, desta forma, visualizar exatamente o que está acontecendo. Para
executar uma nova instrução, a opção de menu Depuração Total deve ser
acionada novamente.
34 - RISK MANAGEMENT
Pontos de parada em uma Macro
Muitas vezes, os programas são muito extensos e não é possível realizar uma
depuração passo a passo em todo código. Neste caso, deve-se usar pontos de
parada.
O programa que contém um ponto de parada, executa o código passo a passo
a partir do comando que contém a marca para parar. Os próximos comandos
podem ser executados um de cada vez, facilitando a depuração. Para inserir
ou retirar um ponto de parada em um comando, utiliza-se a opção
Ativar/Desativar ponto de interrupção no menu Depurar.
Figura 4 - Exemplo de execução de um programa com ponto de parada
35 - RISK MANAGEMENT
Visualização de valores de variáveis em tempo de execução
Na figura 4, é possível visualizar o valor de sigma, porque o cursor está em
cima da variável. No entanto, é possível visualizar o valor de mais de uma
variável ao mesmo tempo, utilizando a opção de menu Adicionar inspeção
de variáveis a partir do menu Depurar. Quando o programa for depurado,
será possível a visualização do valor das variáveis em uma janela separada.
OS PRINCIPAIS OBJETOS DO EXCEL
O excel permite o acesso a qualquer funcionalidade em um programa VBA,
através dos métodos e propriedades dos seus objetos. Estes estão
distribuídos de forma organizada como podemos verificar na figura abaixo.
36 - RISK MANAGEMENT
Figura 5 - Diagrama de Objetos do Microsoft Excel
Application
O objeto Application representa todo o aplicativo Microsoft Excel e contém a
maioria das opções de configurações e definições do aplicativo como um
todo. Muitas propriedades e métodos deste objeto podem ser referenciados
sem o qualificador de objeto Application.
Exemplo:
37 - RISK MANAGEMENT
Application.ActiveWorkbook.Save
Pode ser escrito como:
ActiveWorkbook.Save
Workbook
O objeto Workbook representa uma pasta de trabalho do Microsoft Excel, ou
seja, um arquivo Excel. É possível acessar um objeto Workbook através da
coleção Workbooks (objeto Application), que contém todas as pastas de
trabalho abertas.
As propriedades ActiveWorkbook e ThisWorkbook também apontam para um
objeto do tipo Workbook. ActiveWorkbook aponta para a pasta de trabalho
que está ativa, enquanto a propriedade ThisWorkbook aponta para a pasta de
trabalho onde o código do Visual Basic está sendo executado.
Exemplo:
‘Mostra o nome da pasta de trabalho ativa MsgBox(ActiveWorkbook.Name)
Worksheet
O objeto Worksheet representa uma planilha do Microsoft Excel. Da mesma
forma que ocorre com o objeto Workbook, existe uma coleção de objetos
Worksheet, acessada a partir do objeto Workbook, denominada Worksheets.
A propriedade ActiveSheet aponta para a pasta de trabalho que está ativa.
38 - RISK MANAGEMENT
Exemplo:
‘Mostra o nome da planilha ativa MsgBox(ActiveSheet.Name)
Figura 6 - Diagrama de Objetos do Microsoft Excel a partir do Objeto Worksheet
Range
O objeto range representa uma célula ou um intervalo de células. Este
intervalo pode ser contíguo ou não, pode representar uma ou mais linhas,
uma ou mais colunas.
39 - RISK MANAGEMENT
Muitas das funcionalidades da linguagem VBA são executadas a partir do
objeto Range, por isso ele é um dos mais importantes e usados.
Exemplo:
Worksheets("Dados").Range("C1").Value = “Índices das Empresas” Set rangeInicial = Worksheets("Dados").Range( _ Worksheets("Dados").Cells(1,1), Worksheets("Dados").Cells(1,10))
Cells
O objeto Cells permite o acesso a uma célula (assim como o objeto Range).
Para isso, é necessário informar a linha e a coluna da célula desejada.
Exemplo:
Worksheets("Dados").Cells(1, 3).Value = “Índices das Empresas”
Collection
O objeto Collection é um conjunto ordenado de itens, não necessariamente
do mesmo tipo, que se pode fazer referência através de uma chave
(identificador) ou posição.
Exemplo:
Sub subOrdenacaoExcel() Dim rngMyRange As Range ‘ Uso do objeto Collection para retornar o objeto Worksheet ‘ identificado por Ordenacao Set rngMyRange = Worksheets("Ordenacao").Range("A1:A15")
40 - RISK MANAGEMENT
rngMyRange.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo End Sub
Chart
O objeto Chart representa um gráfico em uma determinada pasta de
trabalho. Um gráfico pode estar incorporado em um ChartObject ou uma
folha de gráfico separada.
O objeto Charts representa a coleção de todos os objetos do tipo Chart ativos
no Microsoft Excel.
Exemplo:
Charts("chart1").Activate
41 - RISK MANAGEMENT
Figura 7 - Diagrama de Objetos do Microsoft Excel a partir do Objeto Chart
PROPRIEDADES E MÉTODOS
Definições
As propriedades dos objetos são responsáveis por armazenar determinados
atributos. Elas são as caracacterísticas de um Objeto.
Métodos são serviços disponibilizados pelos objetos e são responsáveis por
realizar tarefas como, por exemplo, a mudança de uma determinada
propriedade.
42 - RISK MANAGEMENT
Principais propriedades dos principais objetos
Application
θ ActiveWorkbook: Retorna o objeto Workbook (pasta de trabalho) que
está ativo. Retorna Nothing se não houver janelas abertas.
θ ActiveSheet: Retorna o objeto referente a planilha ativa. Se nenhuma
planilha estiver ativa, a propriedade retorna Nothing.
θ ActiveCell: Retorna a célula ativa da planilha ativa. Se nenhuma célula
estiver ativa, a propriedade retorna Nothing.
θ Selection: A propriedade Selection retorna o objeto selecionado
(geralmente um objeto do tipo Range) da janela ativa.
Worksheet
θ Cells: Retorna todas as células da planilha representada pelo objeto
Worksheet. É possível referenciar a uma única célula, especificando o
índice da linha e da coluna da célula.
Exemplo: whsDados.Cells(1,1).Value
θ Name: Corresponde ao nome da planilha.
Chart
θ ChartTitle: Retorna um objeto ChartTitle representando o título do
gráfico especificado. Somente leitura.
θ HasLegend: Indica se o gráfico contém uma Legenda.
Exemplo: chaGrafico.HasLegend = true
θ Visible: Indica se o objeto está visível.
Exemplo: chaGrafico.Visible = true
43 - RISK MANAGEMENT
Principais métodos dos principais objetos
Worksheet
θ Activate: Ativa o objeto Worksheet.
Exemplo: whsDados.Activate
Collection
θ Add: Adiciona um item à coleção.
Exemplo: colCurso.Add(“VBA”, “Curso de VBA”)
θ Remove: Remove um item da coleção.
Exemplo: colCurso.Remove(“VBA”)
Range
θ Sort: Ordena as células definidas pelo objeto Range.
Exemplo:
rngMyRange.Sort Key1:=Range("A1"), _
Order1:=xlAscending, Header:=xlNoRemove(“VBA”)
TRATAMENTO DE ERROS
Os erros em tempo de execução dos programas devem ser tratados com
muito cuidado, de modo a oferecer o máximo de informação, seja para o
usuário ou para o programador.
Como tratar um erro no programa
O Excel permite o tratamento de erros através do comando On Error.
44 - RISK MANAGEMENT
O comando On Error
Há algumas formas de utilizar o comando On Error, dentre as quais,
destacam-se:
θ On Error GoTo [Destino]
O comando indica, que caso ocorra um erro, o procedimento ou função
irá continuar a execução da linha ou rótulo referenciado por [Destino].
Exemplo:
Sub calculaPreco()
Dim num1, num2 as Integer
Dim resultado as Double
On Error GoTo Erro
num1 = 12
num2 = 0
resultado = num1 / num2 ‘ Ocorrerá um erro
MsgBox(“Fim do procedimento.”) ‘ Comando não será executado
Exit Sub
Erro:
MsgBox(“Ocorreu um Erro no procedimento.”)
End Sub
θ On Error Resume Next
45 - RISK MANAGEMENT
O comando indica, que caso ocorra um erro, o procedimento irá executar
a instrução logo após àquela que ocorreu o erro.
Exemplo:
Sub calculaPreco()
Dim num1, num2 as Integer
Dim resultado as Double
On Error Resume Next
num1 = 12
num2 = 0
resultado = num1 / num2 ‘ Ocorrerá um erro
MsgBox(“Fim do procedimento.”) ‘ Comando será executado
End Sub
θ On Error GoTo 0
O comando desabilita o tratamento de erro do procedimento.
Exemplo:
Sub calculaPreco()