apostila de vba e · pontos de parada em uma macro_____ 34 visualização de valores de ......

46
1 - RISK MANAGEMENT A POSTILA DE VBA PARA EXCEL MARCOS DE BARROS OUTUBRO DE 2002

Upload: others

Post on 21-Jan-2021

3 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

1 - RISK MANAGEMENT

APOSTILA DE VBA PARA EXCEL

MARCOS DE BARROS

OUTUBRO DE 2002

Page 2: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 3: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 4: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 5: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 6: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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#)

Page 7: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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:

Page 8: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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]

Page 9: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 10: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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:

Page 11: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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)

Page 12: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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 é

Page 13: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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)

Page 14: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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:

Page 15: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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”

Page 16: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 17: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 18: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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)

Page 19: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 20: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 21: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 22: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 23: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 24: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 25: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 26: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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)

Page 27: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 28: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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)

Page 29: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 30: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 31: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 32: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 33: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 34: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 35: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 36: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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:

Page 37: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 38: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 39: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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")

Page 40: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 41: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 42: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 43: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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.

Page 44: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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

Page 45: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

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()

Page 46: APOSTILA DE VBA E · Pontos de parada em uma Macro_____ 34 Visualização de valores de ... Variável que contém uma lista de valores do mesmo tipo. O limite da lista pode ser informado

46 - RISK MANAGEMENT

Dim num1, num2 as Integer

Dim resultado as Double

On Error GoTo 0

num1 = 12

num2 = 0

resultado = num1 / num2 ‘ Ocorrerá um erro

MsgBox(“Fim do procedimento.”) ‘ Comando não será executado

End Sub