vba- cap6- emgi20052006 - estgv.ipv.pt cap6... · programaÇÃo microsoft vba programação sobre o...

112
Departamento de Informática 2005-2006 Capítulo 6 Curso de EMGI Microsoft VBA PROGRAMAÇÃO Manuel A. E. Baptista, Eng. Manuel A. E. Baptista, Eng. º º Ernesto R. Afonso, Eng. Ernesto R. Afonso, Eng. º º Agradecimentos: Agradecimentos: Jorge A. A. Loureiro, Eng. Jorge A. A. Loureiro, Eng. º º Valter Valter N. N. Alves, Eng. N. N. Alves, Eng. º º

Upload: phamhanh

Post on 29-Jun-2018

240 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Manuel A. E. Baptista, Eng.Manuel A. E. Baptista, Eng.ººErnesto R. Afonso, Eng.Ernesto R. Afonso, Eng.ºº

Agradecimentos:Agradecimentos:Jorge A. A. Loureiro, Eng.Jorge A. A. Loureiro, Eng.ººValterValter N. N. Alves, Eng.N. N. Alves, Eng.ºº

Page 2: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Ambiente de programaAmbiente de programaççãoão

Programando em VBA Programando em VBA -- Visual Basic for Applications Visual Basic for Applications

ManipulaManipulaçção de varião de variááveis estruturadas: veis estruturadas: arraysarrays

ProgramaProgramaçção estruturada ão estruturada

TTóópicos avanpicos avanççadosados

Objectos, Propriedades e MObjectos, Propriedades e Méétodos do EXCELtodos do EXCEL

Programação sobre EXCEL

Page 3: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Ambiente de programação

Ambiente do EXCEL

Folha de CFolha de Cáálculolculo

MMóódulodulo

GrGrááficofico

Caixa de DiCaixa de Diáálogologo

Charts

Worksheet

Modules

UserForms

LIVROLIVROLIVRO

WORKBOOK

APPLICATION

Ambiente de

Ambiente de

programa

programaççãoão

Page 4: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

ObjectoObjectoObjecto: Workbook

Folha de CFolha de Cáálculolculo

Aplicação (Application)

Livro (Workbook)

AplicaAplicaççãoãoMicrosoft EXCELEXCEL

Livro 1Livro 1Livro 2Livro 2……..Livro nLivro nLi

vros

Livr

os

LivroLivro

ObjectoObjectoObjecto: Application

ObjectoObjectoObjecto: Worksheet

Folha de GrFolha de Grááficofico

Caixa de DiCaixa de Diáálogologo

MMóódulodulo

ObjectoObjectoObjecto: Charts

ObjectoObjectoObjecto: UserForms

ObjectoObjectoObjecto: Module

Page 5: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Programação sobre o EXCEL

Criação dum módulo

Ferramentas → Macro → Editor do Visual Basic ... Insert → Module

Page 6: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Modos de actuação

Utilização exclusiva sobre os Módulos

Programar sobre VBA é fascinante!!!

111

222

333

444555

1 1 -- Correr o procedimentoCorrer o procedimento-- Colocar o cursor dentro do procedimentoColocar o cursor dentro do procedimento-- Fazer: Fazer: RunRun SubSub ou (F5)ou (F5)

2 2 -- Caixa de diCaixa de diáálogo: entrada da opiniãologo: entrada da opinião3 3 -- IndicaIndicaçção da opiniãoão da opinião4 4 -- ConfirmaConfirmaççãoão5 5 -- Caixa de diCaixa de diáálogo: visualizalogo: visualizaçção da opiniãoão da opinião

Page 7: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Utilização na forma de funções sobre uma folha de cálculo

111 222

333

444

555

1 1 -- Definir a funDefinir a funçção num mão num móódulodulo2 2 -- Abrir a folha de cAbrir a folha de cáálculo e escolher a clculo e escolher a céélula onde vamos usar a funlula onde vamos usar a funççãoão3 3 -- Invocar o assistente de funInvocar o assistente de funççõesões4 4 -- Escolher funEscolher funçções definidas pelo utilizadorões definidas pelo utilizador5 5 -- Escolher a Escolher a ““Minha_FuncaoMinha_Funcao””6 6 -- Seguir os passos anSeguir os passos anáálogos como se fosse uma funlogos como se fosse uma funçção do EXCELão do EXCEL

Page 8: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Utilização de procedimentos na forma de macros

222 333 444555

666777 888

999

1 1 -- Definir o procedimento no mDefinir o procedimento no móódulodulo2 2 -- Saltar para a folha de cSaltar para a folha de cáálculolculo3 3 -- Escrever os valores nas cEscrever os valores nas céélulas, que queremos sujeitar ao procedimentolulas, que queremos sujeitar ao procedimento4 4 -- Seleccionar as cSeleccionar as céélulaslulas5 5 -- Seleccionar : Seleccionar : Ferramentas Ferramentas →→ Macro Macro →→Macros ... Macros ... ou (ou (AltAlt+F8)+F8)6 6 -- Surgimento da caixa de diSurgimento da caixa de diáálogo com os procedimentos definidoslogo com os procedimentos definidos7 7 -- Escolher o procedimento Escolher o procedimento ““Calcular_dobroCalcular_dobro””8 8 -- Pressionar o botão Pressionar o botão ExecutarExecutar9 9 -- Troca dos valores nas cTroca dos valores nas céélulas pelos respectivos dobroslulas pelos respectivos dobros

111

Page 9: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Entrada e saída de dados

Inserção sobre o próprio código

Tratados como constantesTratados como constantesTratados como constantes

Nota: Cada vez que se desejar novos valores de entrada

teremos que corrigir o código, e de seguida correr novamente o

procedimento.

Nota: Cada vez que se desejar novos valores de entrada

teremos que corrigir o código, e de seguida correr novamente o

procedimento.

Page 10: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.1.4.2. Utilização de funções de entrada e saída de dados3.1.4.2. Utilização de funções de entrada e saída de dados

Entrada de Dados

Saída de Dados

InputBox (VBA) InputBox (EXCEL)

Valor Tipo de dados 0 Fórmula

1 Valor numérico

2 String

4 Valor lógico(TRUE, FALSE)

MsgBox (VBA)

Gosto de programar!!!!

Nota: Devolve sempre um valor do tipo pedido, não sendo necessária a

conversão de tipos e verifica sempre a validade do valor.

Nota: Devolve sempre um valor do tipo pedido, não sendo necessária a

conversão de tipos e verifica sempre a validade do valor.Nota: Devolve sempre um valor do tipo string, sendo necessária a

utilização de funções de conversão de tipo (ver mais à frente)

Nota: Devolve sempre um valor do tipo string, sendo necessária a

utilização de funções de conversão de tipo (ver mais à frente)

Page 11: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.1.4.3. Interacção com uma folha de cálculo3.1.4.3. Interacção com uma folha de cálculo

1 1 -- Editar os elementos da matriz 3x3 numa folha de cEditar os elementos da matriz 3x3 numa folha de cáálculolculo2 2 -- Definir o procedimento de leitura dos elementos da matriz num mDefinir o procedimento de leitura dos elementos da matriz num móódulodulo3 3 -- Correr o procedimentoCorrer o procedimento4 4 -- VisualizaVisualizaçção dos elementos da matriz 3x3ão dos elementos da matriz 3x3

111222

333

444

Page 12: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2. Programando em VBA - Visual Basic for Applications3.2. Programando em VBA 3.2. Programando em VBA -- Visual Visual BasicBasic for Applicationsfor Applications

3.2.1. Estrutura dum módulo3.2.1. Estrutura dum módulo

Opções de funcionamento(1)

Option Explicit

Declarações do módulo:

variáveis e constantes

Procedimentos

(1): A declaração de variáveis não é

obrigatória, e pode realizar-se em

qualquer local do módulo. Contudo,

recomenda-se a sua declaração e no

inicio dos procedimentos, funções ou

módulos, pois torna mais claro o

programa e mais rápida a execução.

(1): A declaração de variáveis não é

obrigatória, e pode realizar-se em

qualquer local do módulo. Contudo,

recomenda-se a sua declaração e no

inicio dos procedimentos, funções ou

módulos, pois torna mais claro o

programa e mais rápida a execução.

Page 13: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.2. Variáveis e constantes3.2.2. Variáveis e constantes

3.2.2.1. Tipos de dados3.2.2.1. Tipos de dados

O VBA, tal como a maioria das linguagens de programação de alto nível, define vários tipos de dados. O tipo de

dados, determina a gama de valores que estes podem tomar, assim como a gama de operações que podem ser

realizadas com estes. Por outro, lado o espaço ocupado em memória por cada valor depende do tipo de dados a

que pertence.

O VBA, tal como a maioria das linguagens de programação de alto nível, define vários tipos de dadostipos de dados. O tipo de

dados, determina a gama de valores que estes podem tomar, assim como a gama de operações que podem ser

realizadas com estes. Por outro, lado o espaço ocupado em memória por cada valor depende do tipo de dados a

que pertence.

Tipos lógicos : Boolean (valores lógicos: Verdadeiro (TRUE), Falso (FALSE)Tipos numéricos : Integer, Long (valores numéricos, apenas com parte inteira)

Single, Double (valores numéricos, reais)Tipo Currency : dedicado a quantidades monetáriasTipo Date : dedicado às datas Tipo String : dedicado à manipulação de Strings (cadeias de caracteres)Tipo Variant : trata-se dum tipo bastante especial, que pode conter qualquer um dos outros tiposTipo Object : relacionado com a utilização de objectos pertencentes à aplicação

Page 14: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.2.2. Sumário dos vários tipos de dados3.2.2.2. Sumário dos vários tipos de dados

Tipos de Dados Ocupação (em bytes) Gama de valores

Boolean 2 bytes True ou False

Integer 2 bytes -32768 a 32767

Long (grande inteiro) 4 bytes -2 147 483 648 a 2 147 483 647

Single (virgula flutuantede precisão simples)

4 bytes -3, 402 823E38 a -1,401 298E-45 : valores negativos 1, 401 298E-45 a 3,402 823E38 : valores positivos

Double (virgula flutuantede precisão dupla)

8 bytes -1,797 693 134 86232E308 a-4,940 656 458 41247E-324 : valores negativos4,94065645841247E-324a 1,797 693 134 86232E308 : valores positivos

Currency 8 bytes -922 337 203 685 477, 5808 a922 337 203 685 477, 5807

Date 8 bytes 1 Jan 0100 A 31 Dez 9999

String 1 byte/caracter (0 a 65535) ou mais em algumas sistemas até 2 biliões

Variant 16 bytes +1 para c/caracter

Qualquer valor numérico até à gama do Double, ouqualquer texto de caracteres

Object 4 bytes Qualquer referência a um objecto.

Page 15: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.2.3. Tipo Variant3.2.2.3. Tipo VariantVariant

Trata-se dum tipo muito especial, pois pode conter qualquer um dos outros tipos de dadosTrata-se dum tipo muito especial, pois pode conter qualquer um dos outros tipos de dados

Aspectos a ter em conta

uma variável deste tipo poderá conter qualquer tipo de dados;

a flexibilidade anterior diminui o controlo possível sobre a utilização duma variável deste tipo;

se em determinada situação, for colocado involuntariamente um valor dum tipo de dados não desejado, a

utilização duma variável deste tipo, torna muito mais difícil a detecção do erro cometido;

o tipo Variant, é o que ocupa mais espaço em memória.

uma variuma variáável deste tipo podervel deste tipo poderáá conter qualquer tipo de dados;conter qualquer tipo de dados;

a flexibilidade anterior diminui o controlo possa flexibilidade anterior diminui o controlo possíível sobre a utilizavel sobre a utilizaçção duma varião duma variáável deste tipo;vel deste tipo;

se em determinada situase em determinada situaçção, for colocado involuntariamente um valor dum tipo de dados nãão, for colocado involuntariamente um valor dum tipo de dados não desejado, a o desejado, a

utilizautilizaçção duma varião duma variáável deste tipo, torna muito mais difvel deste tipo, torna muito mais difíícil a deteccil a detecçção do erro cometido;ão do erro cometido;

o o tipo VariantVariant, , éé o que ocupa mais espao que ocupa mais espaçço em memo em memóória.ria.

Nota: A utilização do tipo Variant deve restringir-se apenas às situações, em que não se tenha conhecimento do tipo de dados a

utilizar.

Nota: A utilização do tipo Variant deve restringir-se apenas às situações, em que não se tenha conhecimento do tipo de dados a

utilizar.

Page 16: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.2.5. Declaração de variáveis3.2.2.5. Declaração de variáveis

Uma variável representa a área de memória, que contém um valor dum determinado tipo de dados. Para associar

um determinado tipo de dados a uma dada variável, é necessário proceder à declaração da variável. A

declaração da variável condiciona, o tipo de dados que esta pode conter durante a execução dum programa.

Uma variável representa a área de memória, que contém um valor dum determinado tipo de dados. Para associar

um determinado tipo de dados a uma dada variável, é necessário proceder à declaradeclaraçção da varião da variáávelvel. A

declaração da variável condiciona, o tipo de dados que esta pode conter durante a execução dum programa.

3.2.2.6. Sintaxe: declaração duma variável do tipo simples3.2.2.6. Sintaxe: declaração duma variável do tipo simples

A declaração de várias variáveis, pode ser feita da forma anterior em linhas diferentes iniciadas pela palavra reservada Dim , ou

duma forma equivalente, na mesma linha através da separação do nome e do tipo das variáveis por virgulas. Para o efeito vejamos

o exemplo seguinte:

Page 17: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Algumas considerações: declaração de variáveis simples

Quando uma variável não é declarada explicitamente (i.e.: quando a opção Option Explicit estádesactivada), o VBA assume que esta se trata duma variável do tipo Variant

Quando uma variQuando uma variáável não vel não éé declarada explicitamente (i.e.: quando a opdeclarada explicitamente (i.e.: quando a opçção ão OptionOption ExplicitExplicit estestáádesactivada), o VBA assume que esta se trata duma varidesactivada), o VBA assume que esta se trata duma variáável do tipo vel do tipo VariantVariant

se declararmos apenas o nome da variável sem indicar o tipo de dados, o VBA assume por defeito o tipoVariant

se declararmos apenas o nome da varise declararmos apenas o nome da variáável sem indicar o tipo de dados, o VBA assume por defeito o tipovel sem indicar o tipo de dados, o VBA assume por defeito o tipoVariantVariant

‘ Exemplos

Dim s As String

Dim n1 As Integer, n2 As

Double

Dim x As Single

Dim y As Single

Dim data AsDate

Page 18: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.2.7. Sintaxe: declaração de variáveis de tipo estruturado ou Arrays3.2.2.7. Sintaxe: declaração de variáveis de tipo estruturado ou Arrays

Arrays (vectores)

Por vezes torna-se necessário/conveniente referenciar uma zona de memória onde estão guardados vários

valores dum mesmo tipo de dados simples ou estruturado, utilizando um mesmo nome. Para o efeito, utilizam-se

variáveis do tipo estruturado: Arrays.

Por vezes torna-se necessário/conveniente referenciar uma zona de memória onde estão guardados vários

valores dum mesmo tipo de dados simples ou estruturado, utilizando um mesmo nome. Para o efeito, utilizam-se

variáveis do tipo estruturado: ArraysArrays.

AA20

15

17

18

1

2

3

4

O Array é um tipo de variável estruturada, consistindo num

conjunto de “células”, identificadas univocamente por um “índice”

(endereço), cujo o conteúdo é constituído por um valor dum

determinado tipo de dados simples.

O ArrayArray é um tipo de variável estruturada, consistindo num

conjunto de “células”, identificadas univocamente por um “índice”

(endereço), cujo o conteúdo é constituído por um valor dum

determinado tipo de dados simples.

Células Índices

Tipo inteiro Nota: Para nos referirmos a cada um dos seus valores, utilizamos o nome do Array e o índice da

célula, na qual o valor se encontra.

Nota: Para nos referirmos a cada um dos seus valores, utilizamos o nome do ArrayArray e o índice da

célula, na qual o valor se encontra.

‘ Exemplo

Dim A(1 To 4) As Integer

, var_1 As integer

var_1 = A(2)’r

epresenta o va

lor 15 do arra

y A

Page 19: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Declaração

A gama_de_índices, apresenta-se do seguinte modo:menor_índice To maior_índice,

equivalendo a dizer em analogia com um bloco habitacional, que este vai “desde o andar mais baixo até (To) ao andar mais alto”.

A gama_de_índices, apresenta-se do seguinte modo:menor_índice To maior_índice,

equivalendo a dizer em analogia com um bloco habitacional, que este vai “desde o andar mais baixo até (To) ao andar mais alto”.

O array Array_A, teria 6 células (desde a célula -2 à célula 3), com valores do tipo Integer.O array Array_A, teria 6 células (desde a célula -2 à célula 3), com valores do tipo Integer.

O array Array_B, teria 3 células (desde a célula 6 à célula 8), com valores do tipo string.O array Array_B, teria 3 células (desde a célula 6 à célula 8), com valores do tipo string.

Page 20: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Algumas considerações:

As duas formas de declarar a gama de índices são equivalentes, tratando-se em ambos os casos dum Arrayde 5 células com valores do tipo double, cujo o menor índice é 0 (0..4)

As duas formas de declarar a gama de As duas formas de declarar a gama de ííndices são equivalentes, tratandondices são equivalentes, tratando--se em ambos os casos dum se em ambos os casos dum ArrayArrayde 5 cde 5 céélulas com valores do tipo lulas com valores do tipo double, cujo o menor , cujo o menor ííndice ndice éé 0 (0..4)0 (0..4)

Apesar de ser possível qualquer gama de índices (desde que o valor do índice inferior seja menor que o valor do índice superior), em geral é preferível que o valor do índice inferior comece em 1.

Apesar de ser possApesar de ser possíível qualquer gama de vel qualquer gama de ííndices (desde que o valor do ndices (desde que o valor do ííndice inferior seja menor que o ndice inferior seja menor que o valor do valor do ííndice superior), em geral ndice superior), em geral éé preferpreferíível que o valor do vel que o valor do ííndice inferior comece em 1. ndice inferior comece em 1.

Quando quisermos referir uma dada célula, indicamos o nome do Array seguido do índice da célula entre parêntesis. Contudo, teremos de escolher sempre um valor do índice, que se encontre dentro da gama de índices.

Quando quisermos referir uma dada cQuando quisermos referir uma dada céélula, indicamos o lula, indicamos o nome do nome do ArrayArray seguido do seguido do ííndice da cndice da céélula entre lula entre parêntesis. parêntesis. Contudo, teremos de escolher sempre um Contudo, teremos de escolher sempre um valor do valor do ííndice, que se encontre dentro da gama de ndice, que se encontre dentro da gama de ííndicesndices..

Page 21: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Arrays multi-dimensionais

5 9 1

3 9 1

4 7 2

5 9 1

3 9 1

4 9 1

5 9 1

1 9 1

2 9 1

5 9 1

5 9 1

5 9 1

1 9 1

1 2

3

1 2 3

1

2

1 2 3

3

1

2

12

3

Array uni-dimensional - (1-D)

Array bi-dimensional - (2-D)

Array tri-dimensional - (3-D)

Array k-dimensional - (K-D)

Embora não se tenha desenhado um Array K-D, para K >3, a sua declaração e utilização éigualmente possível em VBA.

Embora não se tenha desenhado um ArrayArray K-D, para K >3, a sua declaração e utilização éigualmente possível em VBA.

3

Page 22: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.2.8. Declaração de constantes3.2.2.8. Declaração de constantes

A diferença em relação à declaração duma variável reside na palavra reservada utilizada, Const em vez de

Dim, e ainda na necessidade de indicar antecipadamente o valor atribuído à constante.

A diferença em relação à declaração duma variável reside na palavra reservada utilizada, Const em vez de

Dim, e ainda na necessidade de indicar antecipadamente o valor atribuído à constante.

móduloNota: Em toda a codificação do módulo utiliza-se sempre o

nome da constante (e não o seu valor), pelo que se

quisermos alterar o seu valor, basta alterar o valor da linha

da declaração Const.

Nota: Em toda a codificação do módulo utiliza-se sempre o

nome da constante (e não o seu valor), pelo que se

quisermos alterar o seu valor, basta alterar o valor da linha

da declaração Const.

Page 23: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.3. Procedimentos3.2.3. Procedimentos

Um procedimento é constituído por um conjunto de instruções codificadas, ao qual é atribuído um determinado

nome, sendo a sua execução feita individualmente num módulo.

Um procedimentoprocedimento é constituído por um conjunto de instruções codificadas, ao qual é atribuído um determinado

nome, sendo a sua execução feita individualmente num módulo.

3.2.3.1. Estrutura dum procedimento3.2.3.1. Estrutura dum procedimento

Cabeçalho do Procedimento

Tipo, Nome, Argumentos, Tipo devolvido

Declarações do Procedimento

Constantes e Variáveis

Corpo do Procedimento

Bloco de instruções codificadas

Fim do Procedimento

End Tipo do Procedimento

Page 24: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.3.2. Tipos de procedimentos3.2.3.2. Tipos de procedimentos

Sub … End Sub

Function … End Function

Existem dois tipos de procedimentos: Sub … End Sub e Function … End Function. A diferença entre

estes dois tipos de procedimentos reside no facto de Function … End Function, devolver um valor a um

outro procedimento que o tiver invocado, como uma atribuição a uma variável, o que não acontece com Sub …

End Sub.

Existem dois tipos de procedimentos: Sub … End Sub e Function … End Function. A diferença entre

estes dois tipos de procedimentos reside no facto de Function … End Function, devolver um valor a um

outro procedimento que o tiver invocado, como uma atribuição a uma variável, o que não acontece com Sub …

End Sub.

Sub nome_do_procedimento (lista_de_argum

entos)

Dimensionamento das constantes

e variáveis do procedimento

Bloco de instruções codificada

s

End Sub

Function nome_do_procedimento (lista_de_argum

entos)As tipo_do_valor_a_devolver

Dimensionamento das constantes

e variáveis do procedimento

Bloco de instruções codificada

s

nome_do_procedimento = expressão_do_

valor_a_devolver

End Function

Page 25: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.3.2. Exemplo3.2.3.2. Exemplo

Definição da função f_partes

Definição do procedimento Rep_ValoresAtribuição duma expressão a f_partes

Nota: Para que uma função possa

devolver um determinado valor, torna-se

necessário que uma das suas instruções

faça a atribuição desse valor ao seu

nome.

Nota: Para que uma função possa

devolver um determinado valor, torna-se

necessário que uma das suas instruções

faça a atribuição desse valor ao seu

nome.

Chamada de f_partes dentro de Rep_Valores

Page 26: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.4. Instruções3.2.4. Instruções

3.2.4.1. Tipos de Instruções3.2.4.1. Tipos de Instruções

- Leitura e Escrita

- Atribuição

- Expressões

- Comentários

- Estruturas de controlo

O corpo dum procedimento é composto por um conjunto de instruções. Numa linguagem de programação estas

instruções correspondem à codificação das instruções utilizadas na escrita dum algoritmo (pseudo-linguagem ou

fluxograma), de acordo com a sua sintaxe (neste caso a do VBA).

O corpo dum procedimento é composto por um conjunto de instruinstruççõesões. Numa linguagem de programação estas

instruinstruççõesões correspondem à codificação das instruções utilizadas na escrita dum algoritmo (pseudo-linguagem ou

fluxograma), de acordo com a sua sintaxe (neste caso a do VBA).

Page 27: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.5. Leitura e Escrita3.2.5. Leitura e Escrita

As instruções de Leitura e Escrita, correspondem na linguagem VBA, às funções de entrada e saída de dados já

abordadas na secção 3.1.4.2: InputBox e MsgBox.

As instruções de Leitura e Escrita, correspondem na linguagem VBA, às funções de entrada e saída de dados já

abordadas na secção 3.1.4.2: InputBox e MsgBox.

Exemplo

…Inst.1: ESCREVER (“Cálculo da área do rectângulo”)

Inst.2: ESCREVER (“Indique o valor da base”)

Inst.3: LER (base)

Inst.4: ESCREVER (“Indique o valor da altura”)

Inst.5: LER (altura)

Inst.6: area base * altura

Inst.7: ESCREVER ( “A área é:” area)

...

…Inst.1: ESCREVER (“Cálculo da área do rectângulo”)

Inst.2: ESCREVER (“Indique o valor da base”)

Inst.3: LER (base)

Inst.4: ESCREVER (“Indique o valor da altura”)

Inst.5: LER (altura)

Inst.6: area base * altura

Inst.7: ESCREVER ( “A área é:” area)

...

Codificação VBADescrição Algorítmica

Page 28: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO Em VBA, o operador de atribuição é o sinal de igual “ =“, que tal como o símbolo utilizado na descrição

algorítmica (“←”), também este significa: “ toma o valor de “.

A instrução em pseudo-linguagem I←3, seria codificado em VBA através da instrução I=3

Em VBA, o operador de atribuição é o sinal de igual “ =“, que tal como o símbolo utilizado na descrição

algorítmica (“←”), também este significa: “ toma o valor de “.

A instrução em pseudo-linguagem I←3, seria codificado em VBA através da instrução I=3

3.2.6. Atribuição3.2.6. Atribuição

Codificação VBADescrição Algorítmica

…Inst.1: ESCREVER (“Cálculo da área do rectângulo”)

Inst.2: ESCREVER (“Indique o valor da base”)

Inst.3: LER (base)

Inst.4: ESCREVER (“Indique o valor da altura”)

Inst.5: LER (altura)

Inst.6: area base * altura

Inst.7: ESCREVER ( “A área é:” area)

...

…Inst.1: ESCREVER (“Cálculo da área do rectângulo”)

Inst.2: ESCREVER (“Indique o valor da base”)

Inst.3: LER (base)

Inst.4: ESCREVER (“Indique o valor da altura”)

Inst.5: LER (altura)

Inst.6: area base * altura

Inst.7: ESCREVER ( “A área é:” area)

...

Exemplo

Page 29: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.7. Expressões3.2.7. Expressões

3.2.7.1. Tipos de expressões3.2.7.1. Tipos de expressões

Tal como num algoritmo uma expressão (ou fórmula) é composta por um conjunto de operandos (dados directos

ou indirectos), relacionados entre si por operadores e/ou por funções, permitindo o cálculo de valores, a partir

dum outro conjunto de valores.

Tal como num algoritmo uma expressão (ou fórmula) é composta por um conjunto de operandos (dados directos

ou indirectos), relacionados entre si por operadores e/ou por funções, permitindo o cálculo de valores, a partir

dum outro conjunto de valores.

Numéricas - são expressões que utilizam apenas operadores aritméticos, funções matemáticas e trigonométricas e operandos numéricos (inteiros ou reais).

Booleanas ou Lógicas - são expressões que utilizam apenas operadores relacionais e têm como resultado valores do tipo booleano (True, False).

‘ Exemplos

Var_A = Sin(x) + 2*

Cos(x)

Var_B = 100* (1+0,15

)* Var_A

Area = base * altur

a

‘ Exemplos

Var_A >=Var_B

Var_F = Not (Var_C)

Var_G = And (Var_C,V

ar_D)

Page 30: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.7.2. Tipos de operadores e respectiva precedência3.2.7.2. Tipos de operadores e respectiva precedência

Operadores aritméticos

Operadores relacionais

Operador Significado Exemplo+ Adição- Subtracção ou sinal negativo* Produto/ Divisão 17/5 vale 3.4\ Parte inteira da divisão 17\5 vale 3

Mod Resto da divisão inteira 17 Mod 5 vale 2^ Exponenciação 2^3 vale 23=8

O perador S ign ificado< M enor que

<= M enor ou igual a> M aio r que

>= M aio r ou igual a= Igual a

<> diferen te

17 5

2 3

Tome atenção: a interpretação da relação entre dois valores

depende do seu tipo; enquanto a relação entre valores

numéricos se baseia na ordem que estes ocupam em termos da

recta real (onde se incluem os inteiros), a relação entre strings

(cadeias de caracteres) baseia-se na sua ordem de acordo com

a tabela ASCII:

ex.: -5 < 2 < 4 < 10“1” < “10” < “1006” < “184” < “2”< “30< ”ola”

Tome atenção: a interpretação da relação entre dois valores

depende do seu tipo; enquanto a relação entre valores

numéricos se baseia na ordem que estes ocupam em termos da

recta real (onde se incluem os inteiros), a relação entre strings

(cadeias de caracteres) baseia-se na sua ordem de acordo com

a tabela ASCII:

ex.: -5 < 2 < 4 < 10“1” < “10” < “1006” < “184” < “2”< “30< ”ola”

Page 31: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Operadores lógicos (booleanos)

Operadores para cadeias de caracteres

Operador Significado Símbolo matemáticoNot Negação ~And "e" ∧Or "ou" ∨Xor "ou" exclusivo ∨Imp Implicação ⇒Eqv equivalência ⇔

Operador Significado Exemplo& Concatenação "bom" & "dia" vale "bom dia"+ Concatenação "bom" + "dia" vale "bom dia"

Tome atenção: “20” + “34” vale “2034” e não “54”Tome atenção: “20” + “34” vale “2034” e não “54”

Page 32: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

^-*, /\Mod+, -

exponenciaçãosinal de negativomultiplicação e divisãodivisão inteiraresto da divisãoadição e subtracção

& concatenação de cadeias=, <>, <, >, <=, >=,Like, Is

igual a; diferente de; menor que; maior que;menor ou igual a; maior ou igual a; like; is

NotAndOrXorEqvImp

negaçãoeouou exclusivoequivalênciaimplicação

^-*, /\Mod+, -

exponenciaçãosinal de negativomultiplicação e divisãodivisão inteiraresto da divisãoadição e subtracção

& concatenação de cadeias=, <>, <, >, <=, >=,Like, Is

igual a; diferente de; menor que; maior que;menor ou igual a; maior ou igual a; like; is

NotAndOrXorEqvImp

negaçãoeouou exclusivoequivalênciaimplicação

Precedência dos operadores

Quando queremos construir uma expressão que envolva diferentes operadores teremos de ter em atenção a

respectiva tabela de precedências

Quando queremos construir uma expressão que envolva diferentes operadores teremos de ter em atenção a

respectiva tabela de precedências

Tabela de precedências dos operadores

Tome atenção:

a) quando estamos perante operadores com o

mesmo nível de precedência estes deverão

ser considerados de acordo com a ordem em

que se apresentam: da esquerda para a

direita.

b) quando queremos forçar uma determinada

ordem na execução das operações duma

expressão usam-se parêntesis (ex.: -3 -

(4+6/(3-1))*5 ).

Tome atenção:

a) quando estamos perante operadores com o

mesmo nível de precedência estes deverão

ser considerados de acordo com a ordem em

que se apresentam: da esquerda para a

direita.

b) quando queremos forçar uma determinada

ordem na execução das operações duma

expressão usam-se parêntesis (ex.: -3 -

(4+6/(3-1))*5 ).

Page 33: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

‘ ExemplosDim media As Singl

e

Dim valores(1 To 10) As Single

…media=Applicat

ion.Average(valores)

...

3.2.7.3. Utilização de funções3.2.7.3. Utilização de funções

EXCEL (Application)

VBA (módulo)

Uma expressão (ou fórmula) pode conter além de operandos relacionados entre si através de operadores,

também funções. As funções utilizadas presentes numa expressão codificada em VBA podem estar definidas no:

Uma expressão (ou fórmula) pode conter além de operandos relacionados entre si através de operadores,

também funções. As funções utilizadas presentes numa expressão codificada em VBA podem estar definidas no:

Application.nome_da_função (lista_de_argum

entos)

O nome das funções do EXCEL, num módulo está em inglês.

‘ ExemplosAbs(x) Fix(x) Ln(x)

Cos(x) Int(x) Sqrt(x)

Exp(x) Log(x) Sin(x)

...

As restantes funções podem ser consultadas no manual On-Line.

Page 34: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.8. Comentários3.2.8. Comentários

Os comentários são frases, que têm como missão facilitar a compreensão do conteúdo dos módulos (declaração das variáveis ou instruções), sendo sempre antecedidos do caracter “ ‘ “ (plica).

Os comentários são frases, que têm como missão facilitar a compreensão do conteúdo dos módulos (declaração das variáveis ou instruções), sendo sempre antecedidos do caracter “ ‘ “ (plica).

Exemplos de comentários

Page 35: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.9. Estruturas de controlo3.2.9. Estruturas de controlo

3.2.9.1. Tipos estruturas de controlo3.2.9.1. Tipos estruturas de controlo

Existem vários tipos de estruturas de controlo, cada uma das quais com comportamentos distintos em termos da

sequência de execução das diversas instruções dentro dum procedimento. Estas condicionam a ordem pela qual

as várias instruções serão executadas no procedimento, tal como vimos na descrição algorítmica.

Existem vários tipos de estruturas de controlo, cada uma das quais com comportamentos distintos em termos da

sequência de execução das diversas instruções dentro dum procedimento. Estas condicionam a ordem pela qual

as várias instruções serão executadas no procedimento, tal como vimos na descrição algorítmica.

- Estruturas Sequenciais

- Estruturas de Decisão Condicional

- Estruturas de Repetição com n.º de iterações pré-definidas

- Estruturas de Repetição Condicional

Page 36: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.10. Estrutura Sequencial3.2.10. Estrutura Sequencial

De acordo com esta estrutura, as instruções são executadas pela ordem em que estas se encontram definidas

num procedimento. Por defeito, esta é estrutura usada em qualquer procedimento.

De acordo com esta estrutura, as instruções são executadas pela ordem em que estas se encontram definidas

num procedimento. Por defeito, esta é estrutura usada em qualquer procedimento.

Codificação VBADescrição Algorítmica

…Inst.1: ESCREVER (“Cálculo da área do rectângulo”)

Inst.2: ESCREVER (“Indique o valor da base”)

Inst.3: LER (base)

Inst.4: ESCREVER (“Indique o valor da altura”)

Inst.5: LER (altura)

Inst.6: area base * altura

Inst.7: ESCREVER ( “A área é:” area)

...

…Inst.1: ESCREVER (“Cálculo da área do rectângulo”)

Inst.2: ESCREVER (“Indique o valor da base”)

Inst.3: LER (base)

Inst.4: ESCREVER (“Indique o valor da altura”)

Inst.5: LER (altura)

Inst.6: area base * altura

Inst.7: ESCREVER ( “A área é:” area)

...

Exemplo

Sequ

enci

al

Sequ

enci

al

Page 37: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.11. Estruturas de Decisão Condicional3.2.11. Estruturas de Decisão Condicional

3.2.11.1. Decisão Simples3.2.11.1. Decisão Simples

Nesta estrutura de controlo, a instrução ou bloco de instruções serão executadas apenas, se a condição testada

for verdadeira (“True”).

Nesta estrutura de controlo, a instrução ou bloco de instruções serão executadas apenas, se a condição testada

for verdadeira (“True”).

Sintaxes:

If condição Then

Instrução ou bloco de instruçõ

es

End If

Sintaxe 1

Sintaxe 2If condição Then Instrução

Utiliza-se mais do que uma linha, e se a condição for verdadeira, corresponde à execução duma instrução ou bloco de instruções. A

primeira linha deve acabar com Then e a estrutura com End If.

Utiliza-se mais do que uma linha, e se a condição for verdadeira, corresponde à execução duma instrução ou bloco de instruções. A

primeira linha deve acabar com ThenThen e a estrutura com EndEnd IfIf.

Neste caso utiliza-se apenas uma linha, e se a condição for verdadeira, corresponde à execução de apenas uma instrução.Neste caso utiliza-se apenas uma linha, e se a condição for verdadeira, corresponde à execução de apenas uma instrução.

Page 38: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO Codificação VBADescrição Algorítmica

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)

Inst.3: SE Nota >= 9,5 ENTÃO Situação “Aprovado”Inst.4: SE Situação = “Aprovado” ENTÃO

ESCREVER (“Indique o nome do aluno”)LER (nome)ESCREVER ( “O aluno” & nome & “ foi ” & Situação)

FIM SE

...

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)

Inst.3: SE Nota >= 9,5 ENTÃO Situação “Aprovado”Inst.4: SE Situação = “Aprovado” ENTÃO

ESCREVER (“Indique o nome do aluno”)LER (nome)ESCREVER ( “O aluno” & nome & “ foi ” & Situação)

FIM SE

...

Exemplo - Análise da nota dum aluno: (Nota >= 9,5 então Aprovado).

Page 39: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.11.2. Decisão Dupla (ou alternativa)3.2.11.2. Decisão Dupla (ou alternativa)

Nesta estrutura de controlo se a condição testada for verdadeira (“True”), serão executadas a instrução_1 ou

bloco de instruções_1, caso contrário (“False”) serão executadas a instrução_2 ou o bloco de instruções_2.

Nesta estrutura de controlo se a condição testada for verdadeira (“True”), serão executadas a instrução_1 ou

bloco de instruções_1, caso contrário (“False”) serão executadas a instrução_2 ou o bloco de instruções_2.

Sintaxe 1If condição Then

Instrução_1 ou bloco de instru

ções_1

ElseInstrução_2 ou

bloco de instruções_2

End If

If condição Then Instrução_1 Else Instrução_2

Utiliza-se mais do que uma linha, e se a condição for verdadeira, executa-se a instrução_1 ou o bloco de instruções_1, senão executa-se a instrução_2 ou o

bloco de instruções_2. A primeira linha deve acabar com Then e a estrutura tem de fechar com End If.

Utiliza-se mais do que uma linha, e se a condição for verdadeira, executa-se a instrução_1 ou o bloco de instruções_1, senão executa-se a instrução_2 ou o

bloco de instruções_2. A primeira linha deve acabar com ThenThen e a estrutura tem de fechar com EndEnd IfIf.

Neste caso utiliza-se apenas uma linha, e se a condição for verdadeira executa a instrução_1, senão executa a instrução_2.Neste caso utiliza-se apenas uma linha, e se a condição for verdadeira executa a instrução_1, senão executa a instrução_2.

Sintaxe 2

Page 40: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)

Instr.3: ESCREVER (“Indique o nome do aluno”)

Instr.4: LER (Nome)

Inst.5: SE Nota >= 9,5 ENTÃO

Situação “Aprovado”

ESCREVER (“O aluno “ &Nome &“foi “ &SituaçãoSENÃOSituação “Reprovado”

ESCREVER (“O aluno “ &Nome &“foi “ &SituaçãoFIM SE

...

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)

Instr.3: ESCREVER (“Indique o nome do aluno”)

Instr.4: LER (Nome)

Inst.5: SE Nota >= 9,5 ENTÃO

Situação “Aprovado”

ESCREVER (“O aluno “ &Nome &“foi “ &SituaçãoSENÃOSituação “Reprovado”

ESCREVER (“O aluno “ &Nome &“foi “ &SituaçãoFIM SE

...

Codificação VBADescrição Algorítmica

Exemplo - Análise da nota dum aluno: (Se Nota >= 9,5 então Aprovado Senão Reprovado).

Page 41: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.11.3. Decisão Múltipla (ou selectiva)3.2.11.3. Decisão Múltipla (ou selectiva)

As estruturas anteriores, encontram-se limitadas ao resultado lógico da sua condição (“True” ou “False”), pelo que

podemos ter no máximo dois comportamentos alternativos. Se quisermos utilizar mais do que uma condição,

correspondendo a igual número de comportamentos, teremos de utilizar uma estrutura de decisão múltipla ou

selectiva.

As estruturas anteriores, encontram-se limitadas ao resultado lógico da sua condição (“True” ou “False”), pelo que

podemos ter no máximo dois comportamentos alternativos. Se quisermos utilizar mais do que uma condição,

correspondendo a igual número de comportamentos, teremos de utilizar uma estrutura de decisão mestrutura de decisão múúltipla ou ltipla ou

selectivaselectiva.

Sintaxe 1

If condição_1 Then

Instrução_1 ou bloco de instru

ções_1

ElseIf condição_2 Then

Instrução_2 ou bloco de instru

ções_2

………………………………….

ElseIf condição_n Then

Instrução_n ou bloco de instru

ções_n

ElseInstrução_n+1 o

u bloco de instruções_n+1

End If

Page 42: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Exemplo

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)

Inst.3: SE Nota < 9,5 ENTÃO

Nota_Qual “Insuficiente”SENÃO SE Nota <14 ENTÃO

Nota_Qual “Suficiente”SENÃO SE Nota <17 ENTÃO

Nota_Qual “Bom”SENÃO SE Nota <=20 ENTÃO

Nota_Qual “Muito Bom”SENÃO

Nota_Qual “Inválida”FIM SE

Inst. 4: ESCREVER (“A nota “ &Nota &“corresponde a “ &Nota_Qual)

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)

Inst.3: SE Nota < 9,5 ENTÃO

Nota_Qual “Insuficiente”SENÃO SE Nota <14 ENTÃO

Nota_Qual “Suficiente”SENÃO SE Nota <17 ENTÃO

Nota_Qual “Bom”SENÃO SE Nota <=20 ENTÃO

Nota_Qual “Muito Bom”SENÃO

Nota_Qual “Inválida”FIM SE

Inst. 4: ESCREVER (“A nota “ &Nota &“corresponde a “ &Nota_Qual)

Codificação VBADescrição Algorítmica

Page 43: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Sintaxe 1

Exemplo Descrição Algorítmica…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)Inst.3: CASO Nota SEJA

<9.5 FAZ:Nota_Qual “Insuficiente”

<14 FAZ:Nota_Qual “Suficiente”

<17 FAZ:Nota_Qual “Bom”

<=20 FAZ:Nota_Qual “Muito Bom”

SENÃO FAZ:Nota_Qual “Inválida”

FIM CASOInst. 4: ESCREVER (“A nota “ &Nota &“corresponde a “ &Nota_Qual)...

…Inst.1: ESCREVER (“Indique a nota do aluno”)

Inst.2: LER (Nota)Inst.3: CASO Nota SEJA

<9.5 FAZ:Nota_Qual “Insuficiente”

<14 FAZ:Nota_Qual “Suficiente”

<17 FAZ:Nota_Qual “Bom”

<=20 FAZ:Nota_Qual “Muito Bom”

SENÃO FAZ:Nota_Qual “Inválida”

FIM CASOInst. 4: ESCREVER (“A nota “ &Nota &“corresponde a “ &Nota_Qual)...

Select Case expressão

Case lista_de_expressões_1

Instrução_1 ou bloco de instruções_2

………………………………….

Case lista_de_expressões_n

Instrução_n ou bloco de instruções_n

Case ElseInstrução_n+1 ou bloco de in

struções_n+1

End Select

Codificação VBA

Page 44: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Algumas considerações:

A lista_de_expressões indicada em cada linha iniciada por Case pode apresentar as seguintes

formas:

A A lista_de_expressõeslista_de_expressões indicada em cada linha iniciada por indicada em cada linha iniciada por CaseCase pode apresentar as seguintes pode apresentar as seguintes

formas:formas:

- expressãoexpressão : qualquer expressão da qual resulte um valor;

- expressãoexpressão ToTo expressãoexpressão : permite a especificação duma gama de valores, através da utilização da palavra reservada ToTo;

- IsIs operador relacional expressãoexpressão: a utilização de IsIs seguida dum operador relacional, permite indicar todos os valores que gozam duma determinada relação;

- Case Case ElseElse : destina-se a indicar a instrução ou bloco de instruções a executar no caso da expressão indicada na linha SelectSelect CaseCase, tomar um valor diferente dos referidos nas restantes linhas CaseCase (éopcional).

Nota: se existir mais do que uma linha cuja a expressão adquire o valor da expressão da linha Select Case, serão apenas

executadas a instrução ou o bloco de instruções correspondentes à primeira linha Case com essa expressão.

Nota: se existir mais do que uma linha cuja a expressão adquire o valor da expressão da linha SelectSelect CaseCase, serão apenas

executadas a instrução ou o bloco de instruções correspondentes à primeira linha CaseCase com essa expressão.

Ex.: 4, “batatas” , j+3

Ex.: 12 To 50, “A” To “Z”

Ex.: Case Is >=100Case Is <0, Is >100, 4 To 8, 11 To 15, 18

Page 45: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.12. Estrutura de Repetição com n.º de iterações pré-definidas3.2.12. Estrutura de Repetição com n.º de iterações pré-definidas

3.2.12.1. For …. Next3.2.12.1. For …. Next

Esta estrutura de controlo permite a repetição duma determinada instrução ou bloco de instruções, o número de vezes que tiverem sido pré-definidas, e duma forma controlada. Cada repetição corresponde a um ciclo.

Esta estrutura de controlo permite a repetição duma determinada instrução ou bloco de instruções, o número de vezes que tiverem sido pré-definidas, e duma forma controlada. Cada repetição corresponde a um ciclo.

Sintaxe:

Algumas considerações:

For variável_de_iteração = valor_i

nicial To valor_final [Step valor_do_passo]

Instrução ou bloco de instruçõ

es

Next

Esta estrutura implica a utilização duma variável_de_iteração ou contador, que em cada nova iteração

(ciclo) toma um novo valor; de acordo com o especificado começa com o valor_inicial e vai até ao

valor_final. O Step (opcional), define o intervalo de incremento (valor_do_passo>0) ou decremento

(valor_do_passo <0) da variável_de_iteração.

Esta estrutura implica a utilização duma variável_de_iteração ou contador, que em cada nova iteração

(ciclo) toma um novo valor; de acordo com o especificado começa com o valor_inicial e vai até ao

valor_final. O Step (opcional), define o intervalo de incremento (valor_do_passo>0) ou decremento

(valor_do_passo <0) da variável_de_iteração.

Page 46: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Exemplo 1

∑=

×−=N

i

iiS1

)2( Cálculo do Somatório dos primeiros N elementos

Codificação VBADescrição Algorítmica

…Inst.1: Somatorio 0

Inst.2: DE i 1 ATÉ N FAZ

Somatorio Somatorio + (2-i)*i

FIM DE

Inst.3: ESCREVER ( “O resultado do somatório é”, & Somatorio)

...

…Inst.1: Somatorio 0

Inst.2: DEDE i 1 ATATÉÉ N FAZFAZ

Somatorio Somatorio + (2-i)*i

FIM DEFIM DE

Inst.3: ESCREVER ( “O resultado do somatório é”, & Somatorio)

...

Page 47: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

‘ Ler matriz AInst.1: DE l 1 ATÉ N_L FAZ

DE c 1 ATÉ N_C FAZESCREVER(“Indique o valor de A(l,c)”)LER(A(l,c))

FIM DE (c)FIM DE (l)

‘Escrever matriz AInst.2: DE l 1 ATÉ N_L FAZ

DE c 1 ATÉ N_C FAZESCREVER(A(l,c))

FIM DE (c)FIM DE (l)

...

‘ Ler matriz AInst.1: DEDE l 1 ATATÉÉ N_L FAZFAZ

DEDE c 1 ATATÉÉ N_C FAZFAZESCREVERESCREVER(“Indique o valor de A(l,c)”)LERLER(A(l,c))

FIM DE FIM DE (c)(c)FIM DE FIM DE (l)(l)

‘Escrever matriz AInst.2: DEDE l 1 ATATÉÉ N_L FAZFAZ

DEDE c 1 ATATÉÉ N_C FAZFAZESCREVERESCREVER(A(l,c))

FIM DE FIM DE (c)(c)FIM DE FIM DE (l)(l)

...

Exemplo 2

⎥⎥⎥

⎢⎢⎢

⎡=

333231

232221

221211

aaaaaaaaa

A

Descrição Algorítmica Codificação VBA

- Ler valores da matriz A- Escrever valores da matriz A

Page 48: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.12.2. For Each…. Next3.2.12.2. For Each…. Next

Sintaxe:For Each variável_contad

or In Variável_estruturada

Instrução ou bloco de instruçõ

es

Next

Para acedermos aos valores contidos numa variável estruturada (Array), podemos utilizar também uma estrutura de controlo deste tipo.

Para acedermos aos valores contidos numa variável estruturada (ArrayArray), podemos utilizar também uma estrutura de controlo deste tipo.

ExemploDescrição Algorítmica Codificação VBA

….‘Escrever matriz AInst.1: DE l 1 ATÉ N_L FAZ

DE c 1 ATÉ N_C FAZESCREVER(A(l,c))

FIM DE (c)FIM DE (l)

...

….‘Escrever matriz AInst.1: DEDE l 1 ATATÉÉ N_L FAZFAZ

DEDE c 1 ATATÉÉ N_C FAZFAZESCREVERESCREVER(A(l,c))

FIM DE FIM DE (c)(c)FIM DE FIM DE (l)(l)

...

Page 49: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.13. Repetição Condicional 3.2.13. Repetição Condicional

Esta estrutura de controlo, de acordo com as suas variantes, permite a repetição duma instrução ou bloco de

instruções em ciclo, em função do resultado do teste a uma dada condição feito em cada ciclo, no início ou no fim

de cada iteração.

Esta estrutura de controlo, de acordo com as suas variantes, permite a repetição duma instrução ou bloco de

instruções em ciclo, em função do resultado do teste a uma dada condição feito em cada ciclo, no início ou no fim

de cada iteração.

Teste no início - o teste à condição é realizado antes da execução de qualquer instrução contida numa

estrutura de controlo destas.

Teste no fim - o teste à condição é realizado depois de cada instrução contida numa estrutura de controlo

destas ter sido executada, de forma a verificar se se deve avançar para outra iteração.

Page 50: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.13.1. Do …. Loop3.2.13.1. Do …. Loop

Esta variante não tem nenhum teste a uma condição, que possa conduzir ao fim da execução repetitiva da instrução ou bloco de instruções contidas no ciclo. Para suspender a execução numa estrutura de controlo deste tipo, entre as instruções deve existir a instrução Exit Do: força a saída do ciclo.

Esta variante não tem nenhum teste a uma condição, que possa conduzir ao fim da execução repetitiva da instrução ou bloco de instruções contidas no ciclo. Para suspender a execução numa estrutura de controlo deste tipo, entre as instruções deve existir a instrução ExitExit DoDo: força a saída do ciclo.

Sintaxe:Do

Instrução ou bloco de instruçõ

es

Loop

Exemplo

Descrição Algorítmica

( )∑=

+=N

iiS

112

1

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIR

SE termo > 0,001 ENTÃOs s+termoi i+1termo 1/(2(n+1))

SENÃOSair do ciclo

FIM SEFIM REPETIR...

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIRREPETIR

SESE termo > 0,001 ENTÃOENTÃOs s+termoi i+1termo 1/(2(n+1))

SENÃOSENÃOSair do cicloSair do ciclo

FIM SEFIM SEFIM REPETIRFIM REPETIR...

Somar até que o termo sejainferior a 0,001.

Codificação VBA

Nota: esta variante é raramente utilizada.Nota: esta variante é raramente utilizada.

Page 51: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.13.2. Do While Condição …. Loop3.2.13.2. Do While Condição …. Loop

Esta variante faz o teste duma condição antes de executar a instrução ou bloco de instruções presentes no ciclo, significando: “Enquanto a condição for verdadeira, executar a instrução ou instruções no ciclo”. Se a condição for “False”no início, a instrução ou o bloco de instruções do ciclo nunca serão executadas.

Esta variante faz o teste duma condição antes de executar a instrução ou bloco de instruções presentes no ciclo, significando: “Enquanto a condição for verdadeira, executar a instrução ou instruções no ciclo”. Se a condição for “False”no início, a instrução ou o bloco de instruções do ciclo nunca serão executadas.

Sintaxe:Do While Condição

Instrução ou bloco de instruçõ

es

LoopExemplo

( )∑=

+=N

iiS

112

1

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: ENQUANTO termo > 0,001

s s+termoi i+1termo 1/(2(n+1))

FIM ENQUANTO...

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: ENQUANTO ENQUANTO termo > 0,001

s s+termoi i+1termo 1/(2(n+1))

FIM ENQUANTOFIM ENQUANTO...

Somar até que o termoseja inferior a 0,001.

Descrição Algorítmica Codificação VBA

Page 52: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.13.3. Do …. Loop While Condição3.2.13.3. Do …. Loop While Condição

Esta variante faz o teste da condição no fim de executar pelo menos uma vez a instrução ou bloco de instruções presentes no ciclo, significando: “ Executar a instrução ou bloco de instruções enquanto a condição for verdadeira”. Se a condição for “False” no início, a instrução ou bloco de instruções serão executadas pelo menos uma vez.

Esta variante faz o teste da condição no fim de executar pelo menos uma vez a instrução ou bloco de instruções presentes no ciclo, significando: “ Executar a instrução ou bloco de instruções enquanto a condição for verdadeira”. Se a condição for “False” no início, a instrução ou bloco de instruções serão executadas pelo menos uma vez.

Sintaxe:Do

Instrução ou bloco de instruçõ

es

Loop While Condição

Exemplo( )∑

=+=

N

iiS

112

1

Descrição Algorítmica…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIR

s s+termoi i+1termo 1/(2(n+1))

ENQUANTO termo > 0,001...

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIRREPETIR

s s+termoi i+1termo 1/(2(n+1))

ENQUANTO ENQUANTO termo > 0,001...

Somar até que o termoseja inferior a 0,001.

Codificação VBA

Page 53: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.13.4. Do Until Condição …. Loop3.2.13.4. Do Until Condição …. Loop

Esta variante faz o teste da condição antes de executar a instrução ou o bloco de instruções presentes no ciclo, significando: “ Até que a condição seja verdadeira executar a instrução ou o bloco de instruções”. Se a condição for “True”logo no início, a instrução ou o bloco de instruções nunca serão executadas.

Esta variante faz o teste da condição antes de executar a instrução ou o bloco de instruções presentes no ciclo, significando: “ Até que a condição seja verdadeira executar a instrução ou o bloco de instruções”. Se a condição for “True”logo no início, a instrução ou o bloco de instruções nunca serão executadas.

Sintaxe:Do Until Condição

Instrução ou bloco de instruçõ

es

Loop

Exemplo( )∑

=+=

N

iiS

112

1

Descrição Algorítmica…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIR ATÉ termo <= 0,001

s s+termoi i+1termo 1/(2(n+1))

FIM REPETIR...

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIR ATREPETIR ATÉÉ termo <= 0,001

s s+termoi i+1termo 1/(2(n+1))

FIM REPETIRFIM REPETIR...

Somar até que o termoseja inferior a 0,001.

Codificação VBA

Page 54: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.2.13.5. Do …. Loop Until Condição3.2.13.5. Do …. Loop Until Condição

Esta variante faz o teste da condição no fim de executar pelo menos uma vez a instrução ou bloco de instruções presentes no ciclo, significando: “ Executar a instrução ou bloco de instruções até que a condição seja verdadeira”. Se a condição for “True” no início, a instrução ou bloco de instruções serão executadas pelo menos uma vez.

Esta variante faz o teste da condição no fim de executar pelo menos uma vez a instrução ou bloco de instruções presentes no ciclo, significando: “ Executar a instrução ou bloco de instruções até que a condição seja verdadeira”. Se a condição for “True” no início, a instrução ou bloco de instruções serão executadas pelo menos uma vez.

Sintaxe:Do

Instrução ou bloco de instruçõ

es

Loop Until Condição

Exemplo( )∑

=+=

N

iiS

112

1

Descrição Algorítmica…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIR

s s+termoi i+1termo 1/(2(n+1))

ATÉ termo <= 0,001...

…Inst.1: i 1Inst.2: s 0Inst.3: termo 1/(2(n+1))Inst.4: REPETIRREPETIR

s s+termoi i+1termo 1/(2(n+1))

ATATÉÉ termo <= 0,001...

Somar até que o termoseja inferior a 0,001.

Codificação VBA

Page 55: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3. Programação estruturada3.3. Programa3.3. Programaçção estruturadaão estruturada

3.3.1. Estrutura dum programa3.3.1. Estrutura dum programa

Um programa em VBA, corresponde a um conjunto de instruções codificadas, as quais podem estar “concentradas” apenas num procedimento, ou ser distribuídas por vários procedimentos, relacionados entre si. A esta distribuição das instruções codificadas, por vários procedimentos (Sub … End Sub e Function … End

Function), tal como vimos na secção 3.2.3.2), correspondendo à divisão sucessiva da tarefa principal em

tarefas mais elementares, dá-se o nome de programação estruturada.

Um programa em VBA, corresponde a um conjunto de instruções codificadas, as quais podem estar “concentradas” apenas num procedimento, ou ser distribuídas por vários procedimentos, relacionados entre si. A esta distribuição das instruções codificadas, por vários procedimentos (SubSub … EndEnd SubSub e FunctionFunction … EndEnd

FunctionFunction), tal como vimos na secção 3.2.3.2), correspondendo à divisão sucessiva da tarefa principal em

tarefas mais elementares, dá-se o nome de programaprogramaçção estruturadaão estruturada.

Programa num sóProcedimento

Bloco de código

Bloco de código

Procedimento A com o Bloco de código

Procedimento Bcom o Bloco de código

Procedimento Principal

Chamada aos procedimentos A e B

Programação estruturada

Page 56: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Algumas considerações em relação à programação estruturada:

Existe um procedimento que podemos designar por “procedimento principal”, sendo os restantes

procedimentos definidos à parte;

Existe um procedimento que podemos designar por “procedimento principal”, sendo os restantes

procedimentos definidos à parte;

O “procedimento principal”, além de executar as instruções próprias, chama também os outros

procedimentos, os quais executam outras instruções;

O “procedimento principal”, além de executar as instruções próprias, chama também os outros

procedimentos, os quais executam outras instruções;

Cada um dos outros procedimentos, pode chamar outros procedimentos;Cada um dos outros procedimentos, pode chamar outros procedimentos;

Para que haja comunicação entre os procedimentos é necessário que recebam valores ou variáveis, na

forma de argumentos e/ou devolvam valores quando terminam a respectiva execução.

Para que haja comunicação entre os procedimentos é necessário que recebam valores ou variáveis, na

forma de argumentos e/ou devolvam valores quando terminam a respectiva execução.

Page 57: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Exemplo

Programação não estruturada

Programação estruturada

Declaração dos argumentos

Passagem de argumentos

Page 58: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3.2. Definição e chamada de Procedimentos3.3.2. Definição e chamada de Procedimentos

Definição - trata-se da codificação das instruções a executar, quando o procedimento for executado (i.e.:

quando for chamado).

Chamada - trata-se do pedido para que um dado procedimento seja executado a partir de outro, e para que o

controlo de execução passe para as instruções codificadas, que constituem a definição do procedimento.

Algumas considerações:

Um procedimento tem apenas uma definição, mas pode ser chamado (por outros) tantas vezes quantas as

necessárias.

Um procedimento tem apenas uma definição, mas pode ser chamado (por outros) tantas vezes quantas as

necessárias.

Sempre que se chamar um determinado procedimento, tem-se que lhe passar todos os argumentos, que

esse estiver à espera (i.e.: os argumentos declarados na definição, desde que não sejam opcionais).

Sempre que se chamar um determinado procedimento, tem-se que lhe passar todos os argumentos, que

esse estiver à espera (i.e.: os argumentos declarados na definição, desde que não sejam opcionais).

Page 59: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3.3. Argumentos3.3.3. Argumentos

Sintaxe de declaração

Nome_argumento_1 As Tipo_argumento_1,...Nome_argumento_1 As Tipo_argumento_1,...

Exemplo: Procedimento que recebe dois

valores do tipo inteiro e calcula a

soma e a subtracção Os argumentos declarados passam a funcionar dentro do procedimento como variáveis.

Este procedimento (Adi_Sub) não pode ser executado só por si, funciona apenas quando lhe forem passados 2 argumentos, tendo por isso de ser chamado a partir dum outro procedimento, que lhepasse os valores.

No que diz respeito aos argumentos temos, que considerar a forma como esse são declarados na definição dum procedimento, e como esses serão fornecidos em cada uma das chamadas, ao respectivo procedimento.

No que diz respeito aos argumentosargumentos temos, que considerar a forma como esse são declarados na definição dum procedimento, e como esses serão fornecidos em cada uma das chamadas, ao respectivo procedimento.

Page 60: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Chamada

Exemplo

Na chamada a um procedimento, indicamos o seu nome seguido da lista de valores correspondentes a cada um dos argumentos, separados por vírgulas.

Na chamada a um procedimento, indicamos o seu nome seguido da lista de valores correspondentes a cada um dos argumentos, separados por vírgulas.

Chamada Definição

x x1y x2

Não existe, nenhuma relação directa entre o nome dos argumentos do procedimento que é chamado e o nome dos argumentos usados na sua chamada.

Podemos passar também, além de variáveis, expressões (desde que o seu tipo seja compatível com o tipo do argumento do procedimento chamado.

Deve-se ter em atenção a ordem pela qual os argumentos são passados. Neste caso os resultados serão naturalmente diferentes.

Page 61: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3.4. Chamada de procedimentos3.3.4. Chamada de procedimentos

3.3.4.1. Regras para a utilização de parêntesis3.3.4.1. Regras para a utilização de parêntesis

Entende-se por “chamada” a um procedimento o acto de o invocar (dentro de um outro qualquer procedimento). A chamada pode envolver a passagem de argumentos e eventualmente a devolução de um valor (no caso de Function … End Function).

Entende-se por “chamada” a um procedimento o acto de o invocar (dentro de um outro qualquer procedimento). A chamada pode envolver a passagem de argumentos e eventualmente a devolução de um valor (no caso de

FunctionFunction …… EndEnd FunctionFunction).

A ter em atenção:

Adi_Sub x,y e não Adi_Sub(x,y)

Contudo:str=InputBox(“

Escreva algo:”) e não str=InputBox “Escreva algo:

E noutras situações é possível:

MsgBox (“Vamos programar”) e também

MsgBox “Vamos programar”

Nota: a utilização de parêntesis (envolvendo os argumentos) nas chamadas aos procedimentos, depende por um lado do n.º de

argumentos, e por outro do contexto em que as chamadas ocorrem.

Nota: a utilização de parêntesis (envolvendo os argumentos) nas chamadas aos procedimentos, depende por um lado do n.º de

argumentos, e por outro do contexto em que as chamadas ocorrem.

Page 62: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Contextos

Utilização correcta de parêntesis, em qualquer contexto

1- um procedimento é chamado simplesmente (com os seus argumentos)

2- um procedimento enquadra-se numa atribuição (caso de FunctionFunction … EndEnd FunctionFunction)

3- um procedimento é chamado usando a instrução CallCall ou serve ele próprio, de argumento a outro (caso de FunctionFunction … EndEnd FunctionFunction)

Adi_Sub 5,7

Res = Fun_Sen(x)

Call Adi_Sub(5,7)

Adi_Sub 6,Fun_Sen(x)

Procedimentos com 1 ou mais argumentos

Procedimentos sem argumentos

Usar parêntesis Se e Só Sea chamada se encontrar numa atribuição ou se estiver a servir de argumento ao Call ou a um outro procedimento.

Não usar parêntesis

Page 63: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3.5. Passagem de argumentos3.3.5. Passagem de argumentos

Exemplo

Quando se passam argumentos a um procedimento, o VBA vai adequar cada um desses, aos que se encontram

descritos na definição do procedimento, respeitando a ordem pela qual os argumentos são apresentados: o

primeiro argumento declarado na definição do procedimento toma o valor do primeiro argumento apresentado na

chamada; o segundo vai tomar o valor do segundo; e assim sucessivamente.

Quando se passam argumentos a um procedimento, o VBA vai adequar cada um desses, aos que se encontram

descritos na definição do procedimento, respeitando a ordem pela qual os argumentos são apresentados: o

primeiro argumento declarado na definição do procedimento toma o valor do primeiro argumento apresentado na

chamada; o segundo vai tomar o valor do segundo; e assim sucessivamente.

Definição do procedimento

Chamada dentro de outro procedimento

Sub Proc_Exemplo (v As Single, Msg_1 As String, Msg_2

As String)

Instrução ou bloco de instru

ções

End Sub

Sub Proc_Principal()

Dim str as String

str= “Boa Tarde”

Proc_Exemplo 2.7, str, “Boa Noite”

Outra Instrução ou bloco de

instruções

End Sub

Page 64: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Sub Proc_Principal()

Dim str as String

str= “Boa Tarde”

Proc_Exemplo v:=2.7, Msg_1:=str, Msg_2:=“

Boa Noite”

Outra Instrução ou bloco de

instruções

End Sub

3.3.5.1. Argumentos nomeados3.3.5.1. Argumentos nomeados

Exemplo

No VBA é possível explicitar exactamente a que argumento da definição do procedimento, se refere cada um dos

argumentos da chamada, através da sua nomeação.

No VBA é possível explicitar exactamente a que argumento da definição do procedimento, se refere cada um dos

argumentos da chamada, através da sua nomeanomeaççãoão.

Sintaxe

Nome_argumento_1:= valor,….Nome_argumento_1:= valor,….

Chamada do procedimento Proc_Exemplo (ver secção 3.3.5) dentro de outro procedimento

Argumentos nomeados

Proc_Exemplo Msg_1:=str, Msg_2:=“Boa Noit

e”, v:=2.7

Graças aos argumentos nomeados, podemos alterar a ordem dos argumentos. Por outro lado, podem-se também, combinar argumentos não nomeados com argumentos nomeados, devendo surgir em primeiro lugar os não nomeados.

Page 65: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3.5.2. Argumentos opcionais3.3.5.2. Argumentos opcionais

Exemplo de utilização: MsgBox

Entende-se por argumento opcional, o que não necessita de ser contemplado nas chamadas ao respectivo procedimento. A declaração de argumentos opcionais está relacionada com a existência de valores por defeito (defaults).

Entende-se por argumento opcionalargumento opcional, o que não necessita de ser contemplado nas chamadas ao respectivo procedimento. A declaração de argumentos opcionaisargumentos opcionais está relacionada com a existência de valores por defeito (defaults).

MsgBox “Olá a todos”

MsgBox “Olá a todos”, Title:= “Um outro Titl

o”

A função MsgBox tem 5 argumentos; 4 desses são opcionais, sendo apenas obrigatório o argumento referente à

mensagem. Entre os argumentos opcionais, conta-se o Title (permite controlar o titlo na barra superior da caixa

de diálogo), cujo o valor por defeito é “Microsoft Excel”.

A função MsgBoxMsgBox tem 5 argumentos; 4 desses são opcionais, sendo apenas obrigatório o argumento referente à

mensagem. Entre os argumentos opcionais, conta-se o TitleTitle (permite controlar o titlo na barra superior da caixa

de diálogo), cujo o valor por defeito é “Microsoft Excel”.

Nota: uma vez que o argumento Title não é o 2.º argumento, temos que o nomear para que o

VBA, conheça esse argumento como sendo, a que queremos atribuir um valor.

Nota: uma vez que o argumento TitleTitle não é o 2.º argumento, temos que o nomear para que o

VBA, conheça esse argumento como sendo, a que queremos atribuir um valor.

Page 66: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Declaração de argumentos opcionais

Exemplo

Quando se define um procedimento, para que um argumento seja opcional é necessário:

1- escrever a palavra reservada OptionalOptional no início do argumento;

2- que os argumentos opcionais sejam os últimos da lista de argumentos, para que sejamos obrigados a nomear todos os argumentos que surjam depois do primeiro argumento opcional;

3- que os argumentos opcionais sejam do tipo VariantVariant.

A função IsMissing permite detectar (em tempo de execução) se um determinado argumento foi ou não de facto passado ao procedimento: Devolve “True” se o argumento em causa não tiver sido passado, senão devolve “False”.

Page 67: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.3.5.3. Argumentos passados por valor ou por referência3.3.5.3. Argumentos passados por valor ou por referência

- Argumentos alterados dentro dum procedimento

- Argumentos não alterados dentro dum procedimento

No que diz respeito aos argumentos passados na chamada dum procedimento, existem duas possibilidades: os

argumentos da chamada são alteráveis dentro dum procedimento ou os argumentos da chamada não são

alteráveis dentro do procedimento.

No que diz respeito aos argumentos passados na chamada dum procedimento, existem duas possibilidades: os

argumentos da chamada são alteráveis dentro dum procedimento ou os argumentos da chamada não são

alteráveis dentro do procedimento.

Nesta situação, os argumentos têm de ser passados por referência, o que implica a passagem duma referência

(posição na memória) para o argumento original. As alterações realizadas nessa referência irão ter reflexo no

argumento referido.

Neste caso, os argumentos são passados por valor, correspondendo à passagem duma cópia do valor do

argumento apresentado na chamada do respectivo procedimento, para o argumento declarado na definição do

procedimento. Qualquer alteração estará confinada à cópia efectuada, e nunca ao argumento original.

Page 68: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

SintaxesReferência

Valor

Exemplo

- Quando o argumento deve ser passado por referência, usa-se a palavra reservada ByRefByRef a anteceder a sua declaração.

- Quando o argumento deve ser passado por valor, usa-se a palavra reservada ByValByVal a anteceder a sua declaração.

Nota: Por defeito o VBA, efectua a passagem de argumentos por referência (quando não se indica ByRef nem ByVal, assume-se ByRef). Por defeito as variáveis passadas a um procedimento, sujeitam-se a alterações no seu conteúdo.

Nota: Por defeito o VBA, efectua a passagem de argumentos por referência (quando não se indica ByRefByRef nem ByValByVal, assume-se ByRefByRef). Por defeito as variáveis passadas a um procedimento, sujeitam-se a alterações no seu conteúdo.

Sub Proc_Exemplo_Val_Ref(ByVal x As Integer, ByVal

y As Integer)

x=10

y=4

End Sub

Sub Proc_Test()

Dim A As Integer, B AsInteger

A=0:B=2

Proc_Exemplo_Val_Ref A,B

End Sub

Após a execução de Proc_Exemplo_Val_Ref:

•A tem o valor 0•B tem o valor 2

Page 69: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4. Tópicos avançados3.4. T3.4. Tóópicos avanpicos avanççadosados

3.4.1. Âmbito das variáveis3.4.1. Âmbito das variáveis

Entende-se por âmbito (ou visibilidade) de uma variável, o local onde esta pode ser “reconhecida”. Em VBA,

podem-se identificar 3 âmbitos distintos:

Entende-se por âmbito (ou visibilidade) de uma variável, o local onde esta pode ser “reconhecida”. Em VBA,

podem-se identificar 3 âmbitos distintos:

-- NNíível do procedimentovel do procedimento

-- NNíível do mvel do móódulodulo

-- NNíível do livrovel do livro

LivroLivroMMóódulodulo

ProcedimentoProcedimento

ProcedimentoProcedimento

Page 70: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.1.1. Nível do Procedimento3.4.1.1. Nível do Procedimento

3.4.1.2. Nível do Módulo3.4.1.2. Nível do Módulo

3.4.1.3. Nível do Livro3.4.1.3. Nível do Livro

As variáveis declaradas dentro dum procedimento, têm como âmbito o próprio procedimento, sendo por isso apenas reconhecidas dentro desse. A estas variáveis é normal atribuir-se a designação de variáveis locais (ao procedimento).

As variáveis declaradas dentro dum procedimento, têm como âmbito o próprio procedimento, sendo por isso apenas reconhecidas dentro desse. A estas variáveis é normal atribuir-se a designação de variáveis locais (ao procedimento).

Para que as variáveis tenham um âmbito ao nível do módulo, a sua declaração deve realizar-se dentro desse e fora de qualquer procedimento. As variáveis com este âmbito são visíveis em todo o módulo e em todos os procedimentos definidos nesse. A estas variáveis atribui-se normalmente a designação de variáveis globais (ao módulo).

Para que as variáveis tenham um âmbito ao nível do módulo, a sua declaração deve realizar-se dentro desse e fora de qualquer procedimento. As variáveis com este âmbito são visíveis em todo o módulo e em todos os procedimentos definidos nesse. A estas variáveis atribui-se normalmente a designação de variáveis globais (ao módulo).

O âmbito destas variáveis corresponde a todo o livro (workbook). Para que uma variável possa adquirir este âmbito, esta deve ser declarada num dos módulos, utilizando a palavra reservada Public (que significa que a

variável é pública em todos os módulos do livro), e pode-se dizer que a variável é global ao livro.

O âmbito destas variáveis corresponde a todo o livro (workbook). Para que uma variável possa adquirir este âmbito, esta deve ser declarada num dos módulos, utilizando a palavra reservada PublicPublic (que significa que a

variável é pública em todos os módulos do livro), e pode-se dizer que a variável é global ao livro.

Page 71: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.1.4. Exemplo3.4.1.4. Exemplo

Public x As IntegerDim y As Integer...

Sub Proc_1()Dim u As Integer

...

End Sub...

Sub Proc_2(z As Integer)Dim v As Integer...

End Sub...

Sub Proc_3()Dim x As Integer

...

End Sub...

Sub Proc_4(x As Integer)...

End Sub

MMóódulodulo

A variável x é visível não só em todo o módulo (portanto em todos os procedimento do módulo), como em todos os outros módulos (portanto também em todos os procedimentos).

A variável y é visível em todo o módulo, sendo por isso também visível em Proc_1, Proc_2, Proc_3 e Proc_4, pelo que pode ser lá utilizada.

A variável u é visível apenas dentro do procedimento Proc_1, não podendo por exemplo ser invocada no Proc_2.

A variáveis z e v são visíveis, apenas dentro do procedimento Proc_2.

Dentro do procedimento Proc_3, quando tivermos que usar a variável x, estaremos a referir-nos à sua variável x.

Dentro do procedimento Proc_4, quando falarmos de x, estamos a referir-nos ao argumento x. Neste caso não podemos criar uma variável x dentro deste procedimento, porque entraríamos em conflito com o argumento x (ambos com o mesmo âmbito).

Page 72: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.2. Tempo de vida das variáveis3.4.2. Tempo de vida das variáveis

3.4.2.1. Variável declarada ao nível dum dado módulo 3.4.2.1. Variável declarada ao nível dum dado módulo

3.4.2.2. Variável declarada ao nível dum dado procedimento 3.4.2.2. Variável declarada ao nível dum dado procedimento

O tempo de vida das variáveis, está relacionado com o respectivo âmbito de visibilidade.O tempo de vida das variáveis, está relacionado com o respectivo âmbito de visibilidade.

Nesta situação, a variável está sempre activa pelo que se o seu valor sofrer alterações (devido à execução das instruções de algum dos procedimentos do módulo), essas serão sempre preservadas. As alterações só serão perdidas se reeditarmos o módulo, se fizermos a sua reinicializarão (RESET) ou se sairmos do EXCEL e voltarmos a entrar.

Nesta situação, a variável está sempre activa pelo que se o seu valor sofrer alterações (devido à execução das instruções de algum dos procedimentos do módulo), essas serão sempre preservadas. As alterações só serão perdidas se reeditarmos o módulo, se fizermos a sua reinicializarão (RESET) ou se sairmos do EXCEL e voltarmos a entrar.

Qualquer variável nesta situação, é criada quando o procedimento é invocado e morre quando este finaliza a sua execução. Se o procedimento for chamado várias vezes, uma variável é criada e morre, cada vez que este éexecutado.

Por esta razão, nem sempre é possível guardar numa variável declarada dentro dum procedimento, um valor a usar numa sua futura execução. Para que isso seja possível, utiliza-se a palavra reservada Static em vez de

Dim, tornando a variável estática.

Qualquer variável nesta situação, é criada quando o procedimento é invocado e morre quando este finaliza a sua execução. Se o procedimento for chamado várias vezes, uma variável é criada e morre, cada vez que este éexecutado.

Por esta razão, nem sempre é possível guardar numa variável declarada dentro dum procedimento, um valor a usar numa sua futura execução. Para que isso seja possível, utiliza-se a palavra reservada StaticStatic em vez de

DimDim, tornando a variável estática.

Page 73: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.2.3. Exemplo 3.4.2.3. Exemplo

Dim j As Integer...

Sub Proc_Dur_Var()Dim i As IntegerStatic K As Integer

j=0:i=0:k=0i=i+1j=j+1k=k+1MsgBox “O valor de i é “ &iMsgBox “O valor de j é “ &jMsgBox “O valor de k é “ &kEnd Sub

MMóóduloduloÂmbito do MóduloÂmbito do Módulo

Âmbito do ProcedimentoÂmbito do Procedimento

Variável estáticaVariável estática

Uma vez que ii tem o âmbito do procedimento, sempre que se executar este procedimento, o seu valor será sempre 11.

Uma vez que jj tem o âmbito do módulo, sempre que se executar este procedimento, o seu valor será incrementado em 11 unidade.

Uma vez que kk é uma variável estática, sempre que executarmos o procedimento, o seu valor será incrementado em 11 unidade.

Page 74: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.3. Conversões entre tipos de dados3.4.3. Conversões entre tipos de dados

3.4.3.1. Implícitas (automáticas)3.4.3.1. Implícitas (automáticas)

Tal como vimos na secção 3.2.2.1., o tipo de dados que uma variável pode conter, está condicionado pelo tipo com que esta foi declarada. Porém, existe a possibilidade de converter valores dum determinado tipo de dados para um outro tipo.

Tal como vimos na secção 3.2.2.1., o tipo de dados que uma variável pode conter, está condicionado pelo tipo com que esta foi declarada. Porém, existe a possibilidade de converter valores dum determinado tipo de dados para um outro tipo.

O VBA pode levar a cabo algumas conversões, quando atribuímos a uma variável dum determinado tipo de dados, um valor dum outro tipo de dados: conversões implícitas. Entre as várias conversões, salientam-se as seguintes:

O VBA pode levar a cabo algumas conversões, quando atribuímos a uma variável dum determinado tipo de dados, um valor dum outro tipo de dados: conversões implícitas. Entre as várias conversões, salientam-se as seguintes:

- Conversões entre tipos numéricos

- Conversões entre tipos numéricos e tipo String

- Conversões de/para o tipo Variant

Page 75: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO A conversão de valores entre tipos numéricos é em geral possível, apesar de implicar em alguns casos a perda de

informação.

A conversão de valores entre tipos numéricos é em geral possível, apesar de implicar em alguns casos a perda de informação.

Conversão: inteiro (IntegerInteger ou LongLong) → real (SingleSingle ou DoubleDouble)

3.4.3.2. Conversões entre tipos numéricos 3.4.3.2. Conversões entre tipos numéricos

Conversão: real (SingleSingle ou DoubleDouble) → inteiro (IntegerInteger ou LongLong)

Dim i As Integer, d As Double

i=4

d=i ‘ d passa a valer 4

d=5 ‘ d passa a valer 5

Nota: esta conversão é sempre válida.Nota: esta conversão é sempre válida.

Dim i As Integer, d As Double

d=4.0

i=d ‘ i passa a valer 4

i=5.0 ‘ i passa a valer 5

d=6.3

i=d ‘ i passa a valer 6

i=7.9 ‘ i passa a valer 8

Nota: embora possível esta conversão pode não ser válida.

A conversão dum número real para um inteiro, implica um arredondamento, pelo que o valor que ficará na variável do tipo inteiro não será o mesmo, que lhe foi atribuído.

Nota: embora possível esta conversão pode não ser válida.

A conversão dum número real para um inteiro, implica um arredondamento, pelo que o valor que ficará na variável do tipo inteiro não será o mesmo, que lhe foi atribuído.

Page 76: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.3.3. Conversões entre tipos numéricos e tipo String3.4.3.3. Conversões entre tipos numéricos e tipo String

3.4.3.4. Conversões de/para o tipo Variant3.4.3.4. Conversões de/para o tipo Variant

Dim i As Integer, d As Double, s

As String

i=4

s=i ‘Impossível:dáerro!

s=5 ‘Impossível:dáerro!

s=“4”

i=s ‘Impossível:dáerro!

i=“5” ‘Impossível:dáerro!

Nota: não podemos converter directamente um valor do tipo String em nenhum tipo numérico, nem vice-versa.

Nota: não podemos converter directamente um valor do tipo StringString em nenhum tipo numérico, nem vice-versa.

Dim i As Integer, d As Double, s

As String, v As Variant

v=i:v=d:v=s:v=4

i=v ‘ i passa a valer 4

s=v ‘ s passa a valer “4”

d=v ‘ d passa a valer 4

v=5.3i=v ‘ i passa a vale

r 5 (arredondado)

s=v ‘ s passa a valer “5,3”

d=v ‘ d passa a valer 5.3

v=“5.3”i=v ‘ i passa a vale

r 5 (arredondado)

s=v ‘ s passa a valer “5.3”

d=v ‘ d passa a valer 5.3

v=“olá”i=v ‘ Impossível: dá

erro!

s=v ‘ s passa a valer “olá”

d=v ‘ Impossível: dáerro!

Page 77: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO • qualquer valor de qualquer tipo, pode ser convertido para o tipo VariantVariant;

• qualquer valor do tipo VariantVariant pode ser convertido no tipo StringString;

• um valor do tipo VariantVariant pode ser convertido num tipo numérico, desde que se possa encontrar um equivalente numérico;

• a conversão para um tipo numérico inteiro (IntegerInteger ou LongLong) está sujeita a arredondamentos.

3.4.3.5. Aspectos a ter em conta nas conversões implícitas3.4.3.5. Aspectos a ter em conta nas conversões implícitas

Regra empírica de conversão VariantVariant

IntegerIntegerLongLongSingleSingleDoubleDouble

StringString

Repare que: embora não se possam efectuar conversões directas entre tipo String ←→ tipos numéricos, ambos podem ser convertidos de/para o tipo Variant.

Para o efeito, podemos usar uma variável auxiliar do tipo Variant, como uma “ponte” entre o tipo String e os tipos numéricos (Integer, Long, Single ou Double).

Repare que: embora não se possam efectuar conversões directas entre tipo StringString ←→ tipos numéricos, ambos podem ser convertidos de/para o tipo VariantVariant.

Para o efeito, podemos usar uma variável auxiliar do tipo VariantVariant, como uma “ponte” entre o tipo StringString e os tipos numéricos (IntegerInteger, LongLong, SingleSingle ou DoubleDouble).

Page 78: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Nome da FunNome da Funççãoão ConversãoConversãode para

AscAsc StringString Código ASCIICBoolCBool numérico BooleanBooleanCcurCcur numérico CurrencyCurrencyCdateCdate StringString DateDateCDblCDbl numérico ou StringString DoubleDoubleCIntCInt numérico ou StringString IntegerIntegerCLngCLng numérico ou StringString LongLongCSngCSng numérico ou StringString SingleSingleCStrCStr numérico ou StringString StringStringCVarCVar numérico ou StringString VariantVariantStrStr numérico StringStringValVal StringString NumNumééricoricoChrChr Código ASCII StringString

3.4.3.6. Explícitas (funções de conversão)3.4.3.6. Explícitas (funções de conversão)

Tabela de funções de conversão

No VBA existem funções de conversão criadas explicitamente, para permitirem a conversão dos valores entre os diferentes tipos de dados.

No VBA existem funções de conversão criadas explicitamente, para permitirem a conversão dos valores entre os diferentes tipos de dados.

ExemploDim i As Integer,

Dim s As String

...

i=CInt(4.3)

s=CStr(“olá”)

...

...

i=Cint(“4.3”)

S=CStr(65)

...

Utilização redundanteUtilização redundante

Page 79: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.4. Tipos de dados definidos pelo utilizador3.4.4. Tipos de dados definidos pelo utilizador

Sintaxe de definição

Algumas considerações:

Type Nome_do_Novo_TipoNome_do_Campo_1 ou Nome_do_Array_1 As Tipo_1Nome_do_Campo_2 ou Nome_do_Array_2 As Tipo_2...Nome do Campo_N ou Nome_do_Array_N As Tipo_N

End Type

Type Nome_do_Novo_TipoNome_do_Campo_1 ou Nome_do_Array_1 As Tipo_1Nome_do_Campo_2 ou Nome_do_Array_2 As Tipo_2...Nome do Campo_N ou Nome_do_Array_N As Tipo_N

End Type

No VBA, além dos tipos de dados apresentados numa das secções anteriores, é possível ao utilizador definir os seus próprios tipos de dados, com base nos anteriores.

No VBA, além dos tipos de dados apresentados numa das secções anteriores, é possível ao utilizador definir os seus próprios tipos de dados, com base nos anteriores.

A definição de novos tipos de dados deve ser feita num módulo, fora de qualquer procedimento.A definição de novos tipos de dados deve ser feita num módulo, fora de qualquer procedimento.

Na sintaxe de definição, os Tipo_1, Tipo_2, …e Tipo_N podem ser um tipo de dados do VBA, ou um

outro tipo definido anteriormente, também pelo utilizador.

Na sintaxe de definição, os Tipo_1, Tipo_2, …e Tipo_N podem ser um tipo de dados do VBA, ou um

outro tipo definido anteriormente, também pelo utilizador.

Page 80: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Alguns exemplos Exemplo 1 Criação dum Tipo de Dados, responsável por guardar um ponto no espaço 3D (X,Y,Z)

Para nos referirmos aos campos duma variável dum tipo definido pelo utilizador, indicamos o nome dessa variável seguido por um ponto e pelo nome do campo.

Page 81: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Exemplo 2

X

Z

Y

A=(3,2,3)

O=(1,1,1)

Segmento OAO = (1,1,1)A = (3,2,3)cor = verdetraço = 2

Segmento OAO = (1,1,1)A = (3,2,3)cor = verdetraço = 2

Ponto OPonto O

Ponto APonto A

Page 82: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Exemplo 3

X

Z

Y

A=(3,2,3)

O=(1,1,1)

Segmento OAO = (1,1,1)A = (3,2,3)cor = verdetraço = 2

Segmento OAO = (1,1,1)A = (3,2,3)cor = verdetraço = 2

Ponto OPonto O

Ponto APonto A

Page 83: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Algumas considerações:

Podemos também declarar Arrays de tipos definidos pelo utilizador.Podemos também declarar Arrays de tipos definidos pelo utilizador.

Dim Alguns_Segmentos (1 To 5) As Segmento_A

Dim Mais_Segmentos (1 To 10) As Segmento_B

...Alguns_Segment

os(3).cor = “vermelho”

...Mais_Segmentos

(6).extremo(1).x = 2

...

Podem-se efectuar atribuições entre variáveis (ou campos) do mesmo tipo de dados definido pelo utilizador, encarregando-se o VBA de fazer a cópia dos valores campo a campo.

Podem-se efectuar atribuições entre variáveis (ou campos) do mesmo tipo de dados definido pelo utilizador, encarregando-se o VBA de fazer a cópia dos valores campo a campo.

Dim ponto_O As Ponto3D, ponto_A

As Ponto3D

Dim SegOA As Segmento_A

...ponto_O = pont

o_A

...SegOA.origem = ponto_A

Esta instrução é equivalente às instruções:ponto_O.x = ponto_A.x

ponto_O.y = ponto_A.y

ponto_O.z = ponto_A.z

Page 84: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.4.1. With … End With3.4.4.1. With … End With

Sintaxe

Exemplo

Preenchimento e visualização dos elementos (Nome, Número e Notas) duma lista telefónica.

With Variável.Nome_do_Campo_1 .Nome_do_Campo_2 ....Nome do Campo_N

End With

With Variável.Nome_do_Campo_1 .Nome_do_Campo_2 ....Nome do Campo_N

End With

Exemplo de utilizaçãoExemplo de utilização

Page 85: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.5. Recursividade3.4.5. Recursividade

Solução não recursiva

A possibilidade de um procedimento poder chamar-se a si próprio, designa-se por recursividade. A sua explicação, será mais explícita se tomarmos como exemplo:

A possibilidade de um procedimento poder chamar-se a si próprio, designa-se por recursividade. A sua explicação, será mais explícita se tomarmos como exemplo:

CÁLCULO DO FACTORIAL DE N : N!

Factorial(

N) = N×(N-

1)×(N-2) ×

… × 1

1

Page 86: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Solução recursiva

1N

1N

se1)NFactorial(N

se1N)Factorial(

><=

−×=

N=4 N=3 N=2 N=1

(If…ThenFactorial_R(4)=Factorial_R(3)*4

(If…ThenFactorial_R(3)=Factorial_R(2)*3(If…Then

Factorial_R(2)=Factorial_R(1)*2(If…Else

Factorial_R(1)=1

Supondo que N =4, testemos a solução recursiva:

4!=244!=24Nota: apesar das soluções recursivas serem mais elegantes, os programadores tendem a evitá-las, porque um sub-programa recursivo necessita de mais espaço (um conjunto completo de endereços de memória deve ser reservado, cada vez que um sub-programa se chama a si próprio) e é mais lento (devido às operações auxiliares de entrada e saída dum programa) do que um sub-programa não recursivo.

Nota: apesar das soluções recursivas serem mais elegantes, os programadores tendem a evitá-las, porque um sub-programa recursivo necessita de mais espaço (um conjunto completo de endereços de memória deve ser reservado, cada vez que um sub-programa se chama a si próprio) e é mais lento (devido às operações auxiliares de entrada e saída dum programa) do que um sub-programa não recursivo.

Page 87: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Exemplo Solução não recursiva Solução recursiva

Cálculo de Ak, onde A e k são números inteiros, com N > 0.

Potência (A,k) = A × A × A × … × A

N-1 multiplicações

1kse

1kse

k),Potência(AA

Ak),Potência(A

>=

×=

Page 88: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.6. Arrays dinâmicos3.4.6. Arrays dinâmicos

3.4.6.1. Passos a seguir na utilização de arrays dinâmicos3.4.6.1. Passos a seguir na utilização de arrays dinâmicos

Em geral, quando temos um conjunto de valores dum determinado tipo de dados, sabemos à prióri o seu número. Contudo, o problema surge quando não sabemos (no momento da escrita do programa) o número de valores, e assim quantas células vão ser necessárias: neste caso o tamanho do array tem de ser decidido em tempo de execução (não em tempo de codificação).

A solução para estes casos reside na utilização de arrays dinâmicos, cujo o tamanho pode variar.

Em geral, quando temos um conjunto de valores dum determinado tipo de dados, sabemos à prióri o seu número. Contudo, o problema surge quando não sabemos (no momento da escrita do programa) o número de valores, e assim quantas células vão ser necessárias: neste caso o tamanho do array tem de ser decidido em tempo de execução (não em tempo de codificação).

A solução para estes casos reside na utilização de arraysarrays dinâmicosdinâmicos, cujo o tamanho pode variar.

1- declarar um array sem tamanho, não indicando a gama de índices, significando que este tem 0 células (qualquer tentativa de escrita numa célula, dará origem a um erro de execução);

Dim ArrayReDimensionavel () As Integer

2- redimensionar o array à medida das necessidades, usando a instrução ReDimReDim.

...ReDim ArrayReDimensionavel (4 To 6)...ReDim ArrayReDimensionavel (5 To 9)...

o array passa ter 3 célulaso array passa ter 3 células

o array passa ter 5 célulaso array passa ter 5 células

Page 89: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.6.2. Palavra reservada: Perserve3.4.6.2. Palavra reservada: Perserve

Exemplificando

Cada vez que se faz o redimensionamento do array, da forma explicada atrás, perde-se o seu conteúdo. Porém, em geral queremos que o conteúdo do array seja preservado, cada vez que este é redimensionado: neste caso utiliza-se Preserve.

A utilização da palavra reservada Preserve, só permite a alteração do limite superior da gama de índices.

Cada vez que se faz o redimensionamento do array, da forma explicada atrás, perde-se o seu conteúdo. Porém, em geral queremos que o conteúdo do array seja preservado, cada vez que este é redimensionado: neste caso utiliza-se PreservePreserve.

A utilização da palavra reservada PreservePreserve, só permite a alteração do limite superior da gama de índices.

Dim OutroArrayRedim() As Integer

...ReDim OutroArrayRedi

m(4 To 6)

‘passa a ter 3 células (da 4

à 6): é a primeira vez, não precisa

de Preserve

...ReDim Preserve OutroArrayRedi

m(4 To 8)

‘agora passa a ter 5 células

(da 4 à 8): o seu conteúdo anterior

foi preservado

...ReDim Preserve OutroArrayRedi

m(4 To 7)

‘agora passa a ter 4 células

(da 4 à 7): o seu conteúdo anterior

foi preservado

...ReDim Preserve OutroArrayRedi

m(2 To 7)

‘Errado! Não se pode mexer n

o limite inferior, quando se

usa Preserve

Page 90: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

Algumas considerações:

Nos arrays K-D (multi-dimensionais), se usarmos apenas ReDim podemos alterar não só as gamas de cada

uma das dimensões, como até mesmo o número de dimensões.

Nos arrays K-D (multi-dimensionais), se usarmos apenas ReDimReDim podemos alterar não só as gamas de cada

uma das dimensões, como até mesmo o número de dimensões.

Porém, se usarmos ReDim Preserve, tudo o que podemos fazer é alterar apenas o índice superior da

última dimensão.

Porém, se usarmos ReDimReDim PreservePreserve, tudo o que podemos fazer é alterar apenas o índice superior da

última dimensão.

Dim x() As Integer

...ReDim x(2 To 23, 34 To 36, 4 To 10)

...ReDim Preserve x(2 To 23, 34 To 36, 4 To 12)

...ReDim x(1 To 24, 32 To 39, 8 To 9, 1 To 3, 2 To 8)

...ReDim Preserve x(1 To 24, 32 To 39, 8 To 9, 1 To 3, 2 To 5)

Page 91: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.4.6.3. Exemplo 3.4.6.3. Exemplo

Preenchimento da célula ido Array_Dados com um elemento do tipo Dados_Pessoais.

Inserção de mais uma célula no Array_Dados, preservando os valores contidos nas células já preenchidas.

Declaração dum array Array_Dados sem tamanho.

UBound (nome_array[dimensão])

Devolve o maior índice da célula do array disponível, para uma dada dimensão (por defeito o seu valor é 1).

Ex.: Dim A(1 To 100, 0 To 3, -3 To 4)UBound (A,1) é 100UBound (A,2) é 3UBound (A,3) é 4

LBound (nome_array[dimensão])

Devolve o menor índice da célula do array disponível, para uma dada dimensão (por defeito o seu valor é 1)

Ex.: Dim A(1 To 100, 0 To 3, -3 To 4)LBound (A,1) é 1LBound (A,2) é 0LBound (A,3) é -3

Criação da primeira célula no Array_Dados.

Page 92: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5. Manipulação de variáveis estruturadas: arrays3.5. Manipula3.5. Manipulaçção de varião de variááveis estruturadas: veis estruturadas: arraysarrays

3.5.1. Vectores: Array Unidimensional3.5.1. Vectores: Array Unidimensional

3.5.2. Operações básicas com vectores3.5.2. Operações básicas com vectores

VVV

Dim V(1 To 8) As Integer‘ Array unidimensional c/ 8 células, com valores inteiros

Dim V(1 To 8) As Integer‘ Array unidimensional c/ 8 células, com valores inteiros

V(1) V(8)1 2 3 4 5 6 7 8

- Leitura- Escrita- Máximo e mínimo e respectiva posição- Soma de todos os elementos- Média aritmética dos elementos- Troca de dois elementos

- Inversão- Permutação circular- Remoção dum elemento- Inserção dum novo elemento- Pesquisa dum elemento- Número de elementos repetidos- Ordenação : Bubble Sort

Page 93: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.1. Leitura dum vector 3.5.2.1. Leitura dum vector

VVV1 2 3 4 5 N-2 N-1 N

? ? ? ? ? ? ? ?………….

Descrição Algorítmica Codificação VBA

…Para índice Desde 1 Até N Faz

ESCREVER (“Insira o elemento” &índice &”do vector”)

LER (v(índice))

Fim do Para

...

…Para índice Desde 1 Até N Faz

ESCREVER (“Insira o elemento” &índice &”do vector”)

LER (v(índice))

Fim do Para

...

Sub Ler_Vector(v()As Integer, ByVal N As Integer)Dim i As Integer

For i=1 To Nv(i)=CInt (InputBox(“Insira o elemento”&i))

Next iEnd Sub

Sub Ler_Vector(v()As Integer, ByVal N As Integer)Dim i As Integer

For i=1 To Nv(i)=CInt (InputBox(“Insira o elemento”&i))

Next iEnd Sub

Page 94: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.2. Escrita dum vector 3.5.2.2. Escrita dum vector

VVV1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 9 5 3………….

Descrição Algorítmica Codificação VBA

…Para índice Desde 1 Até N Faz

ESCREVER (“v(” &índice &”)=“ &v(índice) &mdl)

Fim do Para

...

…Para índice Desde 1 Até N Faz

ESCREVER (“v(” &índice &”)=“ &v(índice) &mdl)

Fim do Para

...

Sub Escrever_Vector(v()As Integer, ByVal N As Integer)Dim i As Integer

For i=1 To NMsgBox “v(“ &i &”)=“ &v(i) &Chr(13)

Next iEnd Sub

Sub Escrever_Vector(v()As Integer, ByVal N As Integer)Dim i As Integer

For i=1 To NMsgBox “v(“ &i &”)=“ &v(i) &Chr(13)

Next iEnd Sub

Page 95: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

…Caso opção Tomevalor = “Máximo”: Faz

Aux ← v(1)Pos_aux ← 1Para índice Desde 2 Até N FazSe v(índice)>Aux Então

Aux ← v(índice)Pos_Aux ←índice

Fim do ParaMáximo ← AuxPos_Max ← Pos_aux

Caso opção Tomevalor = “Mínimo”: Faz

Aux ← v(1)Pos_aux ← 1Para índice Desde 2 Até N FazSe v(índice)<Aux Então

Aux ← v(índice)Pos_Aux ←índice

Fim do ParaMáximo ← AuxPos_Max ← Pos_aux

Fim do Caso

…Caso opção Tomevalor = “Máximo”: Faz

Aux ← v(1)Pos_aux ← 1Para índice Desde 2 Até N FazSe v(índice)>Aux Então

Aux ← v(índice)Pos_Aux ←índice

Fim do ParaMáximo ← AuxPos_Max ← Pos_aux

Caso opção Tomevalor = “Mínimo”: Faz

Aux ← v(1)Pos_aux ← 1Para índice Desde 2 Até N FazSe v(índice)<Aux Então

Aux ← v(índice)Pos_Aux ←índice

Fim do ParaMáximo ← AuxPos_Max ← Pos_aux

Fim do Caso

3.5.2.3. Máximo e mínimo dum vector e respectiva posição 3.5.2.3. Máximo e mínimo dum vector e respectiva posição

VVV1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 9 5 3………….

Descrição Algorítmica Codificação VBASub Max_Min_Pos(v()As Integer, ByVal N As Integer,

Max As Integer, Min As Integer, Pos_Max As Integer, Pos_Min As Integer)

Dim Aux As Integer, Pos As IntegerDim i As Integer, opcao As String

opcao = InputBox(“Qual a opcao: Máximo ou Mínimo”)Select Case opcaoCase “Máximo”

Aux=v(1)Pos=1For i=2 To N

If v(i)>Aux ThenAux=v(i)Pos=i

End IfNext iMax=AuxPos_Max=Pos

Case “Mínimo”Aux=v(1)Pos=1For i=2 To N

If v(i)<Aux ThenAux=v(i)Pos=i

End IfNext iMax=AuxPos_Max=Pos

End SelectEnd Sub

Sub Max_Min_Pos(v()As Integer, ByVal N As Integer,Max As Integer, Min As Integer, Pos_Max As Integer, Pos_Min As Integer)

Dim Aux As Integer, Pos As IntegerDim i As Integer, opcao As String

opcao = InputBox(“Qual a opcao: Máximo ou Mínimo”)Select Case opcaoCase “Máximo”

Aux=v(1)Pos=1For i=2 To N

If v(i)>Aux ThenAux=v(i)Pos=i

End IfNext iMax=AuxPos_Max=Pos

Case “Mínimo”Aux=v(1)Pos=1For i=2 To N

If v(i)<Aux ThenAux=v(i)Pos=i

End IfNext iMax=AuxPos_Max=Pos

End SelectEnd Sub

Page 96: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.4. Soma de todos os elementos dum vector 3.5.2.4. Soma de todos os elementos dum vector

VVV1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 9 5 3………….

Descrição Algorítmica Codificação VBA

5 7 4 5 1 9 5 3………….+ + + + + + + +

s ← 0

Para índice Desde 1 Até N Faz

s ← s + v(índice)

Fim do Para

...

s ← 0

Para índice Desde 1 Até N Faz

s ← s + v(índice)

Fim do Para

...

Function Soma_elem_vector(v()As Integer, ByVal N As Integer)As LongDim i As Integer, S As Long

S=0For i=1 To N

S=S+v(i)Next iSoma_elem_vector=S

End Function

Function Soma_elem_vector(v()As Integer, ByVal N As Integer)As LongDim i As Integer, S As Long

S=0For i=1 To N

S=S+v(i)Next iSoma_elem_vector=S

End Function

Page 97: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.5. Média aritmética de todos os elementos dum vector 3.5.2.5. Média aritmética de todos os elementos dum vector

VVV1 2 3 4 5 N-2 N-1 N

5 7 4 5 1 9 5 3………….

Descrição Algorítmica Codificação VBA

5 7 4 5 1 9 5 3………….

N

iVV

N

i∑== 1

)(

M ← 0

Para índice Desde 1 Até N Faz

M ← M + v(índice)

Fim do Para

M ← M / N

...

M ← 0

Para índice Desde 1 Até N Faz

M ← M + v(índice)

Fim do Para

M ← M / N

...

Function Media_Arit_vector(v()As Integer, ByVal N As Integer)As IntegerDim i As Integer, M As Long

M=0For i=1 To N

M=M+v(i)Next iMedia_Arit_vector=M/N

End Function

Function Media_Arit_vector(v()As Integer, ByVal N As Integer)As IntegerDim i As Integer, M As Long

M=0For i=1 To N

M=M+v(i)Next iMedia_Arit_vector=M/N

End Function

Page 98: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.6. Troca de dois elementos dum vector 3.5.2.6. Troca de dois elementos dum vector

VVV1 2 I J N

3 5 4 8 7………….

Aux

Descrição Algorítmica Codificação VBA

…ESCREVER(“Indique o índice do 1.º elemento a trocar i<N”)

LER (i)ESCREVER(“Indique o índice do 1.º elemento a trocar j<N”)

LER (j)Aux ← v(i)v(I) ← v(j)v(j) ← Aux...

…ESCREVER(“Indique o índice do 1.º elemento a trocar i<N”)

LER (i)ESCREVER(“Indique o índice do 1.º elemento a trocar j<N”)

LER (j)Aux ← v(i)v(I) ← v(j)v(j) ← Aux...

Sub Troca2elem_vect(v()As Integer, ByVal N As Integer)Dim i As Integer,j As Integer, Aux As Integeri=CInt(InputBox(“O índice do 1.º elem. a trocar i<N”))j=CInt(InputBox(“O índice do 2.º elem. a trocar j<N”))Aux=v(i)v(i)=v(j)v(j)=Aux

End Sub

Sub Troca2elem_vect(v()As Integer, ByVal N As Integer)Dim i As Integer,j As Integer, Aux As Integeri=CInt(InputBox(“O índice do 1.º elem. a trocar i<N”))j=CInt(InputBox(“O índice do 2.º elem. a trocar j<N”))Aux=v(i)v(i)=v(j)v(j)=Aux

End Sub

Page 99: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.7. Inversão dum vector 3.5.2.7. Inversão dum vector

VVV1 2 3 K 5 N

Descrição Algorítmica Codificação VBA

k ← N \ 2 ‘Divisão inteira

Para índice Desde 1 Até k Faz

Aux ← v(índice)

v(índice) ← v(N-índice+1)

v(N-índice+1) ← Aux

Fim do Para

...

k ← N \ 2 ‘Divisão inteira

Para índice Desde 1 Até k Faz

Aux ← v(índice)

v(índice) ← v(N-índice+1)

v(N-índice+1) ← Aux

Fim do Para

...

Sub Inverte_vect(v()As Integer, ByVal N As Integer) Dim k As Integer, i As IntegerDim Aux As Integer

k=N\2 ‘Divisão inteiraFor i=1 To k

Aux=v(i)v(i)=v(N-i+1)v(N-i+1)=Aux

Next iEnd Sub

Sub Inverte_vect(v()As Integer, ByVal N As Integer) Dim k As Integer, i As IntegerDim Aux As Integer

k=N\2 ‘Divisão inteiraFor i=1 To k

Aux=v(i)v(i)=v(N-i+1)v(N-i+1)=Aux

Next iEnd Sub

Page 100: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.8. Permutação circular dum vector 3.5.2.8. Permutação circular dum vector

VVV1 2 3 N-1 N

3 5 4 8 7………….

Descrição Algorítmica Codificação VBA

Aux ← v(1)

Para índice Desde 1 Até N-1 Faz

v(índice) ← v(índice+1)

Fim do Para

v(N) ← Aux

...

Aux ← v(1)

Para índice Desde 1 Até N-1 Faz

v(índice) ← v(índice+1)

Fim do Para

v(N) ← Aux

...

Sub Permut_circ_Vect(v()As Integer, ByVal N As Integer) Dim Aux As Integer, i As Integer

Aux=v(1)For i=1 To N-1

v(i)=v(i+1)Next iv(N)= Aux

End Sub

Sub Permut_circ_Vect(v()As Integer, ByVal N As Integer) Dim Aux As Integer, i As Integer

Aux=v(1)For i=1 To N-1

v(i)=v(i+1)Next iv(N)= Aux

End Sub

Page 101: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.9. Remoção dos elementos dum vector 3.5.2.9. Remoção dos elementos dum vector

VVV1 2 K N-1 N

3 5 4 8 7………….………

Descrição Algorítmica Codificação VBA

ESCREVER(“Indique o índice do elemento a remover <N”)

LER (k)

Para índice Desde k Até N-1 Faz

v(índice) ← v(índice+1)

Fim do Para

N ← N-1

...

ESCREVER(“Indique o índice do elemento a remover <N”)

LER (k)

Para índice Desde k Até N-1 Faz

v(índice) ← v(índice+1)

Fim do Para

N ← N-1

...

Sub Remov_elem_Vect(v()As Integer, N As Integer) Dim k As Integer, i As Integer

k=CInt(InputBox(“O índice do elem. a remover k<N”))For i=1 To N-1

v(i)=v(i+1)Next iN=N-1ReDim v(1 To N)

End Sub

Sub Remov_elem_Vect(v()As Integer, N As Integer) Dim k As Integer, i As Integer

k=CInt(InputBox(“O índice do elem. a remover k<N”))For i=1 To N-1

v(i)=v(i+1)Next iN=N-1ReDim v(1 To N)

End Sub

Page 102: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.10. Inserção dum novo elemento no vector 3.5.2.10. Inserção dum novo elemento no vector

VVV1 2 K N N+1

3 5 4 8 7………….………

Descrição Algorítmica Codificação VBA

ESCREVER(“Indique o índice do elemento a inserir <N”)

LER (k)

Para índice Desde N+1 Até k Faz

v(índice) ← v(índice-1)

Fim do Para

N ← N+1

...

ESCREVER(“Indique o índice do elemento a inserir <N”)

LER (k)

Para índice Desde N+1 Até k Faz

v(índice) ← v(índice-1)

Fim do Para

N ← N+1

...

Sub Inserir_elem_Vect(v()As Integer, N As Integer) Dim k As Integer, i As Integer

ReDim v(LBound (v()) To UBound (v())+1)k=CInt(InputBox(“O índice do elem. a adicionar k<N”))For i=N+1 To k Step -1

v(i)=v(i-1)Next iN=N+1

End Sub

Sub Inserir_elem_Vect(v()As Integer, N As Integer) Dim k As Integer, i As Integer

ReDim v(LBound (v()) To UBound (v())+1)k=CInt(InputBox(“O índice do elem. a adicionar k<N”))For i=N+1 To k Step -1

v(i)=v(i-1)Next iN=N+1

End Sub

Page 103: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.11. Pesquisa dum elemento dum vector 3.5.2.11. Pesquisa dum elemento dum vector

VVV1 2 K N N+1

3 5 ? 8 7………….………

Descrição Algorítmica Codificação VBA

…índice ← 1

Achou ← FalseEnquanto (Não Achou) e (índice <N)

índice ← índice +1

Achou ← (v(índice)=valor)Fim do Enquanto

Se (Achou=True)

Então ESCREVER(“Está na posição” & índice)

Senão ESCREVER(“Não está no vector”)

Fim do Se...

…índice ← 1

Achou ← FalseEnquanto (Não Achou) e (índice <N)

índice ← índice +1

Achou ← (v(índice)=valor)Fim do Enquanto

Se (Achou=True)

Então ESCREVER(“Está na posição” & índice)

Senão ESCREVER(“Não está no vector”)

Fim do Se...

Sub Pesq_elem_Vect(v()As Integer, ByVal N As IntegerElem As Integer)

Dim i As Integer, Achou As Booleani=1Achou=FalseDo While (Not Achou) And (i<N)

i=i+1Achou=(v(i)=Elem)

LoopIf (Achou=True)Then MsgBox “Está na posição “&i

Else MsgBox “Não está no vector”End If

End Sub

Sub Pesq_elem_Vect(v()As Integer, ByVal N As IntegerElem As Integer)

Dim i As Integer, Achou As Booleani=1Achou=FalseDo While (Not Achou) And (i<N)

i=i+1Achou=(v(i)=Elem)

LoopIf (Achou=True)Then MsgBox “Está na posição “&i

Else MsgBox “Não está no vector”End If

End Sub

Page 104: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.12. Número de elementos repetidos num vector 3.5.2.12. Número de elementos repetidos num vector

VVV1 2 3 4 5 N-2 N-1 N

2 3 2 2 3 4 2 1………….

Descrição Algorítmica Codificação VBA

Ex.: 2 e 3 repetido: 2 elementos repetidos.

←←

…N_Repetidos ← 0Para índice desde 1 Até N-1

j ← índice +1Repetição ← FalseRepetirSe (v(índice)=v(j))

EntãoRepetição ← TrueN_Repetidos ←N_Repetidos+1

Senão j ← j + índice Fim do Se

Até (Repetição =True) ou (j=N+1)Fim do Para

...

…N_Repetidos ← 0Para índice desde 1 Até N-1

j ← índice +1Repetição ← FalseRepetirSe (v(índice)=v(j))

EntãoRepetição ← TrueN_Repetidos ←N_Repetidos+1

Senão j ← j + índice Fim do Se

Até (Repetição =True) ou (j=N+1)Fim do Para

...

Function N_elem_Rep(v()As Integer, ByVal N As Integer)As IntegerDim i As Integer, j As Integer, N_Repetidos As IntegerDim Repeticao As Boolean

N_Repetidos=0For i=1 To N-1

j=j+1Repeticao=FalseDo

If v(i)=v(j) ThenRepeticao=TrueN_Repetidos=N_Repetidos+1

Elsej=j+1

End IfLoop Until (Repeticao=True)OR (j=N+1)

Next iN_Elem_Rep=N_Repetidos

End Function

Function N_elem_Rep(v()As Integer, ByVal N As Integer)As IntegerDim i As Integer, j As Integer, N_Repetidos As IntegerDim Repeticao As Boolean

N_Repetidos=0For i=1 To N-1

j=j+1Repeticao=FalseDo

If v(i)=v(j) ThenRepeticao=TrueN_Repetidos=N_Repetidos+1

Elsej=j+1

End IfLoop Until (Repeticao=True)OR (j=N+1)

Next iN_Elem_Rep=N_Repetidos

End Function

Page 105: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.2.13. Ordenação dum vector: Bubble Sort3.5.2.13. Ordenação dum vector: Bubble Sort

3 7 5 8 1

VVV3 5 7 1 8

3 5 1 7 8

3 1 5 7 8

1 3 5 7 8

Para a ordenação deste vector de 5 elementos foram necessárias 4 passagens. Por maioria de razão, se o vector tivesse N elementos seriam necessárias N-1 passagens.

Nota: a troca de valores entre 2 variáveis a e b:

Aux=a

a=b

b=Aux

Para a ordenação deste vector de 5 elementos foram necessárias 4 passagens. Por maioria de razão, se o vector tivesse N elementos seriam necessárias N-1 passagens.

Nota: a troca de valores entre 2 variáveis a e b:

Aux=a

a=b

b=Aux

Codificação VBA

Sub Ordenacao_Bubble(v()As Integer, ByVal N As Integer)Dim i As Integer, limite As IntegerDim Aux As IntegerFor limite=N-1 To 1 Step -1For i=1 To limiteIf v(i)>v(i+1) Then

Aux=v(i)v(i)=v(i+1)v(i+1)=Aux

End IfNext i

Next limiteEnd Sub

Sub Ordenacao_Bubble(v()As Integer, ByVal N As Integer)Dim i As Integer, limite As IntegerDim Aux As Integer

For limite=N-1 To 1 Step -1For i=1 To limiteIf v(i)>v(i+1) Then

Aux=v(i)v(i)=v(i+1)v(i+1)=Aux

End IfNext i

Next limiteEnd Sub

Vector inicialVector inicial

1.ª passagem1.ª passagem

2.ª passagem2.ª passagem

3.ª passagem3.ª passagem

4.ª passagem4.ª passagem

Ordenação por ordem crescente

Ordenação por ordem crescente

Page 106: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.3. Matrizes: Array Bidimensional3.5.3. Matrizes: Array Bidimensional

3.5.4. Operações básicas com matrizes3.5.4. Operações básicas com matrizes

Dim M(1 To 3, 1 To 3) As Integer‘ Array bidimensional c/ 3 x 3 células, com valores inteiros

Dim M(1 To 3, 1 To 3) As Integer‘ Array bidimensional c/ 3 x 3 células, com valores inteiros

- Leitura duma matriz- Escrita duma matriz- Traço duma matriz- Transposta duma matriz- Adição/Subtracção de matrizes- Multiplicação de matrizes

3 9 1

4 7 2

5 9 1

3

1 2 3

1

2LL

CC

MMM

Page 107: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.4.1. Leitura duma matriz 3.5.4.1. Leitura duma matriz

Descrição Algorítmica Codificação VBA

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

ESCREVER (“Insira o elemento” &ind_l &”,” &ind_c &”da matriz”)

LER (M(ind_l, ind_c))

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

ESCREVER (“Insira o elemento” &ind_l &”,” &ind_c &”da matriz”)

LER (M(ind_l, ind_c))

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Sub Ler_Mat(M()As Integer, ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CM(l,c)=CInt (InputBox(“Insira M &l &”,” &c))

Next cNext l

End Sub

Sub Ler_Mat(M()As Integer, ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CM(l,c)=CInt (InputBox(“Insira M &l &”,” &c))

Next cNext l

End Sub

? ? ?

? ? ?

? ? ?

3

1 2 3

1

2LL

CC

MMM

Page 108: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.4.2. Escrita duma matriz 3.5.4.2. Escrita duma matriz

Descrição Algorítmica Codificação VBA

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

ESCREVER (“M(” &ind_l &”,” &ind_c &”)=” &M(ind_l,ind_c) &mdl)

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

ESCREVER (“M(” &ind_l &”,” &ind_c &”)=” &M(ind_l,ind_c) &mdl)

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Sub Escreve_Mat(M()As Integer, ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CMsgBox “M(“ &l &”,” &c &”)=“ &M(l,c) &Chr(13)

Next cNext l

End Sub

Sub Escreve_Mat(M()As Integer, ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CMsgBox “M(“ &l &”,” &c &”)=“ &M(l,c) &Chr(13)

Next cNext l

End Sub

1 6 6

4 5 2

8 3 1

3

1 2 3

1

2LL

CC

MMM

Page 109: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.4.3. Traço duma matriz 3.5.4.3. Traço duma matriz

Descrição Algorítmica Codificação VBA

Se L=C Então

Traco ← 0Para índice Desde 1 Até L Faz

Traco ← Traco+ M(índice, índice)

Fim do Para (índice)

Senão

Traco ← -1Fim do Se

...

Se L=C Então

Traco ← 0Para índice Desde 1 Até L Faz

Traco ← Traco+ M(índice, índice)

Fim do Para (índice)

Senão

Traco ← -1Fim do Se

...

Function Traco_Mat(M()As Integer, ByVal L As Integer, Val C As Integer)As Integer

Dim i As Integer, traco As IntegerIf L=C Then

traco=0For i=1 To L

traco=traco+M(i,i)Next i

Elsetraco=-1

End IfTraco_Mat=traco

End Function

Function Traco_Mat(M()As Integer, ByVal L As Integer, Val C As Integer)As Integer

Dim i As Integer, traco As IntegerIf L=C Then

traco=0For i=1 To L

traco=traco+M(i,i)Next i

Elsetraco=-1

End IfTraco_Mat=traco

End Function

1 6 6

4 5 2

8 3 1

3

1 2 3

1

2LL

CC

MMM+

+

Traço

Page 110: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.4.4. Transposta duma matriz 3.5.4.4. Transposta duma matriz

Descrição Algorítmica Codificação VBA

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

M_T(ind_l,ind_c) ← M(ind_c, ind_l)

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

M_T(ind_l,ind_c) ← M(ind_c, ind_l)

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Sub Transpos_Mat(M()As Integer,M_T()As Integer,ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CM_T(l,c)=M(c,l)

Next cNext l

End Sub

Sub Transpos_Mat(M()As Integer,M_T()As Integer,ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CM_T(l,c)=M(c,l)

Next cNext l

End Sub

1 6 6

4 5 2

8 3 6

3

1 2 3

1

2LL

CC

MMM 6 2 6

3 5 6

8 4 1

3

1 2 3

1

2LL

CC

MMMM(l,c) = M (c,l)M(l,c) M(l,c) == M (c,l)M (c,l)

Page 111: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.5.4.5. Adição/Subtracção de Matrizes 3.5.4.5. Adição/Subtracção de Matrizes

Descrição Algorítmica Codificação VBA

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

M_R(ind_l,ind_c)←M1(ind_l,ind_c)+M2(ind_l, ind_c)

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Para ind_l Desde 1 Até L Faz

Para ind_c Desde 1 Até C Faz

M_R(ind_l,ind_c)←M1(ind_l,ind_c)+M2(ind_l, ind_c)

Fim do Para (ind_c)

Fim do Para (ind_l)

...

Sub Soma_Mat(MR()As Integer,M1()As Integer, M1()As Integer,ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CM_R(l,c)=M1(l,c)+ M2(l,c)

Next cNext l

End Sub

Sub Soma_Mat(MR()As Integer,M1()As Integer, M1()As Integer,ByVal L As Integer,ByVal C As Integer)

Dim l As Integer, c As IntegerFor l=1 To L

For c=1 To CM_R(l,c)=M1(l,c)+ M2(l,c)

Next cNext l

End Sub

M_RM_RM_R

1 6 6

4 5 2

8 3 6

3

1 2 3

1

2LL

CC

1 2 1

3 5 0

2 1 5

3

1 2 3

1

2LL

CC

M1M1M1

M_R(l,c) = M1 (l,c) ± M2(l,c)M_R(l,c) M_R(l,c) == M1 (l,c) M1 (l,c) ±± M2(l,c)M2(l,c)

0 4 5

1 0 2

6 2 1

3

1 2 3

1

2LL

CC

M2M2M2

= +

No caso da subtracção basta trocar

o sinal para “–”.No caso da subtracção basta trocar

o sinal para “–”.

Page 112: VBA- Cap6- EMGI20052006 - estgv.ipv.pt Cap6... · PROGRAMAÇÃO Microsoft VBA Programação sobre o EXCEL Criação dum módulo ... Programando em VBA - Visual Basic for Applications-

Departamento de Informática

2005-2006Capítulo 6

Curso de EMGI

Mic

roso

ft V

BAPR

OG

RAM

AÇÃO

3.6. Objectos, Propriedades e Métodos do EXCEL3.6. Objectos, Propriedades e M3.6. Objectos, Propriedades e Méétodos do EXCELtodos do EXCEL

ObjectoObjectoObjecto: Workbook

Folha de CFolha de Cáálculolculo

AplicaAplicaççãoãoMicrosoft EXCELEXCEL

Livro 1Livro 1Livro 2Livro 2……..Livro nLivro nLi

vros

Livr

os

LivroLivro

ObjectoObjectoObjecto: Application

ObjectoObjectoObjecto: Worksheet

Folha de GrFolha de Grááficofico

Caixa de DiCaixa de Diáálogologo

MMóódulodulo

ObjectoObjectoObjecto: Chart

ObjectoObjectoObjecto: DialogSheet

ObjectoObjectoObjecto: Module