Вы находитесь на странице: 1из 112

2005-2006 Curso de EMGI

Capítulo 6
PROGRAMAÇÃO
Microsoft VBA

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

Programação sobre EXCEL


PROGRAMAÇÃO
Microsoft VBA

Ambiente de programação

Programando em VBA - Visual Basic for Applications

Programação estruturada

Tópicos avançados

Manipulação de variáveis estruturadas: arrays

Objectos, Propriedades e Métodos do EXCEL

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Ambiente de programação
PROGRAMAÇÃO

Ambiente do EXCEL
Worksheet
APPLICATION
lculo
o lha de Cá
F
Microsoft VBA

WORKBOOK

RO
LLIIVVR O

Modules

Módulo
Charts

Grá
Gráfico UserForms
de
iálogo t e ão
en aç
Diá
Caixa de
i
b am
m
A ogr
pr
Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Aplicação (Application)
Livro 1
PROGRAMAÇÃO

Livro 2

Livros
Aplicação ….
Livro n
Microsoft EXCEL
Microsoft VBA

Objecto
Objecto:
Objecto Application Objecto
Objecto:
Objecto Workbook

Livro (Workbook)
Objecto
Objecto:
Objecto Worksheet
Folha de Cálculo
Objecto
Objecto:
Objecto Charts
Folha de Gráfico
Livro
Caixa de Diálogo Objecto
Objecto:
Objecto UserForms

Módulo
Objecto
Objecto:
Objecto Module

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Programação sobre o EXCEL


Criação dum módulo
PROGRAMAÇÃO
Microsoft VBA

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

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Modos de actuação
Utilização exclusiva sobre os Módulos
PROGRAMAÇÃO
Microsoft VBA

11

2
5
44 1 - Correr o procedimento
- Colocar o cursor dentro do procedimento
- Fazer: Run Sub ou (F5)
2 - Caixa de diálogo: entrada da opinião
3 3 - Indicação da opinião
4 - Confirmação
Programar sobre VBA é fascinante!!!
5 - Caixa de diálogo: visualização da opinião

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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


PROGRAMAÇÃO

33
Microsoft VBA

22
1
4
5

1 - Definir a função num módulo


2 - Abrir a folha de cálculo e escolher a célula onde vamos usar a função
3 - Invocar o assistente de funções
4 - Escolher funções definidas pelo utilizador
5 - Escolher a “Minha_Funcao”
6 - Seguir os passos análogos como se fosse uma função do EXCEL

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Utilização de procedimentos na forma de macros


PROGRAMAÇÃO
Microsoft VBA

55
2 33 44 9
1 6
1 - Definir o procedimento no módulo
7 88
2 - Saltar para a folha de cálculo
3 - Escrever os valores nas células, que queremos sujeitar ao procedimento
4 - Seleccionar as células
5 - Seleccionar : Ferramentas → Macro →Macros ... ou (Alt+F8)
6 - Surgimento da caixa de diálogo com os procedimentos definidos
7 - Escolher o procedimento “Calcular_dobro”
8 - Pressionar o botão Executar
9 - Troca dos valores nas células pelos respectivos dobros

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Entrada e saída de dados

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


PROGRAMAÇÃO

Nota:
Nota: Cada
Cada vez
vez que
que se
se desejar
desejar novos
novos valores
valores de
de entrada
entrada
Microsoft VBA

teremos
teremosque
quecorrigir
corrigiroocódigo,
código,eede
deseguida
seguidacorrer
corrernovamente
novamenteoo
procedimento.
procedimento.

Tratados
Tratadoscomo
comoconstantes
constantes

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.1.4.2.
3.1.4.2. Utilização
Utilização de
de funções
funções de
de entrada
entrada ee saída
saída de
de dados
dados
Valor Tipo de dados
PROGRAMAÇÃO

Entrada de Dados
0 Fórm ula

1 Valor num érico


2 String
Gosto de programar!!!!
4 Valor lógico(TRUE, FALSE)
Microsoft VBA

InputBox (VBA) InputBox (EXCEL)


Nota: Devolve sempre um valor do tipo string, sendo necessária a Nota: Devolve sempre um valor do tipo pedido, não sendo necessária a
Nota: Devolve sempre um valor do tipo string, sendo necessária a Nota: Devolve sempre um valor do tipo pedido, não sendo necessária a
utilização de funções de conversão de tipo (ver mais à frente) conversão de tipos e verifica sempre a validade do valor.
utilização de funções de conversão de tipo (ver mais à frente) conversão de tipos e verifica sempre a validade do valor.

Saída de Dados

MsgBox (VBA)

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.1.4.3.
3.1.4.3. Interacção
Interacção com
com uma
uma folha
folha de
de cálculo
cálculo
PROGRAMAÇÃO

3
Microsoft VBA

2
11

1 - Editar os elementos da matriz 3x3 numa folha de cálculo


2 - Definir o procedimento de leitura dos elementos da matriz num módulo
3 - Correr o procedimento
4 - Visualização dos elementos da matriz 3x3

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.
3.2.Programando
Programandoem
emVBA
VBA -- Visual
VisualBasic
Basic for
for Applications
Applications
PROGRAMAÇÃO

3.2.1.
3.2.1. Estrutura
Estrutura dum
dum módulo
módulo

)
n to (1
Microsoft VBA

am e
n c ion
de fu
es (1):
(1): AA declaração
declaração de
de variáveis
variáveis não
não éé
Op çõ licit
xp
o n E obrigatória,
obrigatória, ee pode
pode realizar-se
realizar-se em
O pti em
qualquer
qualquer local
local do
do módulo.
módulo. Contudo,
d ulo: Contudo,
m ó recomenda-se
recomenda-seaasua suadeclaração
declaraçãoeeno
d o no
ç es
õ stant es inicio
inicio dos
dos procedimentos,
procedimentos, funções
funções ou
la ra on
ou
Dec is e c módulos,
módulos, poispois torna
torna mais
mais claro
claro oo
ar i áve
v programa
programaeemais
maisrápida
rápidaaaexecução.
execução.

entos
cedim
Pro

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.2.
3.2.2. Variáveis
Variáveis ee constantes
constantes
PROGRAMAÇÃO

3.2.2.1.
3.2.2.1. Tipos
Tipos de
de dados
dados

OOVBA,
VBA,tal
talcomo
comoaamaioria
maioriadas
daslinguagens
linguagensde
deprogramação
programaçãode
dealto
altonível,
nível,define
definevários
váriostipos
tiposde
dedados.
dados.OOtipo
dados tipode
de
dados,
dados,determina
determinaaagama
gamade devalores
valoresque
queestes
estespodem
podemtomar,
tomar,assim
assimcomo
comoaagama
gamade deoperações
operaçõesque
quepodem
podemserser
Microsoft VBA

realizadas
realizadascom
comestes.
estes.Por
Poroutro,
outro,lado
ladoooespaço
espaçoocupado
ocupadoem
emmemória
memóriapor
porcada
cadavalor
valordepende
dependedo
dotipo
tipode
dedados
dadosaa
que
quepertence.
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árias
Tipo 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 tipos
Tipo Object : relacionado com a utilização de objectos pertencentes à aplicação

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.2.2.
3.2.2.2. Sumário
Sumário dos
dos vários
vários tipos
tipos de
de dados
dados
PROGRAMAÇÃO

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
Microsoft VBA

Single (virgula flutuante 4 bytes -3, 402 823E38 a -1,401 298E-45 : valores negativos
de precisão simples) 1, 401 298E-45 a 3,402 823E38 : valores positivos
Double (virgula flutuante 8 bytes -1,797 693 134 86232E308 a
de precisão dupla) -4,940 656 458 41247E-324 : valores negativos
4,94065645841247E-324
a 1,797 693 134 86232E308 : valores positivos
Currency 8 bytes -922 337 203 685 477, 5808 a
922 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/ Qualquer valor numérico até à gama do Double, ou


caracter qualquer texto de caracteres
Object 4 bytes Qualquer referência a um objecto.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.2.3.
3.2.2.3. Tipo
Tipo Variant
Variant
PROGRAMAÇÃO

Trata-se
Trata-sedum
dumtipo
tipomuito
muitoespecial,
especial,pois
poispode
podeconter
conterqualquer
qualquerum
umdos
dosoutros
outrostipos
tiposde
dedados
dados

Aspectos a ter em conta


Microsoft VBA

‹
‹ uma
umavariável deste
variável destetipo
tipopoderá conter
poderá conterqualquer
qualquertipo
tipode
dedados;
dados;

‹
‹ aaflexibilidade
flexibilidadeanterior
anteriordiminui
diminuioocontrolo
controloposs ível sobre
possível sobreaautilização duma
utilização dumavariável deste
variável destetipo;
tipo;

‹
‹ se
seem
emdeterminada
determinadasitua ção, for
situação, forcolocado
colocadoinvoluntariamente
involuntariamenteum
umvalor
valordum
dumtipo
tipode
dedados
dadosnão desejado,
não desejado,aa
utiliza ção duma
utilização dumavari ável deste
variável destetipo,
tipo,torna
tornamuito
muitomais
maisdifícil aadetec
difícil ção do
detecção doerro
errocometido;
cometido;

‹
‹ ootipo
tipoVariant, ééooque
Variant, queocupa
ocupamais
maisespaço em
espaço emmemória.
memória.

Nota:
Nota:AAutilização
utilizaçãodo
dotipo Variantdeve
tipoVariant deverestringir-se
restringir-seapenas
apenasàs
àssituações,
situações,em
emque
quenão
nãose
setenha
tenhaconhecimento
conhecimentodo
dotipo
tipode
dedados
dadosaa
utilizar.
utilizar.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.2.5.
3.2.2.5. Declaração
Declaração de
de variáveis
variáveis
PROGRAMAÇÃO

Uma
Umavariável
variávelrepresenta
representaaaárea
áreade
dememória,
memória,que
quecontém
contémum umvalor
valordum
dumdeterminado
determinadotipo
tipode
dedados.
dados.Para
Paraassociar
associar
um
um determinado
determinado tipo
tipo de
de dados
dados aa uma
uma dada
dada variável,
variável, éé necessário
necessário proceder
proceder àà declara ção da
declaração da variável.
vel AA
variável.
declaração
declaraçãoda
davariável
variávelcondiciona,
condiciona,ootipo
tipode
dedados
dadosque
queesta
estapode
podeconter
conterdurante
duranteaaexecução
execuçãodum
dumprograma.
programa.
Microsoft VBA

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

ou
la pa lav ra reservada Dim ,
das pe
s diferentes inicia jamos
da forma an terio r e m linh a
o r vi rg ula s. Para o efeito ve
r feita veis p
de vá rias va riáveis, pode se do n om e e d o tipo das variá
A declaração aração
m es ma linha através da sep
quivalente, na
duma forma e
uinte:
o exemplo seg

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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


PROGRAMAÇÃO

‹
‹ Quando
Quando uma
uma variável não
variável não éé declarada
declarada explicitamente
explicitamente (i.e.:
(i.e.: quando
quando aa op ção Option
opção Explicit est
Option Explicit á
está
desactivada),
desactivada),ooVBA
VBAassume
assumeque
queesta
estase
setrata
trataduma
dumavari ável do
variável dotipo
tipoVariant
Variant

‹
‹ se
sedeclararmos
declararmosapenas
apenasoonome
nomeda
davariável sem
variável semindicar
indicarootipo
tipode
dedados,
dados,ooVBA
VBAassume
assumepor
pordefeito
defeitoootipo
tipo
Microsoft VBA

Variant
Variant

los
‘ Exemp String As Doub
le
As n2
Dim s s I nteger
,
A
Dim n1 Single
x As
Dim Single
y A s
Dim As Date
a ta
Dim d

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.2.7.
3.2.2.7. Sintaxe:
Sintaxe: declaração
declaração de
de variáveis
variáveis de
de tipo
tipo estruturado
estruturado ou
ou Arrays
Arrays
PROGRAMAÇÃO

Arrays (vectores)

Por
Por vezes
vezes torna-se
torna-se necessário/conveniente
necessário/conveniente referenciar
referenciar uma
uma zona
zona de
de memória
memória onde
onde estão
estão guardados
guardados vários
vários
valores
valoresdum
dummesmo
mesmotipo
tipode
dedados
dadossimples
simplesou
ouestruturado,
estruturado,utilizando
utilizandoum
ummesmo
mesmonome.
nome.Para
Paraooefeito,
efeito,utilizam-se
utilizam-se
variáveis
variáveisdo
dotipo
tipoestruturado:
estruturado:Arrays.
Arrays
Microsoft VBA

Arrays.
s ices
Cé lula Índ
1 OO Array
Array éé um
um tipo
tipo de
de variável
variável estruturada,
estruturada, consistindo
consistindo num
num
20 conjunto
conjuntode
de“células”,
“células”,identificadas
identificadasunivocamente
univocamenteporporum
um“índice”
“índice”
2
15 (endereço),
(endereço), cujo
cujo oo conteúdo
conteúdo éé constituído
constituído por
por um
um valor
valor dum
dum
A 17 3 determinado
determinadotipo
tipode
dedados
dadossimples.
simples.
As i nteger A
4 r, var_1 o array
18 lo e
‘ Exemp To 4) As In ta o valor
t ge 1 5 d
1 en
Dim A( A(2)’repres
=
var_1
t eir o Nota:
Nota:Para
Paranos
nosreferirmos
referirmosaacada
cadaumumdos
dosseus
seusvalores,
valores,utilizamos
utilizamosoonome
nomedo
doArray
Arrayeeooíndice
índiceda
oin da
Ti p célula,
célula,na
naqual
qualoovalor
valorseseencontra.
encontra.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Declaração
PROGRAMAÇÃO

AAgama_de_índices,
gama_de_índices,apresenta-se
apresenta-sedo
doseguinte
seguintemodo:
modo:
menor_índice
menor_índice To
To maior_índice,
maior_índice,
Microsoft VBA

equivalendo
equivalendoaadizer
dizerem
emanalogia
analogiacom
comum
umbloco
blocohabitacional,
habitacional,que
queeste
estevai
vai“desde
“desdeooandar
andarmais
maisbaixo
baixoaté
até(To)
(To)ao
ao
andar mais alto”.
andar mais alto”.

arrayArray_A
OOarray Array_A, ,teria
teria66células
células(desde
(desdeaacélula
célula-2-2ààcélula
célula3),
3),com
comvalores
valoresdo tipoInteger
dotipo Integer. .

arrayArray_B
OOarray Array_B, ,teria
teria33células
células(desde
(desdeaacélula
célula66ààcélula
célula8),
8),com
comvalores
valoresdo tipostring
dotipo string. .

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Algumas considerações:
PROGRAMAÇÃO

‹
‹ As
Asduas
duasformas
formasde
dedeclarar
declararaagama
gamade
deíndices
índicessão
sãoequivalentes,
equivalentes,tratando -se em
tratando-se emambos
ambosos
oscasos
casosdum
dumArray
Array
de
de55ccélulas
élulas com
comvalores
valoresdo tipodouble
dotipo double, ,cujo
cujooomenor
menoríndice
índiceéé00(0..4)
(0..4)
Microsoft VBA

‹
‹ Apesar
Apesarde deser
serpossível qualquer
possível qualquergama
gamadedeíndices
índices(desde
(desdequequeoovalor
valordodoíndice
índiceinferior
inferiorseja
sejamenor
menorque
queoo
valor
valordo
doíndice
índicesuperior),
superior),em
emgeral
geralééprefer ível que
preferível queoovalor
valordo
doíndice
índiceinferior
inferiorcomece
comeceem em1.1.
‹
‹ Quando
Quandoquisermos
quisermosreferir
referiruma
umadada
dadaccélula,
élula, indicamos
indicamosoo
nome
nome do
do Array
Array seguido
seguido dodo índice
índice dada ccélula
élula entre
entre
parêntesis.
parêntesis. Contudo,
Contudo, teremos
teremos de
de escolher
escolher sempre
sempre um
um
valor
valor do
do índice,
índice, que
que se
se encontre
encontre dentro
dentro da
da gama
gama de
de
índices .
índices.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Arrays multi-dimensionais 1 2 3
Array uni-dimensional - (1-D)
PROGRAMAÇÃO

5 9 1

1 2 3

1 5 9 1
Array bi-dimensional - (2-D)
Microsoft VBA

2 4 7 2

3 3 9 1

1 2 3

Array tri-dimensional - (3-D)


1 5 9 1

2 4 95 19 1

191 19
1
3 3 92
Array k-dimensional - (K-D)
95 19
1
1
1
Embora não se tenha desenhado um Array K-D, para K >3, a sua declaração e utilização é
Embora não se tenha desenhado um Array K-D, para K >3, a sua declaração e utilização é 2 5 9 1
igualmente possível em VBA.
igualmente possível em VBA.
3

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.2.8.
3.2.2.8. Declaração
Declaração de
de constantes
constantes
PROGRAMAÇÃO

AAdiferença
diferençaem
emrelação
relaçãoààdeclaração
declaraçãoduma
dumavariável
variávelreside
residena
napalavra
palavrareservada utilizada,Const
reservadautilizada, Constem
emvez
vezde
de
Microsoft VBA

Dim
Dim, ,eeainda
aindana
nanecessidade
necessidadede
deindicar
indicarantecipadamente
antecipadamenteoovalor
valoratribuído
atribuídoààconstante.
constante.

Nota:
Nota:Em
Emtoda
todaaacodificação
codificaçãododomódulo
móduloutiliza-se
utiliza-sesempre
sempreoo
nome
nome da
da constante
constante (e(e não
não oo seu
seu valor),
valor), pelo
pelo que
que se
o se
ó dul quisermos
m quisermosalterar
alterarooseu
seuvalor,
valor,basta
bastaalterar
alteraroovalor
valorda
dalinha
linha
da declaraçãoConst
dadeclaração Const. .

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.3.
3.2.3. Procedimentos
Procedimentos
PROGRAMAÇÃO

Um
Umprocedimento
procedimentoééconstituído
constituídoporporum
umconjunto
conjuntode
deinstruções
instruçõescodificadas,
codificadas,ao
aoqual
qualééatribuído
atribuídoum
umdeterminado
determinado
nome,
nome,sendo
sendoaasua
suaexecução
execuçãofeita
feitaindividualmente
individualmentenum
nummódulo.
módulo.

3.2.3.1.
3.2.3.1. Estrutura
Estrutura dum
dum procedimento
procedimento
Microsoft VBA

o P ro ce dimento
d lvido
Cabeçalho rgumentos, Tipo devo
e, A
Tipo, Nom ento
ro ce d im
ec l a ra ç õ es d o P
D Variáveis
se
Constante
o Pro c e d imento
Corpo d ões codific
adas
loco de instruç
B
P ro ce d imento
Fim do r oc edimento
d o P
End Tipo

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.3.2.
3.2.3.2. Tipos
Tipos de
de procedimentos
procedimentos
PROGRAMAÇÃO

Existem
Existemdois
doistipos
tiposde procedimentos:Sub
deprocedimentos: Sub……End End Sub
SubeeFunction
Function……End End Function
Function. .AAdiferença
diferençaentre
entre
estes
estesdois
doistipos
tiposde
deprocedimentos
procedimentosreside
resideno
nofacto deFunction
factode Function……End End Function
Function, ,devolver
devolverum
umvalor
valoraaum
um
outro
outroprocedimento
procedimentoque queootiver
tiverinvocado,
invocado,como
comouma
umaatribuição
atribuiçãoaauma
umavariável,
variável,ooque
quenão
nãoacontece comSub
acontececom Sub……
End
End Sub
Sub. .
Microsoft VBA

Sub … End Sub


_ argumentos)
o _p r oc e di m e nto ( l is ta_ d e
a riá v ei s d o procedimento
Sub nome_d v
n am en t o d as constantes e
Dimensi o
ns tr u çõ e s c odificadas
Bloco de i
End Sub
Function … End Function a lor_a_devolve
r
A s t ipo _d o _v
s ta _ d e_argumentos)
_ d o _p r o c e di m e nt o ( l i
v e i s d o p ro cedimento
Function nome en t o d as c on stantes e var

Dimensionam codificadas
o co d e i n s tr u ç õ e s
o _ do _va l or _ a_devolver
B l sã
_do _ p ro c e d i mento = expres
nome
End Function

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.3.2.
3.2.3.2. Exemplo
Exemplo
PROGRAMAÇÃO

nção f _p artes
da f u
Definição
ressão a f_partes
duma exp
Microsoft VBA

Atri b u i ção

Rep_Valores
cedimento
o d o pro
Defin içã

d e R ep _Valores
e f _p art es dentro
d
Chamada
Nota:
Nota: Para
Para que
que uma
uma função
função possa
possa
devolver
devolverum
umdeterminado
determinadovalor,
valor,torna-se
torna-se
necessário
necessárioquequeuma
umadas
dassuas
suasinstruções
instruções
faça
faça aa atribuição
atribuição desse
desse valor
valor ao
ao seu
seu
nome.
nome.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.4.
3.2.4. Instruções
Instruções
PROGRAMAÇÃO

OOcorpo
corpodum
dumprocedimento
procedimentoéécomposto
compostoporporum
umconjunto
conjuntode
deinstru ções.
ões Numa
instruções. Numalinguagem
linguagemde deprogramação
programaçãoestas
estas
instruções correspondem
instruções correspondemààcodificação
codificaçãodas
dasinstruções
instruçõesutilizadas
utilizadasna
naescrita
escritadum
dumalgoritmo
algoritmo(pseudo-linguagem
(pseudo-linguagemouou
fluxograma),
fluxograma),de
deacordo
acordocom
comaasua
suasintaxe
sintaxe(neste
(nestecaso
casoaado
doVBA).
VBA).
Microsoft VBA

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

- Leitura e Escrita
- Atribuição
- Expressões
- Comentários
- Estruturas de controlo

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.5.
3.2.5. Leitura
Leitura ee Escrita
Escrita
PROGRAMAÇÃO

As
Asinstruções
instruçõesde
deLeitura
LeituraeeEscrita,
Escrita,correspondem
correspondemna
nalinguagem
linguagemVBA,
VBA,às
àsfunções
funçõesde
deentrada
entradaeesaída
saídade
dedados
dadosjájá
abordadas
abordadasna
nasecção 3.1.4.2:InputBox
secção3.1.4.2: InputBoxeeMsgBox
MsgBox. .

Exemplo
Microsoft VBA

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

……
Inst.1:
ESCREVER(“Cálculo
Inst.1: ESCREVER (“Cálculoda
daárea
áreado
dorectângulo”)
rectângulo”)
Inst.2:
ESCREVER(“Indique
Inst.2: ESCREVER (“Indiqueoovalor
valorda
dabase”)
base”)
Inst.3:
LER(base)
Inst.3: LER (base)
Inst.4:
ESCREVER(“Indique
Inst.4: ESCREVER (“Indiqueoovalor
valorda
daaltura”)
altura”)
Inst.5:
LER(altura)
Inst.5: LER (altura)
area ÅÅ base
Inst.6:
Inst.6: area base ** altura
altura
Inst.7:
ESCREVER( (“A“Aárea
Inst.7: ESCREVER áreaé:”
é:”area)
area)
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.6.
3.2.6. Atribuição
Atribuição
PROGRAMAÇÃO

Em
Em VBA,
VBA, oo operador
operador de
de atribuição
atribuição éé oo sinal
sinal de
de igual
igual “ “ =“,
=“, que
que tal
tal como
como oo símbolo
símbolo utilizado
utilizado na
na descrição
descrição
algorítmica
algorítmica(“←”),
(“←”),também
tambémeste
estesignifica:
significa:“ “toma
tomaoovalor de“.“.
valorde
AAinstrução
instruçãoem pseudo-linguagemI←3
empseudo-linguagem I←3, ,seria
seriacodificado
codificadoem
emVBA
VBAatravés
atravésda instruçãoI=3
dainstrução I=3

Exemplo
Microsoft VBA

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

……
Inst.1:
ESCREVER(“Cálculo
Inst.1: ESCREVER (“Cálculoda
daárea
áreado
dorectângulo”)
rectângulo”)
Inst.2:
ESCREVER(“Indique
Inst.2: ESCREVER (“Indiqueoovalor
valorda
dabase”)
base”)
Inst.3:
LER(base)
Inst.3: LER (base)
Inst.4:
ESCREVER(“Indique
Inst.4: ESCREVER (“Indiqueoovalor
valorda
daaltura”)
altura”)
Inst.5:
LER(altura)
Inst.5: LER (altura)
area ÅÅ base
Inst.6:
Inst.6: area base ** altura
altura
Inst.7:
ESCREVER( (“A“Aárea
Inst.7: ESCREVER áreaé:”
é:”area)
area)
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.7.
3.2.7. Expressões
Expressões
PROGRAMAÇÃO

Tal
Talcomo
comonum
numalgoritmo
algoritmouma
umaexpressão
expressão(ou(oufórmula)
fórmula)éécomposta
compostapor
porum
umconjunto
conjuntodedeoperandos
operandos(dados
(dadosdirectos
directos
ou
ouindirectos),
indirectos),relacionados
relacionadosentre
entresisipor
poroperadores
operadorese/ou
e/oupor
porfunções,
funções,permitindo
permitindooocálculo
cálculode
devalores,
valores,aapartir
partir
dum
dumoutro
outroconjunto
conjuntode
devalores.
valores.
Microsoft VBA

3.2.7.1.
3.2.7.1. Tipos
Tipos de
de expressões
expressões
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).

em plo s 2* Cos(x)
‘ Ex Sin(x)
+
* Var_A
A = , 15)
Var_ 1 0
0
0* (1+ ra
=
Var_B as e * altu
b
Area =
Booleanas ou Lógicas - são expressões que utilizam apenas operadores relacionais e têm como
resultado valores do tipo booleano (True, False).

los
‘ Exemp Var_B
>= )
Var_A No t (Var_C ar_D)
= ar_C,V
Var_F nd (V
= A
Var_G

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.7.2.
3.2.7.2. Tipos
Tipos de
de operadores
operadores ee respectiva
respectiva precedência
precedência
PROGRAMAÇÃO

Operadores aritméticos
Operador Significado Exemplo
+ Adição
- Subtracção ou sinal negativo 5
* Produto
17
3
Microsoft VBA

2
/ 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

Operadores relacionais Tome


Tomeatenção:
atenção:aainterpretação
interpretaçãoda
darelação
relaçãoentre
entredois
doisvalores
valores
depende
O perador S ig n ific a d o depende do
do seu
seu tipo;
tipo; enquanto
enquanto aa relação
relação entre
entre valores
valores
< M enor que numéricos
numéricosse sebaseia
baseiananaordem
ordemque
queestes
estesocupam
ocupamem emtermos
termosdada
<= M e n o r o u ig u a l a recta
rectareal
real(onde
(ondese
seincluem
incluemososinteiros),
inteiros),aarelação
relaçãoentre
entrestrings
strings
> M a io r q u e
(cadeias
>= M a io r o u ig u a l a (cadeiasde
decaracteres)
caracteres)baseia-se
baseia-sena
nasua
suaordem
ordemde
deacordo
acordocom
com
aatabela
= Ig u a l a tabelaASCII:
ASCII:
ex.: -5-5<<22<<44<<10
<> d ife re n te ex.: 10
“1”
“1” < “10” < “1006”<<“184”
< “10” < “1006”
“184”<<“2”<
“2”<“30<
“30<”ola”
”ola”

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Operadores lógicos (booleanos)


PROGRAMAÇÃO

Operador Significado Símbolo m atem ático


Not Negação ~
And "e" ∧
Or "ou" ∨
Xor "ou" exclusivo ∨
Microsoft VBA

Imp Implicação ⇒
Eqv equivalência ⇔

Operadores para cadeias de caracteres

Operador Significado Exemplo


& Concatenação "bom" & "dia" vale "bom dia"
+ Concatenação "bom" + "dia" vale "bom dia"

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

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Precedência dos operadores


Quando
Quandoqueremos
queremosconstruir
construiruma
umaexpressão
expressãoque
queenvolva
envolvadiferentes
diferentesoperadores
operadoresteremos
teremosde
deter
terem
ematenção
atençãoaa
PROGRAMAÇÃO

respectiva
respectivatabela
tabelade
deprecedências
precedências

Tabela de precedências dos operadores


^^ exponenciação
exponenciação
-- sinal
sinal de
de negativo
negativo
Microsoft VBA

*,
*, // multiplicação
multiplicação ee divisão
divisão Tome
\\ divisão
divisão inteira
inteira Tomeatenção:
atenção:
Mod
Mod resto
resto da
da divisão
divisão
+,
+, -- adição
adição ee subtracção a)a)quando
quandoestamos
estamosperante
peranteoperadores
operadorescom
comoo
subtracção

mesmo
mesmo nível
nível de
de precedência
precedência estes
estes deverão
deverão
&& concatenação
concatenação de de cadeias
cadeias
ser
serconsiderados
consideradosde
deacordo
acordocom
comaaordem
ordememem
=, <>, <, >, <=, >=, igual a; diferente de;
=, <>, <, >, <=, >=, igual a; diferente de; menor
menor que;
que; maior
maior que;
que;
Like, Is
Like, Is menor ou igual a; maior ou igual a; like;
menor ou igual a; maior ou igual a; like; is
is
que
que se
se apresentam:
apresentam: da
da esquerda
esquerda para
para aa
direita.
direita.
b)b)quando
quandoqueremos
queremosforçar
forçaruma
umadeterminada
determinada
Not
Not negação
negação ordem
And
And ee ordem nana execução
execução das
das operações
operações duma
duma
Or
Or ou
ou expressão
Xor
Xor ou
ou exclusivo
exclusivo expressão usam-se
usam-se parêntesis
parêntesis (ex.:
(ex.: -3
-3 --
Eqv
Eqv equivalência
equivalência
Imp
Imp implicação
implicação (4+6/(3-1))*5).).
(4+6/(3-1))*5

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.7.3.
3.2.7.3. Utilização
Utilização de
de funções
funções
PROGRAMAÇÃO

Uma
Uma expressão
expressão (ou
(ou fórmula)
fórmula) pode
pode conter
conter além
além de
de operandos
operandos relacionados
relacionados entre
entre sisi através
através de
de operadores,
operadores,
também
tambémfunções.
funções.AsAsfunções
funçõesutilizadas
utilizadaspresentes
presentesnuma
numaexpressão
expressãocodificada
codificadaem
emVBA
VBApodem
podemestar
estardefinidas
definidasno:
no:
Microsoft VBA

EXCEL (Application)
li st a _d e_ a r g umentos)
n .n om e _da_função (
Appli c at io ‘ Exemplos
Single
Dim media As 1 0 ) As Single
r es (1 To
Dim valo
O nome das funções do EXCEL, num módulo está em inglês. … (valores)
i on .A v erage
at
media=Applic
VBA (módulo) ...

‘ Exemplos
) Ln(x)
Abs(x) Fix(x As restantes funções podem ser consultadas no manual On-Line.
x ) I nt (x ) Sqrt(x)
Cos (
) Sin(x)
Exp(x) Log(x
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.8.
3.2.8. Comentários
Comentários
PROGRAMAÇÃO

Os
Oscomentários
comentáriossãosãofrases,
frases,que
quetêm
têmcomo
comomissão
missãofacilitar
facilitaraacompreensão
compreensãodo doconteúdo
conteúdodos
dosmódulos
módulos(declaração
(declaração
das
dasvariáveis
variáveisou
ouinstruções),
instruções),sendo
sendosempre
sempreantecedidos
antecedidosdo caracter“ “‘‘“ “(plica).
docaracter (plica).
Microsoft VBA

Exemplos
de comentários

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.9.
3.2.9. Estruturas
Estruturas de
de controlo
controlo
PROGRAMAÇÃO

Existem
Existemvários
váriostipos
tiposde
deestruturas
estruturasde
decontrolo,
controlo,cada
cadauma
umadas
dasquais
quaiscom
comcomportamentos
comportamentosdistintos
distintosem
emtermos
termosda
da
sequência
sequênciade
deexecução
execuçãodasdasdiversas
diversasinstruções
instruçõesdentro
dentrodum
dumprocedimento.
procedimento.Estas
Estascondicionam
condicionamaaordem
ordempela
pelaqual
qual
as
asvárias
váriasinstruções
instruçõesserão
serãoexecutadas
executadasno
noprocedimento,
procedimento,tal
talcomo
comovimos
vimosna
nadescrição
descriçãoalgorítmica.
algorítmica.
Microsoft VBA

3.2.9.1.
3.2.9.1. Tipos
Tipos estruturas
estruturas de
de controlo
controlo

- Estruturas Sequenciais

- Estruturas de Decisão Condicional

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

- Estruturas de Repetição Condicional

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.10.
3.2.10. Estrutura
Estrutura Sequencial
Sequencial
PROGRAMAÇÃO

De
Deacordo
acordocom
comesta
estaestrutura,
estrutura,asasinstruções
instruçõessão
sãoexecutadas
executadaspela
pelaordem
ordemememque
queestas
estasse
seencontram
encontramdefinidas
definidas
num
numprocedimento.
procedimento.Por
Pordefeito,
defeito,esta
estaééestrutura
estruturausada
usadaem
emqualquer
qualquerprocedimento.
procedimento.

Exemplo
Microsoft VBA

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

……
Inst.1: ESCREVER(“Cálculo
Inst.1: ESCREVER (“Cálculoda
daárea
áreado
dorectângulo”)
rectângulo”)
Inst.2: ESCREVER(“Indique
Inst.2: ESCREVER (“Indiqueoovalor
valorda
dabase”)
Sequencial

base”)
Inst.3: LER(base)
Inst.3: LER (base)
Inst.4: ESCREVER(“Indique
Inst.4: ESCREVER (“Indiqueoovalor
valorda
daaltura”)
altura”)

Sequencial
Inst.5: LER(altura)
Inst.5: LER (altura)
Inst.6: area ÅÅ base
Inst.6: area base ** altura
altura
Inst.7: ESCREVER( (“A“Aárea
Inst.7: ESCREVER áreaé:”
é:”area)
area)
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

3.2.11.1.
3.2.11.1. Decisão
Decisão Simples
Simples
PROGRAMAÇÃO

Nesta
Nestaestrutura
estruturade
decontrolo,
controlo,aainstrução
instruçãoou
oubloco
blocode
deinstruções
instruçõesserão
serãoexecutadas
executadasapenas,
apenas,se
seaacondição
condiçãotestada
testada
for
forverdadeira
verdadeira(“True”).
(“True”).

Sintaxes:
Microsoft VBA

Sintaxe 1
hen
If condição T o c o de instruções
çã o o u b l
Instru
End If

Utiliza-se
Utiliza-semais
maisdo
doque
queuma
umalinha,
linha,eese
seaacondição
condiçãofor
forverdadeira,
verdadeira,corresponde
correspondeààexecução
execuçãoduma
dumainstrução
instruçãoou
oubloco
blocode
deinstruções.
instruções.AA
primeira
primeiralinha
linhadeve
deveacabar
acabarcom Theneeaaestrutura
comThen estruturacom
comEnd
End If.
If
If.

Sintaxe 2
nd iç ão T he n Instrução
If co

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.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

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


Microsoft VBA



Inst.1:
ESCREVER(“Indique
Inst.1: ESCREVER (“Indiqueaanota
notado
doaluno”)
aluno”)
Inst.2:
LER(Nota)
Inst.2: LER (Nota)
SituaçãoÅÅ “Aprovado”
Inst.3:
Inst.3: SE
SE Nota
Nota >=
>= 9,5
9,5 ENTÃO
ENTÃO Situação “Aprovado”
Inst.4: SE Situação = “Aprovado” ENTÃO
Inst.4: SE Situação = “Aprovado” ENTÃO
(“Indiqueoonome
nomedo
doaluno”)
ESCREVER
ESCREVER (“Indique aluno”)
LER (nome)
LER (nome)
ESCREVER( (“O
“Oaluno”
aluno”&&nome
nome&&“ “foi
foi” ”&&Situação)
ESCREVER
Situação)
FIM SE
FIM SE
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.11.2.
3.2.11.2. Decisão
Decisão Dupla
Dupla (ou
(ou alternativa)
alternativa)
PROGRAMAÇÃO

Nesta
Nestaestrutura
estruturade
decontrolo
controlose
seaacondição
condiçãotestada
testadafor
forverdadeira
verdadeira(“True”),
(“True”),serão
serãoexecutadas
executadasaainstrução_1
instrução_1ou
ou
bloco
blocode
deinstruções_1,
instruções_1,caso
casocontrário
contrário(“False”)
(“False”)serão
serãoexecutadas
executadasaainstrução_2
instrução_2ououoobloco
blocode
deinstruções_2.
instruções_2.

Sintaxe 1
Microsoft VBA

hen
If condição T l oc o d e in st ruções_1
u b
Instrução_1 o
Else l o co d e i ns t ruções_2
u b
Instrução_2 o
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
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.
bloco de instruções_2. A primeira linha deve acabar com Then e a estrutura tem de fechar com End If.

Sintaxe 2 uçã o_ 1 Els e Instrução_2


hen Inst r
If condição T

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.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

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


Microsoft VBA

……
Inst.1: ESCREVER(“Indique
Inst.1: ESCREVER (“Indiqueaanota
notado
doaluno”)
aluno”)
Inst.2:
LER(Nota)
Inst.2: LER (Nota)
Instr.3: ESCREVER(“Indique
Instr.3:ESCREVER (“Indiqueoonome
nomedo
doaluno”)
aluno”)
Instr.4: LER(Nome)
Instr.4:LER (Nome)
Inst.5:
Inst.5: SE
SE Nota
Nota >=
>= 9,5
9,5 ENTÃO
ENTÃO
SituaçãoÅÅ “Aprovado”
Situação “Aprovado”
ESCREVER (“Oaluno
ESCREVER (“O aluno ““ &Nome
&Nome &“foi
&“foi ““ &Situação
&Situação
SENÃO
SENÃO
SituaçãoÅÅ “Reprovado”
Situação “Reprovado”
ESCREVER (“Oaluno
ESCREVER (“O aluno ““ &Nome
&Nome &“foi
&“foi ““ &Situação
&Situação
FIM SE
FIM SE
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.11.3.
3.2.11.3. Decisão
Decisão Múltipla
Múltipla (ou
(ou selectiva)
selectiva)
PROGRAMAÇÃO

As
Asestruturas
estruturasanteriores,
anteriores,encontram-se
encontram-selimitadas
limitadasao
aoresultado
resultadológico
lógicoda
dasua
suacondição
condição(“True”
(“True”ou
ou“False”),
“False”),pelo
peloque
que
podemos
podemosterterno
nomáximo
máximodoisdoiscomportamentos
comportamentosalternativos.
alternativos.SeSequisermos
quisermosutilizar
utilizarmais
maisdo
doque
queuma
umacondição,
condição,
correspondendo
correspondendoaaigual
igualnúmero
númerode
decomportamentos,
comportamentos,teremos
teremosde
deutilizar
utilizaruma
umaestrutura
estruturade
dedecisão
decisãommúltipla
últipla ou
ou
selectiva.
selectiva
selectiva.
Microsoft VBA

Sintaxe 1

Then
If condição_1 b l oc o d e i nstruções_1
u
Instrução_1 o
d iç ã o_2 Then
El s eI f c on
b l o c o d e i n struções_2
u
Instrução_2 o
.
…………………………………
ão_n Then
ElseIf condiç b l oc o d e instruções_n
o u
Instrução_n
Else l oc o de i n struções_n+1
ou b
Instrução_n+1
End If

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Exemplo
Descrição Algorítmica Codificação VBA
PROGRAMAÇÃO



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

Inst.2:
LER(Nota)
Inst.2: LER (Nota)
Inst.3:
Inst.3:SE
SE Nota
Nota << 9,5
9,5 ENTÃO
ENTÃO
Nota_QualÅÅ “Insuficiente”
Nota_Qual
“Insuficiente”
SENÃO
SENÃO SE Nota <14 ENTÃO
SE Nota <14
ENTÃO
Nota_Qual Å “Suficiente”
Nota_Qual Å “Suficiente”
SENÃO
SENÃO SE
SE Nota
Nota <17
<17 ENTÃO
ENTÃO
Nota_Qual Å “Bom”
Nota_Qual Å “Bom”
SENÃO
SENÃO SE
SE Nota
Nota <=20
<=20 ENTÃO
ENTÃO
Nota_Qual Å “Muito Bom”
Nota_Qual Å “Muito Bom”
SENÃO
SENÃO
Nota_QualÅÅ “Inválida”
Nota_Qual
“Inválida”
FIM SE
FIM SE
Inst.
Inst.4:4:ESCREVER (“Anota
ESCREVER (“A nota ““ &Nota &“correspondeaa ““ &Nota_Qual)
&Nota &“corresponde &Nota_Qual)

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Select Case expressão


Sintaxe 1 Case lista_de_expressõe
s_1
instruções_2
Instrução_1 ou bloco de
PROGRAMAÇÃO

………………………………….
s_n
Case lista_de_expressõe
instruções_n
Instrução_n ou bloco de
Case Else
de instruções_n+1
Instrução_n+1 ou bloco
Exemplo End Select
Microsoft VBA

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


……
Inst.1:
ESCREVER(“Indique
Inst.1: ESCREVER (“Indiqueaanota
notado
doaluno”)
aluno”)
Inst.2:
LER(Nota)
Inst.2: LER (Nota)
Inst.3: CASO Nota SEJA
Inst.3: CASO
<9.5 Nota
FAZ:SEJA
<9.5 FAZ:
Nota_QualÅÅ “Insuficiente”
Nota_Qual
<14 FAZ: “Insuficiente”
<14Nota_Qual
FAZ: Å “Suficiente”
Nota_Qual Å “Suficiente”
<17 FAZ:
<17Nota_Qual
FAZ: Å “Bom”
Nota_Qual
<=20 FAZ: Å “Bom”
<=20 FAZ: ÅÅ “Muito
“MuitoBom”
Nota_Qual
SENÃO Nota_Qual
FAZ: Bom”
SENÃO FAZ:
Nota_QualÅÅ “Inválida”
Nota_Qual
FIM CASO “Inválida”
FIM CASO
Inst.
Inst.4:4:ESCREVER (“Anota
ESCREVER (“A nota ““ &Nota &“correspondeaa ““ &Nota_Qual)
&Nota &“corresponde &Nota_Qual)
...
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Algumas considerações:
‹
‹ AAlista_de_expressões
lista_de_expressõesindicada
indicadaem
emcada
cadalinha
linhainiciada porCase
iniciadapor Casepode
podeapresentar
apresentaras
asseguintes
PROGRAMAÇÃO

seguintes
formas:
formas:

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


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

- expressão To expressão : permite a especificação duma gama de valores, através da utilização da


palavra reservada To;
Ex.: 12 To 50, “A” To “Z”
- Is operador relacional expressão: a utilização de Is seguida dum operador relacional, permite indicar
todos os valores que gozam duma determinada relação;
Ex.: Case Is >=100
Case Is <0, Is >100, 4 To 8, 11 To 15, 18

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

Nota:
Nota:se
seexistir
existirmais
maisdo
doque
queuma
umalinha
linhacuja
cujaaaexpressão
expressãoadquire
adquireoovalor
valorda daexpressão
expressãoda
dalinha
linhaSelect Case,serão
Select Case,
Case serãoapenas
apenas
executadas
executadasaainstrução
instruçãoou
ouoobloco
blocode
deinstruções
instruçõescorrespondentes
correspondentesààprimeira
primeiralinha Casecom
linha Case comessa
essaexpressão.
expressão.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

3.2.12.1.
3.2.12.1. For
For ….
…. Next
Next
PROGRAMAÇÃO

Esta
Estaestrutura
estruturadedecontrolo
controlopermite
permiteaarepetição
repetiçãoduma
dumadeterminada
determinadainstrução
instruçãoououbloco
blocode
deinstruções,
instruções,oonúmero
númerode
de
vezes
vezesque
quetiverem
tiveremsido
sidopré-definidas,
pré-definidas,eeduma
dumaforma
formacontrolada.
controlada.Cada
Cadarepetição
repetiçãocorresponde
correspondeaaumumciclo.
ciclo.
Microsoft VBA

Sintaxe: [Step v al or_do_passo]


l
lo r _inic ia l To valor_fina
va
á vel_ de_iteração =
For v ar i
ã o o u b loc o de instruções
Instru ç
Next
Algumas considerações:
‹
‹ Esta
Estaestrutura
estruturaimplica
implicaaautilização
utilizaçãoduma variável_de_iteraçãoou
dumavariável_de_iteração oucontador,
contador,que
queem
emcada
cadanova
novaiteração
iteração
(ciclo)
(ciclo)toma
tomaum umnovo
novovalor;
valor;dedeacordo
acordocom
comooespecificado
especificadocomeça
começacom
comoovalor_inicial
valor_inicialeevai vaiaté
atéao
ao
valor_final.OOStep
valor_final. Step(opcional),
(opcional),define
defineoointervalo
intervalode
deincremento
incremento(valor_do_passo>0)
(valor_do_passo>0)ou
oudecremento
decremento
(valor_do_passo <0)da
(valor_do_passo<0) davariável_de_iteração.
variável_de_iteração.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Exemplo 1
PROGRAMAÇÃO

N
S = ∑ (2 − i ) × i Cálculo do Somatório dos primeiros N elementos
i =1

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


Microsoft VBA

……
Inst.1: Somatorio ÅÅ 00
Inst.1: Somatorio
DE ii ÅÅ 11 AT
Inst.2:
Inst.2: DE
É NN FAZ
ATÉ FAZ
Somatorio ÅÅ Somatorio
Somatorio Somatorio ++ (2-i)*i
(2-i)*i
FIM
FIM DE
DE
Inst.3:
ESCREVER( (“O
Inst.3: ESCREVER “Oresultado
resultadodo
dosomatório
somatórioé”,
é”,&& Somatorio)
Somatorio)
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Exemplo 2
PROGRAMAÇÃO

⎡ a11 a12 a22 ⎤


- Ler valores da matriz A
A = ⎢a21 a22 a23 ⎥
⎢ ⎥ - Escrever valores da matriz A
⎢⎣a31 a32 a33 ⎥⎦

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


Microsoft VBA

……
‘ ‘Ler
Lermatriz
matrizAA
DE ll ÅÅ 11 AT
Inst.1:
Inst.1: DE
É N_L
ATÉ N_L FAZ
FAZ
DE Å
DE c Å 1 ATÉ N_C FAZ
c 1 AT É N_C
FAZ
ESCREVER(“Indique
ESCREVER(“Indique oo valor
ESCREVER valor de
de A(l,c)”)
A(l,c)”)
LER(A(l,c))
LER
LER(A(l,c))
FIM
FIM DEDE (c)
(c)
FIM DE (l)
FIM DE (l)
‘Escrever matriz A
‘Escrever matriz A
Inst.2: DE l Å 1 ATÉ N_L FAZ
Inst.2: DE l Å 1 ATÉ N_L FAZ
DE c Å 1 ATÉ N_C FAZ
DE c Å 1 ATÉ N_C FAZ
ESCREVER(A(l,c))
ESCREVER
ESCREVER(A(l,c))
FIM DE (c)
FIM DE (c)
FIM DE (l)
FIM DE (l)
...
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.12.2.
3.2.12.2. For
For Each….
Each…. Next
Next
PROGRAMAÇÃO

Para
Paraacedermos
acedermosaos aosvalores
valorescontidos
contidosnuma
numavariável
variávelestruturada
estruturada(Array),
(Array),podemos
Array podemosutilizar
utilizartambém
tambémuma
umaestrutura
estrutura
de
decontrolo
controlodeste
destetipo.
tipo.

Sintaxe: iáv el _estruturada


I n V ar
r i ável_contador
Microsoft VBA

ac h v a
For E
ã o o u b loc o de instruções
Instru ç
Next
Exemplo
Descrição Algorítmica Codificação VBA

….
….
‘Escrever
‘Escrevermatriz
matrizAA
DE ll ÅÅ 11 AT
Inst.1:
Inst.1: DE
É N_L
ATÉ N_L FAZ
FAZ
DE Å
DE c Å 1 ATÉ N_C FAZ
c 1 AT É N_C
FAZ
ESCREVER(A(l,c))
ESCREVER
ESCREVER(A(l,c))
FIM
FIM DE
DE (c)
(c)
FIM DE (l)
FIM DE (l)
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.13.
3.2.13. Repetição
Repetição Condicional
Condicional
PROGRAMAÇÃO

Esta
Estaestrutura
estruturade
decontrolo,
controlo,de
deacordo
acordocom
comasassuas
suasvariantes,
variantes,permite
permiteaarepetição
repetiçãoduma
dumainstrução
instruçãoou oubloco
blocode de
instruções
instruçõesememciclo,
ciclo,em
emfunção
funçãodo
doresultado
resultadodo
doteste
testeaauma
umadada
dadacondição
condiçãofeito
feitoem
emcada
cadaciclo,
ciclo,no
noinício
inícioou
ouno
nofim
fim
de
decada
cadaiteração.
iteração.
Microsoft VBA

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.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.13.1.
3.2.13.1. Do
Do ….
…. Loop
Loop

Esta
Esta variante
variante não
não tem
tem nenhum
nenhum teste
teste aa uma
uma condição,
condição, que
que possa
possa conduzir
conduzir ao
ao fim
fim da
da execução
execução repetitiva
repetitiva da
PROGRAMAÇÃO

da
instrução
instruçãoououbloco
blocodedeinstruções
instruçõescontidas
contidasno nociclo.
ciclo.Para
Parasuspender
suspenderaaexecução
execuçãonuma
numaestrutura
estruturade
decontrolo
controlodeste
deste
tipo,
tipo,entre
entreas
asinstruções
instruçõesdeve
deveexistir instruçãoExit
existiraainstrução Exit Do
Do: :força
forçaaasaída
saídado
dociclo.
ciclo.

Sintaxe:
Do de instruções
Microsoft VBA

ã o o u b loc o Nota: esta variante é raramente utilizada.


Instruç Nota: esta variante é raramente utilizada.
Loop
N
1
S=∑
Exemplo Somar até que o termo seja
i =1 2(i +1) inferior a 0,001.
Descrição Algorítmica Codificação VBA


Inst.1: ii ÅÅ 11
Inst.1:
Inst.2: ss ÅÅ 00
Inst.2:
Inst.3: (n+1))
Inst.3: termoÅ1/(2
termoÅ1/(2(n+1 ))
Inst.4: REPETIR
Inst.4: REPETIR
SE termo >>0,001
SEsÅ
termo 0,001ENTÃO
s+termo ENTÃO
iÅsÅi+1
s+termo
iÅ i+1
termoÅ1/(2 (n+1
))
termoÅ1/(2 (n+1))
SENÃO
SENÃO
Sair
Sair do
do ciclo
ciclo
FIM
FIM SE
SE
FIM
FIM REPETIR
REPETIR
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

Esta
Estavariante
variantefaz
fazooteste
testeduma
dumacondição
condiçãoantes
antesdedeexecutar
executaraainstrução
instruçãoououbloco
blocode
deinstruções
instruçõespresentes
presentesnonociclo,
PROGRAMAÇÃO

ciclo,
significando:
significando:“Enquanto
“Enquantoaacondição
condiçãofor
forverdadeira,
verdadeira,executar
executaraainstrução
instruçãoououinstruções
instruçõesno ciclo”.Se
nociclo”. Seaacondição
condiçãofor
for“False”
“False”
no
noinício,
início,aainstrução
instruçãoou
ouoobloco
blocode
deinstruções
instruçõesdo
dociclo
ciclonunca
nuncaserão
serãoexecutadas.
executadas.

Sintaxe:
ição
Do While Cond ou bloco de instruções
Microsoft VBA

Instrução
Loop
Exemplo N
1
S=∑
Somar até que o termo
i =1 2(i +1) seja inferior a 0,001.
Descrição Algorítmica Codificação VBA
……
Inst.1: ii ÅÅ 11
Inst.1:
Inst.2: ss ÅÅ 00
Inst.2:
Inst.3: (n+1))
Inst.3: termoÅ1/(2
termoÅ1/(2(n+1 ))
Inst.4:
Inst.4: ENQUANTO termo>>0,001
ENQUANTO termo
0,001
sÅ s+termo
sÅ s+termo

iÅ i+1
i+1 (n+1))
termoÅ1/(2
termoÅ1/(2(n+1 ))
FIM ENQUANTO
FIM ENQUANTO
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.13.3.
3.2.13.3. Do
Do ….
…. Loop
Loop While
While Condição
Condição
PROGRAMAÇÃO

Esta
Estavariante
variantefaz
fazooteste
testedadacondição
condiçãono nofim
fimde
deexecutar
executarpelo
pelomenos
menosumaumavezvezaainstrução
instruçãoououbloco
blocode
deinstruções
instruções
presentes
presentesno
nociclo,
ciclo,significando:
significando:“ “Executar
Executaraainstrução
instruçãoou
oubloco
blocode
deinstruções
instruçõesenquanto
enquantoaacondição
condiçãofor verdadeira”.Se
forverdadeira”. Seaa
condição
condiçãofor
for“False”
“False”no
noinício,
início,aainstrução
instruçãoou
oubloco
blocode
deinstruções
instruçõesserão
serãoexecutadas
executadaspelo
pelomenos
menosuma
umavez.
vez.

Sintaxe:
Microsoft VBA

Do
o o u b loc o de instruções
Instruçã
ndição
Loop While Co
N
1
Exemplo S=∑ (i +1)
Somar até que o termo
i =1 2 seja inferior a 0,001.
Descrição Algorítmica Codificação VBA
……
Inst.1: ii ÅÅ 11
Inst.1:
Inst.2: ss ÅÅ 00
Inst.2:
Inst.3: (n+1))
Inst.3: termoÅ1/(2
termoÅ1/(2(n+1 ))
Inst.4: REPETIR
Inst.4: REPETIR

sÅ s+termo
s+termo
iÅ i+1
iÅ i+1 (n+1))
termoÅ1/(2
termoÅ1/(2(n+1 ))
ENQUANTO termo > 0,001
ENQUANTO termo > 0,001
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

Esta
Estavariante
variantefaz
fazooteste
testeda
dacondição
condiçãoantes
antesde
deexecutar
executaraainstrução
instruçãoououoobloco
blocodedeinstruções
instruçõespresentes
presentesno
nociclo,
PROGRAMAÇÃO

ciclo,
significando:
significando:“ “Até
Atéque
queaacondição
condiçãoseja
sejaverdadeira
verdadeiraexecutar
executaraainstrução
instruçãoou
ouoobloco
blocode instruções”.Se
deinstruções”. Seaacondição
condiçãofor
for“True”
“True”
logo
logono
noinício,
início,aainstrução
instruçãoou
ouoobloco
blocode
deinstruções
instruçõesnunca
nuncaserão
serãoexecutadas.
executadas.

Sintaxe: ição
Do Until Cond ou bloco de instruções
Microsoft VBA

Instrução
Loop
N
1
Exemplo S=∑ (i +1)
Somar até que o termo
i =1 2 seja inferior a 0,001.
Descrição Algorítmica Codificação VBA
……
Inst.1: ii ÅÅ 11
Inst.1:
Inst.2: ss ÅÅ 00
Inst.2:
Inst.3: (n+1))
Inst.3: termoÅ1/(2
termoÅ1/(2(n+1 ))
Inst.4:
Inst.4: REPETIR ATÉ termo<=
REPETIR AT É termo
<=0,001
0,001
sÅ s+termo
sÅ s+termo

iÅ i+1
i+1 (n+1))
termoÅ1/(2
termoÅ1/(2(n+1 ))
FIM REPETIR
FIM REPETIR
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.2.13.5.
3.2.13.5. Do
Do ….
…. Loop
Loop Until
Until Condição
Condição
PROGRAMAÇÃO

Esta
Estavariante
variantefaz
fazooteste
testedadacondição
condiçãono nofim
fimde
deexecutar
executarpelo
pelomenos
menosuma umavez
vezaainstrução
instruçãoou
oubloco
blocode
deinstruções
instruções
presentes
presentesno
nociclo,
ciclo,significando:
significando:“ “Executar
Executaraainstrução
instruçãoou
oubloco
blocode
deinstruções
instruçõesaté
atéque
queaacondição
condiçãoseja verdadeira”.Se
sejaverdadeira”. Seaa
condição
condiçãofor
for“True”
“True”no
noinício,
início,aainstrução
instruçãoou
oubloco
blocode
deinstruções
instruçõesserão
serãoexecutadas
executadaspelo
pelomenos
menosuma
umavez.
vez.

Sintaxe:
Microsoft VBA

Do
o o u b loc o de instruções
Instruçã
ndição
Loop Until Co
N
1
Exemplo S=∑ (i +1)
Somar até que o termo
i =1 2 seja inferior a 0,001.
Descrição Algorítmica Codificação VBA
……
Inst.1: ii ÅÅ 11
Inst.1:
Inst.2: ss ÅÅ 00
Inst.2:
Inst.3: (n+1))
Inst.3: termoÅ1/(2
termoÅ1/(2(n+1 ))
Inst.4: REPETIR
Inst.4: REPETIR

sÅ s+termo
s+termo
iÅ i+1
iÅ i+1 (n+1))
termoÅ1/(2
termoÅ1/(2(n+1 ))
AT É termo <= 0,001
ATÉ termo <= 0,001
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.
3.3.Programa ção estruturada
Programação estruturada
PROGRAMAÇÃO

3.3.1.
3.3.1. Estrutura
Estrutura dum
dum programa
programa

Um
Um programa
programa emem VBA,
VBA, corresponde
corresponde aa um
um conjunto
conjunto dede instruções
instruções codificadas,
codificadas, as
as quais
quais podem
podem estar
estar
“concentradas”
“concentradas”apenas
apenasnum
numprocedimento,
procedimento,ou
ouser
serdistribuídas
distribuídaspor
porvários
váriosprocedimentos,
procedimentos,relacionados
relacionadosentre
entresi.
si.AA
Microsoft VBA

esta
estadistribuição
distribuiçãodas
dasinstruções
instruçõescodificadas,
codificadas,por
porvários procedimentos(Sub
váriosprocedimentos (Sub… …EndEnd Sub
SubeeFunction
Function……End End
Function
Function),), taltal como
como vimos
vimos na
na secção
secção 3.2.3.2),
3.2.3.2), correspondendo
correspondendo àà divisão
divisão sucessiva
sucessiva da
da tarefa
tarefa principal
principal em
em
tarefas
tarefasmais
maiselementares,
elementares,dá-se
dá-seoonome
nomede
deprogramação estruturada.
programaçãoestruturada
estruturada.
Procedimento A
com o Bloco de código
Bloco de código
Chamada aos Procedimento B
procedimentos A e B com o Bloco de código
Programa num só
Bloco de código
Procedimento
Procedimento
Principal

Programação estruturada

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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


PROGRAMAÇÃO

‹
‹ Existe
Existe um
um procedimento
procedimento que
que podemos
podemos designar
designar por
por “procedimento
“procedimento principal”,
principal”, sendo
sendo os
os restantes
restantes
procedimentos
procedimentosdefinidos
definidosààparte;
parte;
Microsoft VBA

‹
‹ OO “procedimento
“procedimento principal”,
principal”, além
além de
de executar
executar as
as instruções
instruções próprias,
próprias, chama
chama também
também os
os outros
outros
procedimentos,
procedimentos,os
osquais
quaisexecutam
executamoutras
outrasinstruções;
instruções;

‹
‹ Cada
Cadaum
umdos
dosoutros
outrosprocedimentos,
procedimentos,pode
podechamar
chamaroutros
outrosprocedimentos;
procedimentos;

‹
‹ Para
Paraque
quehaja
hajacomunicação
comunicaçãoentre
entreos
osprocedimentos
procedimentoséénecessário
necessárioque
querecebam
recebamvalores
valoresou
ouvariáveis,
variáveis,na
na
forma
formade
deargumentos
argumentose/ou
e/oudevolvam
devolvamvalores
valoresquando
quandoterminam
terminamaarespectiva
respectivaexecução.
execução.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Exemplo Programação estruturada


PROGRAMAÇÃO

Programação não estruturada


Declaração dos argumentos
Microsoft VBA

Passagem de argumentos

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.2.
3.3.2. Definição
Definição ee chamada
chamada de
de Procedimentos
Procedimentos
PROGRAMAÇÃO

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
Microsoft VBA

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

Algumas considerações:

‹
‹ Um
Umprocedimento
procedimentotem
temapenas
apenasuma
umadefinição,
definição,mas
maspode
podeser
serchamado
chamado(por
(poroutros)
outros)tantas
tantasvezes
vezesquantas
quantasas
as
necessárias.
necessárias.

‹
‹ Sempre
Semprequequesesechamar
chamarum umdeterminado
determinadoprocedimento,
procedimento,tem-se
tem-sequequelhe
lhepassar
passartodos
todosos
osargumentos,
argumentos,que
que
esse
esseestiver
estiverààespera
espera(i.e.:
(i.e.:os
osargumentos
argumentosdeclarados
declaradosna
nadefinição,
definição,desde
desdeque
quenão
nãosejam
sejamopcionais).
opcionais).

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.3.
3.3.3. Argumentos
Argumentos
PROGRAMAÇÃO

No
Noque
quediz
dizrespeito
respeitoaos
aosargumentos
argumentostemos,
temos,que
queconsiderar
consideraraaforma
formacomo
comoesse
essesão
sãodeclarados
declaradosna
nadefinição
definiçãodum
dum
procedimento,
procedimento,eecomo
comoesses
essesserão
serãofornecidos
fornecidosem
emcada
cadauma
umadas
daschamadas,
chamadas,ao
aorespectivo
respectivoprocedimento.
procedimento.

Sintaxe de declaração
Microsoft VBA

Nome_argumento_1
Nome_argumento_1 As
As Tipo_argumento_1,...
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 lhe
passe os valores.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Chamada
Na
Nachamada
chamadaaaumumprocedimento,
procedimento,indicamos
indicamosooseu
seunome
nomeseguido
seguidoda
dalista
listade
devalores
valorescorrespondentes
correspondentesaacada
cadaum
um
PROGRAMAÇÃO

dos
dosargumentos,
argumentos,separados
separadospor
porvírgulas.
vírgulas.

Exemplo
Microsoft VBA

Chamada Definição
Podemos passar também, além de
x x1 variáveis, expressões (desde que o
y x2 seu tipo seja compatível com o tipo
do argumento do procedimento
Não existe, nenhuma relação directa chamado.
entre o nome dos argumentos do
procedimento que é chamado e o nome
dos argumentos usados na sua
chamada.

Deve-se ter em atenção a ordem


pela qual os argumentos são
passados. Neste caso os resultados
serão naturalmente diferentes.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.4.
3.3.4. Chamada
Chamada de
de procedimentos
procedimentos

Entende-se
Entende-sepor
por“chamada”
“chamada”aaum umprocedimento
procedimentoooacto
actode
deooinvocar
invocar(dentro
(dentrode
deum
umoutro
outroqualquer
qualquerprocedimento).
procedimento).AA
PROGRAMAÇÃO

chamada
chamada pode
pode envolver
envolver aa passagem
passagem de
de argumentos
argumentos ee eventualmente
eventualmente aa devolução
devolução de
de um
um valor
valor (no
(no caso
caso de
de
Function
Function …… End
End Function
Function).).

3.3.4.1.
3.3.4.1. Regras
Regras para
para aa utilização
utilização de
de parêntesis
parêntesis
Microsoft VBA

A ter em atenção:
,y e n ão A di_Sub(x,y)
Adi_Sub x

Box “ E screva algo:”


Contudo: g o: ”) e não str=
I np u t
(“Esc re va a l
str=InputBox

E noutras situações é possível: o x “ V amos programa


r”
M sg B
os pr og ra mar”) e também
MsgBox (“Vam

Nota:
Nota:aautilização
utilizaçãode
deparêntesis
parêntesis(envolvendo
(envolvendoos
osargumentos)
argumentos)nas
naschamadas
chamadasaos
aosprocedimentos,
procedimentos,depende
dependepor
porum
umlado
ladodo
don.º
n.ºde
de
argumentos,
argumentos,eepor
poroutro
outrodo
docontexto
contextoem
emque
queas
aschamadas
chamadasocorrem.
ocorrem.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Contextos
1- um procedimento é chamado simplesmente (com os seus argumentos)
PROGRAMAÇÃO

Adi_Sub 5,7
2- um procedimento enquadra-se numa atribuição (caso de Function … End Function)
n(x)
Res = Fun_Se
Microsoft VBA

3-um procedimento é chamado usando a instrução Call ou serve ele próprio, de argumento a outro (caso de
Function … End Function)
(5,7)
Call Adi_Sub
di _S ub 6 ,F un_Sen(x)
A
Utilização correcta de parêntesis, em qualquer contexto
Procedimentos com 1 ou mais argumentos
a chamada se encontrar numa atribuição ou se
Usar parêntesis Se e Só Se
estiver a servir de argumento ao Call ou a um
outro procedimento.
Procedimentos sem argumentos
Não usar parêntesis

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.5.
3.3.5. Passagem
Passagem de
de argumentos
argumentos

Quando
Quandose sepassam
passamargumentos
argumentosaaum umprocedimento,
procedimento,ooVBAVBAvaivaiadequar
adequarcada
cadaum umdesses,
desses,aos
aosque
queseseencontram
PROGRAMAÇÃO

encontram
descritos
descritos na
na definição
definição do
do procedimento,
procedimento, respeitando
respeitando aa ordem
ordem pela
pela qual
qual os
os argumentos
argumentos são
são apresentados:
apresentados: oo
primeiro
primeiroargumento
argumentodeclarado
declaradonanadefinição
definiçãodo
doprocedimento
procedimentotoma
tomaoovalor
valordo
doprimeiro
primeiroargumento
argumentoapresentado
apresentadona
na
chamada;
chamada;oosegundo
segundovai
vaitomar
tomaroovalor
valordo
dosegundo;
segundo;eeassim
assimsucessivamente.
sucessivamente.
Microsoft VBA

Exemplo
g)
Definição do procedimento S tr in g, M sg_2 As Strin
(v A s Si n gle, Msg_1 As
mplo
Sub Proc_Exe l oc o d e instruções
b
Instrução ou
End Sub
Chamada dentro de outro procedimento
ncipal ()
Sub Proc_Pri
tring
Dim str as S
rde”
str= “Boa Ta ”
lo 2 .7, s tr , “Boa Noite
Proc_Exemp c o d e instruções
ção ou b l o
Outra Instru
End Sub

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.5.1.
3.3.5.1. Argumentos
Argumentos nomeados
nomeados
PROGRAMAÇÃO

No
NoVBA
VBAéépossível
possívelexplicitar
explicitarexactamente
exactamenteaaque
queargumento
argumentoda
dadefinição
definiçãodo
doprocedimento,
procedimento,se
serefere
referecada
cadaum
umdos
dos
argumentos
argumentosda
dachamada,
chamada,através
atravésda
dasua
suanomea ção.
ão
nomeação.

Graças aos argumentos nomeados, podemos alterar


Sintaxe a ordem dos argumentos. Por outro lado, podem-se
também, combinar argumentos não nomeados com
Microsoft VBA

Nome_argumento_1:=
Nome_argumento_1:= valor,….
valor,…. argumentos nomeados, devendo surgir em primeiro
lugar os não nomeados.

Exemplo
Chamada do procedimento Proc_Exemplo (ver secção 3.3.5) dentro de outro procedimento
Argumentos nomeados
ub P ro c_ Pr incipal ()
S
tring
Dim str as S
str= “Boa Ta
rde”
, Ms g_ 2: =“ Boa Noite”
r
e mplo v :=2 .7, Msg_1:=st
Proc_Ex c o d e instruções
ção ou b l o
Outra Instru
N oit e”, v:=2.7
End Sub := “Boa
e mplo M sg_1:=str, Msg_2
Proc_Ex

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.5.2.
3.3.5.2. Argumentos
Argumentos opcionais
opcionais
PROGRAMAÇÃO

Entende-se
Entende-se por
por argumento
argumento opcional,
opcional, oo que
opcional que não
não necessita
necessita de
de ser
ser contemplado
contemplado nas
nas chamadas
chamadas aoao respectivo
respectivo
procedimento.
procedimento.AAdeclaração
declaraçãode
deargumentos
argumentosopcionais
opcionaisestá
estárelacionada
relacionadacomcomaaexistência
existênciade
devalores
valorespor
pordefeito
defeito
(defaults).
(defaults).

Exemplo de utilização: MsgBox


Microsoft VBA

sg Bo x “O lá a todos”
M

funçãoMsgBox
AAfunção MsgBoxtemtem55argumentos;
argumentos;44desses
dessessão
sãoopcionais,
opcionais,sendo
sendoapenas
apenasobrigatório
obrigatórioooargumento
argumentoreferente
referenteàà
mensagem.
mensagem.Entre
Entreos
osargumentos
argumentosopcionais, conta-seooTitle
opcionais,conta-se Title(permite
(permitecontrolar
controlarootitlo
titlona
nabarra
barrasuperior
superiorda
dacaixa
caixa
de
dediálogo),
diálogo),cujo
cujooovalor
valorpor
pordefeito
defeitoéé“Microsoft
“MicrosoftExcel”.
Excel”.
o”
T it le := “ U m outro Titl
a todos”,
MsgBox “Olá

Nota:
Nota:uma
umavez
vezque
queooargumento
Title nãoééoo2.º
argumento Titlenão 2.ºargumento,
argumento,temos
temosque
queoonomear
nomearpara
paraque
queoo
VBA,
VBA,conheça
conheçaesse
esseargumento
argumentocomo
comosendo,
sendo,aaque
quequeremos
queremosatribuir
atribuirum
umvalor.
valor.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Declaração de argumentos opcionais


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

1- escrever a palavra reservada Optional 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;
Microsoft VBA

3- que os argumentos opcionais sejam do tipo Variant.

Exemplo
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”.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.3.5.3.
3.3.5.3. Argumentos
Argumentos passados
passados por
por valor
valor ou
ou por
por referência
referência
PROGRAMAÇÃO

No
Noque
quediz
dizrespeito
respeitoaos
aosargumentos
argumentospassados
passadosna nachamada
chamadadum
dumprocedimento,
procedimento,existem
existemduas
duaspossibilidades:
possibilidades:os
os
argumentos
argumentos da
da chamada
chamada são
são alteráveis
alteráveis dentro
dentro dum
dum procedimento
procedimento ou
ou os
os argumentos
argumentos da
da chamada
chamada nãonão são
são
alteráveis
alteráveisdentro
dentrodo
doprocedimento.
procedimento.
Microsoft VBA

- Argumentos alterados dentro dum 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.

- Argumentos não alterados dentro dum procedimento

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.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Sintaxes
Referência
PROGRAMAÇÃO

- Quando o argumento deve ser passado por referência, usa-se a palavra reservada ByRef a anteceder a sua
declaração.
Valor
- Quando o argumento deve ser passado por valor, usa-se a palavra reservada ByVal a anteceder a sua
declaração.
Microsoft VBA

Val y A s Integer)
Exemplo yVal x As Integer,
By
R e f(B
mplo_Val_
Sub Proc_Exe
x=10
y=4
End Sub
Sub Proc_Test()
nt eg er , B A s Integer
Dim A As I
A=0:B=2 Após a execução de Proc_Exemplo_Val_Ref:

o c_ Ex e mpl o_ Val_Ref A,B


Pr •A tem o valor 0
•B tem o valor 2
End Sub
Nota:
Nota:Por
Pordefeito
defeitoooVBA,
VBA,efectua
efectuaaapassagem
passagemdedeargumentos
argumentospor
porreferência
referência(quando
(quandonão
nãose
seindica ByRefnem
indicaByRef ByVal,assume-se
nemByVal,
ByVal assume-se
ByRef).
ByRef Por defeito as variáveis passadas a um procedimento, sujeitam-se a alterações no seu conteúdo.
ByRef). Por defeito as variáveis passadas a um procedimento, sujeitam-se a alterações no seu conteúdo.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.
3.4.TTópicos
ópicos avan çados
avançados
PROGRAMAÇÃO

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

Entende-se
Entende-se por
por âmbito
âmbito (ou
(ou visibilidade)
visibilidade) de
de uma
uma variável,
variável, oo local
local onde
onde esta
esta pode
pode ser
ser “reconhecida”.
“reconhecida”. Em
Em VBA,
VBA,
podem-se
podem-seidentificar
identificar33âmbitos
âmbitosdistintos:
distintos:
Microsoft VBA

Livro
Módulo
Procedimento
- Nível do procedimento

- Nível do módulo
Procedimento
- Nível do livro

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.1.1.
3.4.1.1. Nível
Nível do
do Procedimento
Procedimento
PROGRAMAÇÃO

As
As variáveis
variáveis declaradas
declaradas dentro
dentro dum
dum procedimento,
procedimento, têm
têm como
como âmbito
âmbito oo próprio
próprio procedimento,
procedimento, sendo
sendo por
por isso
isso
apenas
apenasreconhecidas
reconhecidasdentro
dentrodesse.
desse.AAestas
estasvariáveis
variáveiséénormal
normalatribuir-se
atribuir-seaadesignação
designaçãode devariáveis locais(ao
variáveislocais (ao
procedimento).
procedimento).

3.4.1.2.
3.4.1.2. Nível
Nível do
do Módulo
Módulo
Microsoft VBA

Para
Paraquequeas
asvariáveis
variáveistenham
tenhamumumâmbito
âmbitoaoaonível
níveldo
domódulo,
módulo,aasuasuadeclaração
declaraçãodevedeverealizar-se
realizar-sedentro
dentrodesse
desseee
fora
fora de
de qualquer
qualquer procedimento.
procedimento. As
As variáveis
variáveis com
com este
este âmbito
âmbito são
são visíveis
visíveis em
em todo
todo oo módulo
módulo ee em
em todos
todos os
os
procedimentos
procedimentosdefinidos
definidosnesse.
nesse.AAestas
estasvariáveis
variáveisatribui-se
atribui-senormalmente
normalmenteaadesignação
designaçãode
devariáveis globais(ao
variáveisglobais (ao
módulo).
módulo).

3.4.1.3.
3.4.1.3. Nível
Nível do
do Livro
Livro

OO âmbito
âmbito destas
destas variáveis
variáveis corresponde
corresponde aa todo
todo oo livro
livro (workbook).
(workbook). Para
Para que
que uma
uma variável
variável possa
possa adquirir
adquirir este
este
âmbito,
âmbito,esta
estadeve
deveser
serdeclarada
declaradanum
numdos
dosmódulos,
módulos,utilizando
utilizandoaapalavra reservadaPublic
palavrareservada Public(que (quesignifica
significaque
queaa
variável
variáveléépública
públicaem
emtodos
todosos
osmódulos
módulosdo
dolivro),
livro),eepode-se
pode-sedizerdizerque
queaavariável
variávelééglobal
globalao
aolivro.
livro.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.1.4.
3.4.1.4. Exemplo
Exemplo 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
Módulo procedimentos).
PROGRAMAÇÃO

Public x As
Integer
Dim y As Int A variável y é visível em todo o módulo, sendo por isso também visível em
eger
...
Proc_1, Proc_2, Proc_3 e Proc_4, pelo que pode ser lá utilizada.
Sub Proc_1()
Dim u As Int
eger A variável u é visível apenas dentro do procedimento Proc_1, não podendo por
Microsoft VBA

...
End Sub exemplo ser invocada no Proc_2.
...

Sub Proc_2(z
As Integer) A variáveis z e v são visíveis, apenas dentro do procedimento Proc_2.
Dim v As Int
eger
...
End Sub Dentro do procedimento Proc_3, quando tivermos que usar a variável x,
...
estaremos a referir-nos à sua variável x.
Sub Proc_3()
Dim x As Int
eger
... Dentro do procedimento Proc_4, quando falarmos de x, estamos a referir-nos ao
End Sub 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
Sub Proc_4(x mesmo âmbito).
As Integer)
...
End Sub

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.2.
3.4.2. Tempo
Tempo de
de vida
vida das
das variáveis
variáveis
PROGRAMAÇÃO

OOtempo
tempode
devida
vidadas
dasvariáveis,
variáveis,está
estárelacionado
relacionadocom
comoorespectivo
respectivoâmbito
âmbitode
devisibilidade.
visibilidade.

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

Nesta
Nestasituação,
situação,aavariável
variávelestá
estásempre
sempreactiva
activapelo
peloque
quese
seooseu
seuvalor
valorsofrer
sofreralterações
alterações(devido
(devidoààexecução
execuçãodas
das
Microsoft VBA

instruções
instruçõesdedealgum
algumdos
dosprocedimentos
procedimentosdo
domódulo),
módulo),essas
essasserão
serãosempre
semprepreservadas.
preservadas.As Asalterações
alteraçõessó
sóserão
serão
perdidas
perdidas se
se reeditarmos
reeditarmos oo módulo,
módulo, se
se fizermos
fizermos aa sua
sua reinicializarão
reinicializarão (RESET)
(RESET) ou
ou se
se sairmos
sairmos do
do EXCEL
EXCEL ee
voltarmos
voltarmosaaentrar.
entrar.

3.4.2.2.
3.4.2.2. Variável
Variável declarada
declarada ao
ao nível
nível dum
dum dado
dado procedimento
procedimento
Qualquer
Qualquervariável
variávelnesta
nestasituação,
situação,éécriada
criadaquando
quandoooprocedimento
procedimentoééinvocado
invocadoeemorre
morrequando
quandoeste
estefinaliza
finalizaaasua
sua
execução.
execução.Se
Seooprocedimento
procedimentofor
forchamado
chamadovárias
váriasvezes,
vezes,uma
umavariável
variáveléécriada
criadaeemorre,
morre, cada
cadavez
vezquequeeste
esteéé
executado.
executado.
Por
Poresta
estarazão,
razão,nem
nemsempre
sempreéépossível
possívelguardar
guardarnuma
numavariável
variáveldeclarada
declaradadentro
dentrodum
dumprocedimento,
procedimento,um
umvalor
valoraa
usar
usarnuma
numasua
suafutura
futuraexecução.
execução.Para
Paraque
queisso
issoseja
sejapossível,
possível,utiliza-se
utiliza-seaapalavra reservadaStatic
palavrareservada Staticem
emvez
vezde
de
Dim
Dim, ,tornando
tornandoaavariável
variávelestática.
estática.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.2.3.
3.4.2.3. Exemplo
Exemplo

Móódduulo
lo
PROGRAMAÇÃO

 m b
b ito
ito d
doo M
Âm
Módulo eennttoo
Dim j As Int d o P
Pro
rocce
eddim
im
...
eger Âm
 mbbititoo do
Sub Proc_Dur
_Var()
icaa
táttic
iávveell eesstá
VVaarriá
Microsoft VBA

Dim i As Int
eger
Static K As
Integer
j=0:i=0:k=0 Uma vez que i tem o âmbito do procedimento, sempre que se
i=i+1 executar este procedimento, o seu valor será sempre 1.
j=j+1
k=k+1
Uma vez que j tem o âmbito do módulo, sempre que se
MsgBox “O va
lor de i é “ executar este procedimento, o seu valor será incrementado em
MsgBox “O va &i
lor de j é “ 1 unidade.
MsgBox “O va &j
lor de k é “
End Sub &k

Uma vez que k é uma variável estática, sempre que


executarmos o procedimento, o seu valor será incrementado
em 1 unidade.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.3.
3.4.3. Conversões
Conversões entre
entre tipos
tipos de
de dados
dados
PROGRAMAÇÃO

Tal
Talcomo
comovimos
vimosnanasecção
secção3.2.2.1.,
3.2.2.1.,ootipo
tipode
dedados
dadosquequeuma
umavariável
variávelpode
podeconter,
conter,está
estácondicionado
condicionadopelo
pelotipo
tipo
com
comque
queesta
estafoi
foideclarada.
declarada.Porém,
Porém,existe
existeaapossibilidade
possibilidadede
deconverter
convertervalores
valoresdum
dumdeterminado
determinadotipo
tipode
dedados
dados
para
paraum
umoutro
outrotipo.
tipo.
Microsoft VBA

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

OOVBA
VBApode
podelevar
levaraacabo
caboalgumas
algumasconversões,
conversões,quando
quandoatribuímos
atribuímosaauma
umavariável
variáveldum
dumdeterminado
determinadotipo
tipode
dedados,
dados,
um
umvalor
valordum
dumoutro
outrotipo
tipode
dedados:
dados:conversões implícitas.Entre
conversõesimplícitas. Entreas
asvárias
váriasconversões,
conversões,salientam-se
salientam-seasasseguintes:
seguintes:

- Conversões entre tipos numéricos


- Conversões entre tipos numéricos e tipo String
- Conversões de/para o tipo Variant

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.3.2.
3.4.3.2. Conversões
Conversões entre
entre tipos
tipos numéricos
numéricos
PROGRAMAÇÃO

AAconversão
conversãode
devalores
valoresentre
entretipos
tiposnuméricos
numéricosééem
emgeral
geralpossível,
possível,apesar
apesarde
deimplicar
implicarem
emalguns
algunscasos
casosaaperda
perdade
de
informação.
informação.

Conversão: inteiro (Integer ou Long) → real (Single ou Double)


Microsoft VBA

In teg er , d As Double
Dim i As
i=4 Nota:
Nota:esta
estaconversão
conversãoéésempre
sempreválida.
válida.
‘ d p as sa a valer 4
d=i
‘ d p a s sa a valer 5
d=5

Conversão: real (Single ou Double) → inteiro (Integer ou Long)


Int eg er , d As Double
Dim i As
d=4.0 Nota:
Nota:embora
emborapossível
possívelesta
estaconversão
conversãopode
podenãonãoser
serválida.
válida.
‘ i p as sa a valer 4 AAconversão
i=d
a valer 5 conversãodum dumnúmero
númeroreal
realpara
paraumuminteiro,
inteiro,implica
implicaumum
i p a s sa arredondamento, pelo que o valor que ficará na variável do
i=5.0 ‘ arredondamento, pelo que o valor que ficará na variável do
tipo
d=6.3 tipointeiro
inteironão
nãoserá
seráoomesmo,
mesmo,que
quelhe
lhefoi
foiatribuído.
atribuído.
‘ i p as sa a valer 6
i=d
.9 ‘ i p a s sa a valer 8
i=7

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.3.3.
3.4.3.3. Conversões
Conversões entre
entre tipos
tipos numéricos
numéricos ee tipo
tipo String
String
e, s As String
PROGRAMAÇÃO

s D o u bl
eger, d A
Dim i As Int
i=4 Nota:
Nota:não
nãopodemos
podemosconverter
converterdirectamente
directamenteumumvalor
valor
!
‘ I mp o ss ível:dá erro do tipo String em nenhum tipo numérico, nem vice-
do tipo String em nenhum tipo numérico, nem vice-
s=i !
‘ I m po s s ível:dá erro versa.
versa.
s=5
s=“4”
dá erro!
Microsoft VBA

‘ I mp o ss í v e l :
i=s
‘ I m po s s í v el:dá erro!
i=“5”

3.4.3.4.
3.4.3.4. Conversões
Conversões de/para
de/para oo tipo
tipo Variant
Variant
A s S t r i n g , v As Variant
b le, s
i A s I nt e g er, d As 4Dou
Dim v=
v=i:v=d:v‘=si: passa a valleerr 4“4”
i=v va
s=v ‘ s passa aa valer 4
d=v ‘ d passa
ondado)
v=5.3 p a ss a a va ler 5 (arred
‘ i valer “5, 3”
i=v ‘ s passa aa valer 5.3
s=v
d=v ‘ d passa
rredondado)
v=“5.3” ‘ i passa a valeerr 5“5(.a 3”
i=v ‘ s p assa a val r 5.3
s=v vale
d=v ‘ d passa a
v=“olá” ‘ Impossível: dáerer“rool!á”
i=v ‘ s passssí a a val erro!
s=v ‘ Impo vel: dá
d=v

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.3.5.
3.4.3.5. Aspectos
Aspectos aa ter
ter em
em conta
conta nas
nas conversões
conversões implícitas
implícitas
PROGRAMAÇÃO

• qualquer valor de qualquer tipo, pode ser convertido para o tipo Variant;

• qualquer valor do tipo Variant pode ser convertido no tipo String;

• um valor do tipo Variant pode ser convertido num tipo numérico, desde que se possa encontrar um
Microsoft VBA

equivalente numérico;

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

Regra empírica de conversão


Variant
Repare
Repareque:
que:embora
emboranão nãose
sepossam
possamefectuar
efectuarconversões
conversõesdirectas
directas
entre String ←→
entre tipo String ←→ tipos numéricos, ambos podem ser
tipo tipos numéricos, ambos podem ser
convertidos de/para o tipo Variant.
Variant
convertidos de/para o tipo Variant.
Integer String Para
Paraooefeito,
efeito,podemos
podemosusar
usaruma
umavariável
variávelauxiliar
auxiliardo
dotipo
tipoVariant,
Variant
Variant,
Long como
como uma
uma “ponte”
“ponte” entre
entre oo tipo String ee os
tipo String os tipos
tipos numéricos
numéricos
(Integer,
(Integer,Long,
Integer Long Singleou
Long,Single ouDouble).
Double
Single Double).

Double

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.3.6.
3.4.3.6. Explícitas
Explícitas (funções
(funções de
de conversão)
conversão)
PROGRAMAÇÃO

No
NoVBA
VBAexistem
existemfunções
funçõesdedeconversão
conversãocriadas
criadasexplicitamente,
explicitamente,para
parapermitirem
permitiremaaconversão
conversãodos
dosvalores
valoresentre
entreos
os
diferentes
diferentestipos
tiposde
dedados.
dados.

Tabela de funções de conversão


Exemplo
Microsoft VBA

Nome da Função Conversão


eger,
de para Dim i As Int
ing
Asc String Código ASCII Dim s As Str dduunnddaanntete
CBool numérico Boolean tiliz aç
ação
ãore
r e
UUtiliz
...
Ccur numérico Currency
Cdate String Date i=CInt(4.3)
)
CDbl numérico ou String Double s=CStr(“olá”
CInt numérico ou String Integer ...
CLng numérico ou String Long ...
)
CSng numérico ou String Single i=Cint(“4.3”
CStr numérico ou String String
S=CStr(65)
CVar numérico ou String Variant
Str numérico String
...
Val String Numérico
Chr Código ASCII String

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.4.
3.4.4. Tipos
Tipos de
de dados
dados definidos
definidos pelo
pelo utilizador
utilizador
PROGRAMAÇÃO

No
NoVBA,
VBA, além
alémdos dostipos
tiposde
dedados
dadosapresentados
apresentadosnuma
numadas
dassecções
secçõesanteriores,
anteriores,éépossível
possívelao
aoutilizador
utilizadordefinir
definiros
os
seus
seuspróprios
própriostipos
tiposde
dedados,
dados,com
combase
basenos
nosanteriores.
anteriores.

Sintaxe de definição
Type
Type Nome_do_Novo_Tipo
Nome_do_Novo_Tipo
Microsoft VBA

Nome_do_Campo_1
Nome_do_Campo_1 ou ou Nome_do_Array_1
Nome_do_Array_1 As
As Tipo_1
Tipo_1
Nome_do_Campo_2 ou Nome_do_Array_2 As Tipo_2
Nome_do_Campo_2 ou Nome_do_Array_2 As Tipo_2
...
...
Nome
Nome do
do Campo_N
Campo_N ou
ou Nome_do_Array_N
Nome_do_Array_N As
As Tipo_N
Tipo_N
End
End Type
Type

Algumas considerações:
‹
‹ AAdefinição
definiçãode
denovos
novostipos
tiposde
dedados
dadosdeve
deveser
serfeita
feitanum
nummódulo,
módulo,fora
forade
dequalquer
qualquerprocedimento.
procedimento.

‹
‹ Na
Nasintaxe
sintaxede dedefinição,
definição,os
osTipo_1, Tipo_2,…e
Tipo_1,Tipo_2, Tipo_Npodem
…eTipo_N podemser
serum
umtipo
tipode
dedados
dadosdo
doVBA,
VBA,ou
ouum
um
outro
outrotipo
tipodefinido
definidoanteriormente,
anteriormente,também
tambémpelo
peloutilizador.
utilizador.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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

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.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Exemplo 2
PROGRAMAÇÃO

Z A=(3,2,3)

O=(1,1,1)

X
Microsoft VBA

SSeeggm
meennttoo toOO
PPoonnto
O
OAA
O
O == ((11,1 toAA
,1,,11)) PPoonnto
AA == ((3
3,,22,,33))
ccoorr ==
vveerrdde
ttrraaççoo e
== 22

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Exemplo 3
PROGRAMAÇÃO

Z A=(3,2,3)

O=(1,1,1)

X
Microsoft VBA

SSeeggm
meennttoo
O
OAA toOO
PPoonnto
O
O == ((11,1
,1,,11))
AA == ((3 toAA
PPoonnto
3,,22,,33))
ccoorr ==
vveerrdde
ttrraaççoo e
== 22

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Algumas considerações:
‹
‹ Podemos
Podemostambém declararArrays
tambémdeclarar Arraysde
detipos
tiposdefinidos
definidospelo
peloutilizador.
utilizador.
PROGRAMAÇÃO

( 1 T o 5 ) A s Segmento_A
egmentos gmento_B
Dim Alguns_S o 1 0 ) A s S e
mentos (1 T
Dim Mais_Seg
... ( 3 ) . co r = “ vermelho”
ntos
Alguns_Segme
Microsoft VBA

2
... nto s( 6 ) .e x t remo(1).x =
Mais_Segme
...

‹
‹ Podem-se
Podem-seefectuar
efectuaratribuições
atribuiçõesentre
entrevariáveis
variáveis(ou
(oucampos)
campos)do
domesmo
mesmotipo
tipode
dedados
dadosdefinido
definidopelo
peloutilizador,
utilizador,
encarregando-se
encarregando-seooVBA
VBAdedefazer
fazeraacópia
cópiados
dosvalores
valorescampo
campoaacampo.
campo.

D, po nto_A As Ponto3D
As Ponto 3
Dim ponto_O
Segmento_A Esta instrução é equivalente às instruções:
Dim SegOA As
... nto_A
ponto_O.x = ponto_A.x
ponto_O = po ponto_O.y = ponto_A.y
... = ponto_A ponto_O.z = ponto_A.z
SegOA.origem

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.4.1.
3.4.4.1. With
With …
… End
End With
With
PROGRAMAÇÃO

Sintaxe
With
With Variável
Variável
.Nome_do_Campo_1
.Nome_do_Campo_1
.Nome_do_Campo_2
.Nome_do_Campo_2
...
Microsoft VBA

...
.Nome
.Nome do
do Campo_N
Campo_N
End With
End With

o
xem pplo
lodeeuutiltilizizaaççãão
d
EExem

Exemplo

Preenchimento e visualização dos


elementos (Nome, Número e Notas)
duma lista telefónica.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.5.
3.4.5. Recursividade
Recursividade
PROGRAMAÇÃO

AApossibilidade
possibilidadededeumumprocedimento
procedimentopoder
poderchamar-se
chamar-seaasisipróprio,
próprio,designa-se
designa-sepor
porrecursividade.
recursividade.AAsua
suaexplicação,
explicação,
será
serámais
maisexplícita
explícitase
setomarmos
tomarmoscomo
comoexemplo:
exemplo:

CÁLCULO DO FACTORIAL DE N : N!
Microsoft VBA

Solução não recursiva


… ×
1
) ×
1)× (N-2
-
= N×(N
)
orial(N 1
Fact

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Solução recursiva
PROGRAMAÇÃO

1 se N <= 1
Factorial( N) =
N × Factorial( N − 1) se N > 1
Microsoft VBA

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


recursiva:
N=4 N=3 N=2 N=1
(If…Then
Factorial_R(4)=Factorial_R(3)*4

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

Nota:
Nota:apesar
apesardas
dassoluções
soluçõesrecursivas
recursivasserem
seremmais
maiselegantes,
elegantes,os
osprogramadores
programadorestendem
tendemaaevitá-las,
evitá-las,porque
porqueum
umsub-
sub-
programa recursivo necessita de mais espaço (um conjunto completo de endereços de memória deve ser reservado,
44!=!=2244 programa recursivo necessita de mais espaço (um conjunto completo de endereços de memória deve ser reservado,
cada
cadavez
vezque
queum
umsub-programa
sub-programase
sechama
chamaaasisipróprio)
próprio)eeéémais
maislento
lento(devido
(devidoàs
àsoperações
operaçõesauxiliares
auxiliaresde
deentrada
entradaee
saída
saídadum
dumprograma)
programa)do
doque
queum
umsub-programa
sub-programanão
nãorecursivo.
recursivo.

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

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


Solução não recursiva Solução recursiva
PROGRAMAÇÃO

N-1 multiplicações
A se k=1
Potência (A,k) = A × A × A × … × A Potência(A ,k) =
A × Potência(A ,k)se k>1
Microsoft VBA

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.6.
3.4.6. Arrays
Arrays dinâmicos
dinâmicos
PROGRAMAÇÃO

Em
Emgeral,
geral,quando
quandotemos
temosumumconjunto
conjuntode
devalores
valoresdum
dumdeterminado
determinadotipo
tipode
dedados,
dados,sabemos
sabemosààprióri
prióriooseu
seunúmero.
número.
Contudo,
Contudo,ooproblema
problemasurge
surgequando
quandonão
nãosabemos
sabemos(no(nomomento
momentodadaescrita
escritado
doprograma)
programa)oonúmero
númerode devalores,
valores,ee
assim
assimquantas
quantascélulas
célulasvão
vãoser
sernecessárias:
necessárias:neste
nestecaso
casoootamanho
tamanhodo arraytem
doarray temdedeser
serdecidido
decididoememtempo
tempodede
execução
execução(não
(nãoem
emtempo
tempodedecodificação).
codificação).
AAsolução
soluçãopara
paraestes
estescasos
casosreside
residena
nautilização
utilizaçãode
dearrays
arraysdinâmicos,
dinâmicos,cujo
dinâmicos cujoootamanho
tamanhopode
podevariar.
Microsoft VBA

variar.

3.4.6.1.
3.4.6.1. Passos
Passos aa seguir
seguir na
na utilização
utilização de
de arrays
arrays dinâmicos
dinâmicos
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 ReDim.


ReDim
assa
sate
ter r33ccéélululalass
... ooaarrra p
rayy pas
ReDim ArrayReDimensionavel (4 To 6)
s
... ay p as
assa
sateter r55ccéélululalas
r
ooaar rray p
ReDim ArrayReDimensionavel (5 To 9)
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.6.2.
3.4.6.2. Palavra
Palavra reservada:
reservada: Perserve
Perserve
PROGRAMAÇÃO

Cada
Cadavez
vezque
quese
sefaz
fazooredimensionamento
redimensionamentododoarray,
array,da
daforma
formaexplicada
explicadaatrás,
atrás,perde-se
perde-seooseu
seuconteúdo.
conteúdo.Porém,
Porém,
em
emgeral
geralqueremos
queremosquequeooconteúdo
conteúdodo
doarray
arrayseja
sejapreservado,
preservado,cada
cadavez
vezque
queeste
esteééredimensionado:
redimensionado:neste
nestecaso
caso
utiliza-sePreserve
utiliza-se Preserve. .
AAutilização
utilizaçãoda
dapalavra reservadaPreserve
palavrareservada Preserve, ,só
sópermite
permiteaaalteração
alteraçãodo
dolimite
limitesuperior
superiorda
dagama
gamade
deíndices.
Microsoft VBA

índices.

Exemplificando

r a y Re d i m () As Integer e
Dim OutroAr ão pr e c is a de Preserv
, n
...
ut r o A r r a yR e dim(4 To 6) à 6): é a primeira vez
ReDim O células (da
4
‘pas s a a te r 3
) t er i o r fo i preservado
o 8 an
... r v e O u t r o Ar rayRedim(4 T 4 à 8 ): o seu conteúdo
ReDim Prese a a ter 5 células (da o
‘agora pass o 7 ) a n te r io r f oi preservad
T o
...
e rv e O ut r o A rrayRedim(4 4 à 7): o seu conteúd
ReDim Pres sa a ter 4 células (da
‘agora pas T o 7 ) se us a Preserve
e di m( 2 qu an do
...
m P re s e r v e OutroArrayR r n o li mi t e inferior,
ReD i e
rr a do ! Nã o se pode mex
‘ E

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

Algumas considerações:
PROGRAMAÇÃO

‹
‹ Nos
Nosarrays
arraysK-D
K-D(multi-dimensionais),
(multi-dimensionais),se
seusarmos apenasReDim
usarmosapenas ReDimpodemos
podemosalterar
alterarnão
nãosó
sóas
asgamas
gamasde
decada
cada
uma
umadas
dasdimensões,
dimensões,como
comoaté
atémesmo
mesmooonúmero
númerode
dedimensões.
dimensões.

‹
‹ Porém,
Porém,se usarmosReDim
seusarmos ReDim Preserve
Preserve, ,tudo
tudoooque
quepodemos
podemosfazer
fazerééalterar
alterarapenas
apenasooíndice
índicesuperior
superiorda
Microsoft VBA

da
última
últimadimensão.
dimensão.

nteger
Dim x() As I
... 3 , 34 T o 3 6, 4 To 10)
2
ReDim x(2 To 36, 4 To 12)
... 2 3, 3 4 To
ve x(2 To
ReDim Preser 9 , 1 T o 3, 2 To 8)
T o
... , 32 To 39, 8 )
ReDim x (1 T o 2 4
8 T o 9, 1 To 3, 2 To 5
... v e x( 1 T o 2 4, 32 To 39,
ReDim Preser

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.4.6.3.
3.4.6.3. Exemplo
Exemplo
PROGRAMAÇÃO

UBound (nome_array[dimensão])

Devolve o maior índice da Criação da primeira célula no Array_Dados.


célula do array disponível,
para uma dada dimensão (por
defeito o seu valor é 1).
Microsoft VBA

Ex.:
Dim A(1 To 100, 0 To 3, -3 To 4)
UBound (A,1) é 100
UBound (A,2) é 3
UBound (A,3) é 4
Preenchimento da célula i
do Array_Dados com
um elemento do tipo
Dados_Pessoais.
LBound (nome_array[dimensão])

Devolve o menor índice da


célula do array disponível, Inserção de mais uma célula no Array_Dados, preservando os
para uma dada dimensão (por
defeito o seu valor é 1)
valores contidos nas células já preenchidas.

Ex.: Declaração dum array Array_Dados sem tamanho.


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

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.
3.5.Manipula ção de
Manipulação devari áveis estruturadas:
variáveis estruturadas:arrays
arrays
PROGRAMAÇÃO

3.5.1.
3.5.1. Vectores:
Vectores: Array
Array Unidimensional
Unidimensional

V
Microsoft VBA

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

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

3.5.2.
3.5.2. Operações
Operações básicas
básicas com
com vectores
vectores
- Leitura - Inversão
- Escrita - Permutação circular
- Máximo e mínimo e respectiva posição - Remoção dum elemento
- Soma de todos os elementos - Inserção dum novo elemento
- Média aritmética dos elementos - Pesquisa dum elemento
- Troca de dois elementos - Número de elementos repetidos
- Ordenação : Bubble Sort

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.1.
3.5.2.1. Leitura
Leitura dum
dum vector
vector
PROGRAMAÇÃO

V ? ? ? ? ? …………. ? ? ?

1 2 3 4 5 N-2 N-1 N
Microsoft VBA

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

……

Para índice Desde 11 Até


Até NN Faz
Para
índice Desde Faz Sub Ler_Vector(v()As Integer, ByVal N As Integer)
Sub Ler_Vector(v()As Integer, ByVal N As Integer)
Dim i As Integer
ESCREVER (“Insira
(“Insiraooelemento”
elemento”&índice
&índice&”do
&”dovector”)
ESCREVER Dim i As Integer
vector”) For i=1 To N
For i=1 To N
LER(v(índice))
LER v(i)=CInt (InputBox(“Insira o elemento”&i))
(v(índice)) v(i)=CInt (InputBox(“Insira o elemento”&i))
Next i
Fim
Fim dodo Para
Para Next i
End Sub
End Sub
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.2.
3.5.2.2. Escrita
Escrita dum
dum vector
vector
PROGRAMAÇÃO

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

1 2 3 4 5 N-2 N-1 N
Microsoft VBA

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

……
Sub Escrever_Vector(v()As Integer, ByVal N As Integer)
Para índice
Para Desde 11 Até
índice Desde Até NN Faz
Faz Sub Escrever_Vector(v()As Integer, ByVal N As Integer)
Dim i As Integer
Dim i As Integer
ESCREVER (“v(”
ESCREVER (“v(”&índice
&índice&”)=“
&”)=“&v(índice)
&v(índice)&mdl)
&mdl) For i=1 To N
For i=1 To N
MsgBox “v(“ &i &”)=“ &v(i) &Chr(13)
Fim MsgBox “v(“ &i &”)=“ &v(i) &Chr(13)
Fim do
do Para
Para Next i
Next i
...... End Sub
End Sub

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.3.
3.5.2.3. Máximo
Máximo ee mínimo
mínimo dum
dum vector
vector ee respectiva
respectiva posição
posição
PROGRAMAÇÃO

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

1 2 3 4 5 N-2 N-1 N
Descrição Algorítmica Codificação VBA

… opção Tome Sub Max_Min_Pos(v()As Integer, ByVal N As Integer,
Microsoft VBA

Caso
Caso opção Tome
Sub Max_Min_Pos(v()As
Max As Integer,
Integer, ByVal
Min AsN Integer,
As Integer,
valor = “Máximo”: Faz Max As Integer,
Pos_Max Min Pos_Min
As Integer, As Integer,
As Integer)
valor = “Máximo”: Faz Pos_Max As Integer
Integer, Pos_Min As Integer)
Aux ← v(1) Dim Aux As Integer, Pos As
Aux ← v(1) Dim iAux
Dim As As Integer,
Integer, Pos As
opcao As String
Integer
Pos_aux ← 1 Dim i As
opcao = Integer, opcao As
InputBox(“Qual String Máximo ou Mínimo”)
a opcao:
Pos_aux ← 1 opcao = InputBox(“Qual a opcao: Máximo ou Mínimo”)
Para índice Desde 2 Até N Faz Select Case opcao
Para índice Desde 2 Até N Faz Select Case opcao
Case “Máximo”
Se v(índice)>Aux Então Case “Máximo”
Se v(índice)>Aux Então Aux=v(1)
Aux ← v(índice) Aux=v(1)
Aux ← v(índice) Pos=1
Pos_Aux ←índice Pos=1
For i=2 To N
Pos_Aux ←índice For
If i=2 To N Then
v(i)>Aux
Fim do Para If v(i)>Aux Then
Fim do Para Aux=v(i)
Máximo ← Aux Aux=v(i)
Máximo ← Aux Pos=i
Pos_Max ← Pos_aux End If Pos=i
Pos_Max ← Pos_aux End
Next i If
Caso opção Tome Next i
Caso opção Tome Max=Aux
valor = “Mínimo”: Faz Max=Aux
valor = “Mínimo”: Faz Pos_Max=Pos
Aux ← v(1) Case Pos_Max=Pos
“Mínimo”
Aux ← v(1) Case “Mínimo”
Pos_aux ← 1 Aux=v(1)
Pos_aux ← 1 Aux=v(1)
Pos=1
Para índice Desde 2 Até N Faz Pos=1
Para índice Desde 2 Até N Faz For i=2 To N
Se v(índice)<Aux Então For
If i=2 To N Then
v(i)<Aux
Se v(índice)<Aux Então
Aux ← v(índice) If v(i)<Aux ThenAux=v(i)
Aux ← v(índice) Aux=v(i)
Pos_Aux ←índice Pos=i
Pos_Aux ←índice End If Pos=i
Fim do Para NextEndi If
Fim do Para
Máximo ← Aux Next i
Max=Aux
Máximo ← Aux Max=Aux
Pos_Max ← Pos_aux Pos_Max=Pos
Fim do Caso ← Pos_aux
Pos_Max Pos_Max=Pos
End Select
Fim do Caso End End
Sub Select
End Sub

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.4.
3.5.2.4. Soma
Soma de
de todos
todos os
os elementos
elementos dum
dum vector
vector
PROGRAMAÇÃO

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

1 2 3 4 5 N-2 N-1 N
Descrição Algorítmica Codificação VBA
Microsoft VBA

……
ss←←00 Function Soma_elem_vector(v()As Integer, ByVal N As Integer)As Long
Function Soma_elem_vector(v()As Integer, ByVal N As Integer)As Long
Dim i As Integer, S As Long
Dim i As Integer, S As Long
Para índice Desde 11 Até
Até NN Faz
Para
índice Desde Faz S=0
S=0
ss←←ss++v(índice) For i=1 To N
For i=1 To N
v(índice) S=S+v(i)
S=S+v(i)
Fim
Fim dodo Para
Para Next i
Next i
Soma_elem_vector=S
...... Soma_elem_vector=S
End Function
End Function

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.5.
3.5.2.5. Média
Média aritmética
aritmética de
de todos
todos os
os elementos
elementos dum
dum vector
vector
PROGRAMAÇÃO

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

∑V (i)
1 2 3 4 5 N-2 N-1 N

V= i =1
Microsoft VBA

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

……
MM←←00 Function Media_Arit_vector(v()As Integer, ByVal N As Integer)As Integer
Function Media_Arit_vector(v()As Integer, ByVal N As Integer)As Integer
Dim i As Integer, M As Long
Para índice Desde 11 Até
Até NN Faz
Para
índice Desde Faz Dim i As Integer, M As Long
M=0
M=0
MM←←MM++v(índice) For i=1 To N
v(índice) For i=1 To N
M=M+v(i)
Fim M=M+v(i)
Fim do
do Para
Para Next i
Next i
MM←←MM/ /NN Media_Arit_vector=M/N
Media_Arit_vector=M/N
End Function
End Function
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.6.
3.5.2.6. Troca
Troca de
de dois
dois elementos
elementos dum
dum vector
vector
PROGRAMAÇÃO

V 3 5 4 …………. 8 7

1 2 I J N
Microsoft VBA

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

……
Sub Troca2elem_vect(v()As Integer, ByVal N As Integer)
ESCREVER (“Indique o índice do 1.º elemento a trocar i<N”) Sub Troca2elem_vect(v()As Integer, ByVal N As Integer)
ESCREVER(“Indique o índice do 1.º elemento a trocar i<N”) Dim i As Integer,j As Integer, Aux As Integer
Dim i As Integer,j As Integer, Aux As Integer
LER(i)(i)
LER
i=CInt(InputBox(“O índice do 1.º elem. a trocar i<N”))
i=CInt(InputBox(“O índice do 1.º elem. a trocar i<N”))
ESCREVER (“Indique o índice do 1.º elemento a trocar j<N”) j=CInt(InputBox(“O índice do 2.º elem. a trocar j<N”))
ESCREVER(“Indique o índice do 1.º elemento a trocar j<N”) j=CInt(InputBox(“O índice do 2.º elem. a trocar j<N”))
LER(j)(j)
LER Aux=v(i)
Aux=v(i)
Aux←←v(i)
Aux v(i)=v(j)
v(i) v(i)=v(j)
v(j)=Aux
v(I)←←v(j)
v(I) v(j)=Aux
v(j) End Sub
v(j) ← Aux End Sub
v(j) ← Aux
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.7.
3.5.2.7. Inversão
Inversão dum
dum vector
vector
PROGRAMAÇÃO

V
1 2 3 K 5 N
Microsoft VBA

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

……
Sub Inverte_vect(v()As Integer, ByVal N As Integer)
Sub Inverte_vect(v()As Integer, ByVal N As Integer)
kk←←NN\ \22 ‘Divisão
‘Divisãointeira
Dim k As Integer, i As Integer
inteira Dim k As Integer, i As Integer
Dim Aux As Integer
Dim Aux As Integer
Para índice Desde 11 AtéAté kk Faz
Para
índice Desde Faz k=N\2 ‘Divisão inteira
k=N\2 ‘Divisão inteira
Aux←←v(índice)
Aux For i=1 To k
v(índice) For i=1 To k
Aux=v(i)
Aux=v(i)
v(índice)←←v(N-índice+1)
v(índice) v(i)=v(N-i+1)
v(N-índice+1) v(i)=v(N-i+1)
v(N-índice+1)←←Aux
v(N-índice+1) v(N-i+1)=Aux
Aux v(N-i+1)=Aux
Next i
Fim Next i
Fim do
do Para
Para End Sub
End Sub
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.8.
3.5.2.8. Permutação
Permutação circular
circular dum
dum vector
vector
PROGRAMAÇÃO

V 3 5 4 …………. 8 7

1 2 3 N-1 N
Microsoft VBA

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

……
Sub Permut_circ_Vect(v()As Integer, ByVal N As Integer)
Sub Permut_circ_Vect(v()As Integer, ByVal N As Integer)
Aux←←v(1)
Aux Dim Aux As Integer, i As Integer
v(1) Dim Aux As Integer, i As Integer
Aux=v(1)
Para índice Desde 11 Até
Até N-1
Para
índice Desde N-1 Faz
Aux=v(1)
Faz For i=1 To N-1
For i=1 To N-1
v(índice)←←v(índice+1)
v(índice) v(i)=v(i+1)
v(índice+1) v(i)=v(i+1)
Next i
Fim Next i
Fim do
do Para
Para v(N)= Aux
v(N)= Aux
v(N)←←Aux
v(N) End Sub
Aux End Sub
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.9.
3.5.2.9. Remoção
Remoção dos
dos elementos
elementos dum
dum vector
vector
PROGRAMAÇÃO

V 3 5 ……… 4 …………. 8 7

1 2 K N-1 N
Microsoft VBA

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

……
Sub Remov_elem_Vect(v()As Integer, N As Integer)
ESCREVER(“ Indique o índice do elemento a remover <N”) Sub Remov_elem_Vect(v()As Integer, N As Integer)
ESCREVER(“Indique o índice do elemento a remover <N”) Dim k As Integer, i As Integer
Dim k As Integer, i As Integer
k=CInt(InputBox(“O índice do elem. a remover k<N”))
LER(k)
LER k=CInt(InputBox(“O índice do elem. a remover k<N”))
(k) For i=1 To N-1
For i=1 To N-1
Para índice Desde kk Até
Até N-1
Para
índice Desde N-1 Faz
Faz v(i)=v(i+1)
v(i)=v(i+1)
Next i
v(índice)←←v(índice+1)
v(índice) Next i
v(índice+1) N=N-1
N=N-1
Fim ReDim v(1 To N)
Fim do
do Para
Para ReDim v(1 To N)
End Sub
End Sub
NN←←N-1
N-1
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.10.
3.5.2.10. Inserção
Inserção dum
dum novo
novo elemento
elemento no
no vector
vector
PROGRAMAÇÃO

V 3 5 ……… 4 …………. 8 7

1 2 K N N+1
Microsoft VBA

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

……
ESCREVER (“Indique o índice do elemento a inserir <N”) Sub Inserir_elem_Vect(v()As Integer, N As Integer)
ESCREVER(“Indique o índice do elemento a inserir <N”) Sub Inserir_elem_Vect(v()As Integer, N As Integer)
Dim k As Integer, i As Integer
Dim k As Integer, i As Integer
ReDim v(LBound (v()) To UBound (v())+1)
LER(k)
LER ReDim v(LBound (v()) To UBound (v())+1)
(k) k=CInt(InputBox(“O índice do elem. a adicionar k<N”))
k=CInt(InputBox(“O índice do elem. a adicionar k<N”))
Para índice Desde N+1 Até kk Faz
Para
índice Desde N+1 Até Faz For i=N+1 To k Step -1
For i=N+1 To k Step -1
v(i)=v(i-1)
v(índice)←←v(índice-1)
v(índice) v(i)=v(i-1)
v(índice-1) Next i
Next i
Fim
Fim do
do Para
Para N=N+1
N=N+1
End Sub
NN←←N+1 End Sub
N+1
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.11.
3.5.2.11. Pesquisa
Pesquisa dum
dum elemento
elemento dum
dum vector
vector
PROGRAMAÇÃO

V 3 5 ……… ? …………. 8 7

1 2 K N N+1
Microsoft VBA

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


……

índice←←11
índice Sub Pesq_elem_Vect(v()As Integer, ByVal N As Integer
Sub Pesq_elem_Vect(v()As Integer, ByVal N As Integer
Elem As Integer)
Achou←←False
Achou Elem As Integer)
False Dim i As Integer, Achou As Boolean
Dim i As Integer, Achou As Boolean
Enquanto (Não
(NãoAchou)
Achou)ee(índice
(índice<N)
Enquanto i=1
<N) i=1
Achou=False
índice←←índice
índice
índice+1
Achou=False
+1 Do While (Not Achou) And (i<N)
Do While (Not Achou) And (i<N)
Achou←← (v(índice)=valor)
Achou i=i+1
(v(índice)=valor) i=i+1
Achou=(v(i)=Elem)
Fim
Fim do
do Enquanto
Achou=(v(i)=Elem)
Enquanto Loop
Loop
Se (Achou=True)
Se If (Achou=True)Then MsgBox “Está na posição “&i
(Achou=True) If (Achou=True)Then MsgBox “Está na posição “&i
Else MsgBox “Não está no vector”
ESCREVER(“Está na posição” & índice)
Então Else MsgBox “Não está no vector”
Então ESCREVER (“Está na posição” & índice) End If
End If
Senão (“Não está no vector”) End Sub
Senão ESCREVER
ESCREVER (“Não está no vector”) End Sub
Fim
Fim do
do Se
Se
......

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.12.
3.5.2.12. Número
Número de
de elementos
elementos repetidos
repetidos num
num vector
vector
PROGRAMAÇÃO

Ex.: 2 e 3 repetido: 2 elementos repetidos.

V 2 3 2 2 3 …………. 4 2 1

1 2 3 4 5 ← N-2 N-1 N
Microsoft VBA

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



… Function N_elem_Rep(v()As Integer, ByVal N As Integer)As Integer
N_Repetidos ← 0 Function N_elem_Rep(v()As Integer, ByVal N As Integer)As Integer
N_Repetidos ← 0 Dim i As Integer, j As Integer, N_Repetidos As Integer
Dim i As Integer, j As Integer, N_Repetidos As Integer
Para índice desde 1 Até N-1 Dim Repeticao As Boolean
Para índice desde 1 Até N-1 Dim Repeticao As Boolean
j ← índice +1 N_Repetidos=0
j ← índice +1 N_Repetidos=0
Repetição ← False For i=1 To N-1
Repetição ← False For i=1 To N-1
j=j+1
Repetir j=j+1
Repetir Repeticao=False
Se (v(índice)=v(j)) Repeticao=False
Se (v(índice)=v(j)) Do
Então Do
Então If v(i)=v(j) Then
If v(i)=v(j) Then
Repetição ← True Repeticao=True
Repetição ← True Repeticao=True
N_Repetidos=N_Repetidos+1
N_Repetidos ←N_Repetidos+1 N_Repetidos=N_Repetidos+1
N_Repetidos ←N_Repetidos+1 Else
Senão j ← j + índice Else
Senão j ← j + índice j=j+1
j=j+1
Fim do Se End If
Fim do Se End If
Até (Repetição =True) ou (j=N+1) Loop Until (Repeticao=True)OR (j=N+1)
Até (Repetição =True) ou (j=N+1) Loop Until (Repeticao=True)OR (j=N+1)
Next i
Fim do Para Next i
Fim do Para N_Elem_Rep=N_Repetidos
...... N_Elem_Rep=N_Repetidos
End Function
End Function

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.2.13.
3.5.2.13. Ordenação
Ordenação dum
dum vector:
vector: Bubble
Bubble Sort
Sort
Vector
Vector inicial
inicial
PROGRAMAÇÃO

3 7 5 8 1
1.ª
1.ª passagem
passagem
3 5 7 1 8

V 3 5 1 7 8
2.ª
2.ª passagem
passagem

3.ª
3.ª passagem
passagem
Microsoft VBA

3 1 5 7 8
4.ª
4.ª passagem
passagem
1 3 5 7 8
Codificação VBA
Sub Ordenacao_Bubble(v()As Integer, ByVal N As Integer)
Para SubiOrdenacao_Bubble(v()As
As Integer, limite As Integer,Integer ByVal N As Integer)
Para aa ordenação
ordenação deste
deste vector
vector de
de 55 elementos
elementos Dim
Dim i As Integer, limite As Integer
Dim Aux As Integer
foram
foram necessárias 4 passagens. Por maioria de
necessárias 4 passagens. Por maioria Dim Aux As Integer
de For limite=N-1 To 1 Step -1
For
razão, Forlimite=N-1 To 1 Step -1
i=1 To limite
razão,se
seoovector
vectortivesse
tivesseNNelementos
elementosseriam
seriam For i=1 To limite
If v(i)>v(i+1) Then
If v(i)>v(i+1) Then
necessárias N-1 passagens.
necessárias N-1 passagens.
Aux=v(i)
Aux=v(i)
v(i)=v(i+1)
v(i)=v(i+1)
v(i+1)=Aux
Nota:
Nota:aatroca
trocade
devalores
valoresentre
entre22variáveis
variáveisaaeeb:b: v(i+1)=Aux
End If nte
End
Next i If
rde mmccrreesscceente
Aux=a o
or or de
Aux=a Next i açãooppor
Next
Next
limite
limite OOrrddeennaçã
a=b End Sub
a=b End Sub

b=Aux
b=Aux

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.3.
3.5.3. Matrizes:
Matrizes: Array
Array Bidimensional
Bidimensional C
1 2 3
PROGRAMAÇÃO

1
5 9 1

L
M 2

3
4 7 2

3 9 1
Microsoft VBA

Dim
Dim M(1
M(1 To
To 3,
3, 11 To
To 3)
3) As
As Integer
Integer
‘‘ Array
Array bidimensional c/ 3 xx 33 células,
bidimensional c/ 3 células, com
com valores
valores inteiros
inteiros

3.5.4.
3.5.4. Operações
Operações básicas
básicas com
com matrizes
matrizes
- Leitura duma matriz
- Escrita duma matriz
- Traço duma matriz
- Transposta duma matriz
- Adição/Subtracção de matrizes
- Multiplicação de matrizes

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

C
3.5.4.1.
3.5.4.1. Leitura
Leitura duma
duma matriz
matriz 1 2 3
PROGRAMAÇÃO

1
? ? ?

L 2
M ? ? ?

3
? ? ?
Microsoft VBA

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


… Sub Ler_Mat(M()As Integer, ByVal L As Integer,
Sub Ler_Mat(M()As Integer, ByVal L As Integer,
Para ind_l Desde 1 Até L Faz ByVal C As Integer)
Para ind_l Desde 1 Até L Faz ByVal C As Integer)
Dim l As Integer, c As Integer
Para ind_c Desde 1 Até C Faz Dim l As Integer, c As Integer
Para ind_c Desde 1 Até C Faz For l=1 To L
For l=1 To L
ESCREVER (“Insira o elemento” &ind_l &”,” &ind_c &”da matriz”) For c=1 To C
ESCREVER (“Insira o elemento” &ind_l &”,” &ind_c &”da matriz”) For c=1 To C
M(l,c)=CInt (InputBox(“Insira M &l &”,” &c))
LER (M(ind_l, ind_c)) M(l,c)=CInt (InputBox(“Insira M &l &”,” &c))
LER (M(ind_l, ind_c)) Next c
Next c
Fim do Para (ind_c) Next l
Fim do Para (ind_c) Next l
End Sub
Fim do Para (ind_l) End Sub
Fim do Para (ind_l)
...
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

C
3.5.4.2.
3.5.4.2. Escrita
Escrita duma
duma matriz
matriz 1 2 3
PROGRAMAÇÃO

1
8 3 1

L 2
M 4 5 2

3
1 6 6
Microsoft VBA

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

… Sub Escreve_Mat(M()As Integer, ByVal L As Integer,


… Sub Escreve_Mat(M()As Integer, ByVal L As Integer,
ByVal C As Integer)
Para ind_l Desde 1 Até L Faz ByVal C As Integer)
Para ind_l Desde 1 Até L Faz Dim l As Integer, c As Integer
Dim l As Integer, c As Integer
Para ind_c Desde 1 Até C Faz For l=1 To L
Para ind_c Desde 1 Até C Faz For l=1 To L
For c=1 To C
ESCREVER (“M(” &ind_l &”,” &ind_c &”)=” &M(ind_l,ind_c) &mdl) For c=1 To C
ESCREVER (“M(” &ind_l &”,” &ind_c &”)=” &M(ind_l,ind_c) &mdl) MsgBox “M(“ &l &”,” &c &”)=“ &M(l,c) &Chr(13)
MsgBox “M(“ &l &”,” &c &”)=“ &M(l,c) &Chr(13)
Fim do Para (ind_c) Next c
Fim do Para (ind_c) Next c
Next l
Fim do Para (ind_l) Next l
Fim do Para (ind_l) End Sub
End Sub
...
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

C
3.5.4.3.
3.5.4.3. Traço
Traço duma
duma matriz
matriz Traço 1 2 3
PROGRAMAÇÃO

1
8 3 1

L 2
+
M 4 5
+
2

3
1 6 6
Microsoft VBA

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

… Function Traco_Mat(M()As Integer, ByVal L As Integer,


… Function Traco_Mat(M()As Integer, ByVal L As Integer,
Val C As Integer)As Integer
Se L=C Então Val C As Integer)As Integer
Se L=C Então Dim i As Integer, traco As Integer
Dim i As Integer, traco As Integer
Traco ← 0 If L=C Then
Traco ← 0 If L=C Then
traco=0
Para índice Desde 1 Até L Faz traco=0
Para índice Desde 1 Até L Faz For i=1 To L
For i=1 To L
Traco ← Traco+ M(índice, índice) traco=traco+M(i,i)
Traco ← Traco+ M(índice, índice) traco=traco+M(i,i)
Next i
Fim do Para (índice) Next i
Fim do Para (índice) Else
Else
Senão traco=-1
Senão traco=-1
End If
Traco ← -1 End If
Traco ← -1 Traco_Mat=traco
Traco_Mat=traco
Fim do Se End Function
Fim do Se End Function
...
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

C C
3.5.4.4.
3.5.4.4. Transposta
Transposta duma
duma matriz
matriz 1 2 3 1 2 3
PROGRAMAÇÃO

1 1
8 3 6 8 4 1
M(l,c)
M(l,c) == M
M (c,l)
(c,l)
L 2 L 2
4 5 2 3 5 6

M 3
1 6 6 M 3
6 2 6
Microsoft VBA

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


… Sub Transpos_Mat(M()As Integer,M_T()As Integer,ByVal L As Integer,
Para ind_l Desde 1 Até L Faz Sub Transpos_Mat(M()As Integer,M_T()As Integer,ByVal L As Integer,
Para ind_l Desde 1 Até L Faz ByVal C As Integer)
ByVal C As Integer)
Para ind_c Desde 1 Até C Faz Dim l As Integer, c As Integer
Para ind_c Desde 1 Até C Faz Dim l As Integer, c As Integer
For l=1 To L
M_T(ind_l,ind_c) ← M(ind_c, ind_l) For l=1 To L
M_T(ind_l,ind_c) ← M(ind_c, ind_l) For c=1 To C
For c=1 To C
Fim do Para (ind_c) M_T(l,c)=M(c,l)
Fim do Para (ind_c) M_T(l,c)=M(c,l)
Next c
Fim do Para (ind_l) Next c
Fim do Para (ind_l) Next l
Next l
... End Sub
... End Sub

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.5.4.5.
3.5.4.5. Adição/Subtracção
Adição/Subtracção de
de Matrizes
Matrizes
PROGRAMAÇÃO

M_R(l,c)
M_R(l,c) == M1
M1 (l,c)
(l,c) ±± M2(l,c)
M2(l,c)
C C C

M_R
M_R 1 2 3 M1
M1 1 2 3 M2
M2
1 2 3

1
1 1 6 2 1
Microsoft VBA

8 3 6 2 1 5

L 2
4 5 2
= L 2
3 5 0
+L 2
1 0 2

3
3 3 0 4 5
1 6 6 1 2 1

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


… Sub Soma_Mat(MR()As Integer,M1()As Integer, M1()As Integer,
… Sub Soma_Mat(MR()As Integer,M1()As Integer, M1()As Integer,
ByVal L As Integer,ByVal C As Integer)
Para ind_l Desde 1 Até L Faz ByVal L As Integer,ByVal C As Integer)
Para ind_l Desde 1 Até L Faz Dim l As Integer, c As Integer
Dim l As Integer, c As Integer
Para ind_c Desde 1 Até C Faz For l=1 To L
Para ind_c Desde 1 Até C Faz For l=1 To L
For c=1 To C
M_R(ind_l,ind_c)←M1(ind_l,ind_c)+M2(ind_l, ind_c) For c=1 To C
M_R(ind_l,ind_c)←M1(ind_l,ind_c)+M2(ind_l, ind_c) M_R(l,c)=M1(l,c)+ M2(l,c)
M_R(l,c)=M1(l,c)+ M2(l,c)
Fim do Para (ind_c)
Fim do Para (ind_c)
Next c
Next c acç ão
ãoba
basstatatrtrooccaar r
a suubbtrtracç
Fim do Para (ind_l)
Next l
Next l NNooccaassoodda s–”.
Fim do Para (ind_l) ra “ –”.
oossininaal lppaara “
End Sub
End Sub
...
...

Departamento de Informática
2005-2006 Curso de EMGI
Capítulo 6

3.6.
3.6.Objectos,
Objectos,Propriedades
PropriedadeseeM étodos do
Métodos doEXCEL
EXCEL
PROGRAMAÇÃO

Livro 1

Livros
Livro 2
Aplicação
….
Microsoft EXCEL Livro n
Microsoft VBA

Objecto
Objecto:
Objecto Application Objecto
Objecto:
Objecto Workbook

Objecto
Objecto:
Objecto Worksheet
Folha de Cálculo
Objecto
Objecto:
Objecto Chart
Folha de Gráfico
Livro
Caixa de Diálogo Objecto
Objecto:
Objecto DialogSheet

Módulo
Objecto
Objecto:
Objecto Module

Departamento de Informática

Вам также может понравиться