40
EXCEL Visual Basic (TÓPICOS ABORDADOS NAS AULAS DE INFORMÁTICA II) Por: Cristina Wanzeller / Jorge Loureiro Informática II

EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

Embed Size (px)

Citation preview

Page 1: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

EXCEL

Visual Basic

(TÓPICOS ABORDADOS NAS AULAS DE INFORMÁTICA II)

Por: Cristina Wanzeller / Jorge Loureiro

Informática II

Page 2: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

ÍNDICE 1. INTRODUÇÃO..................................................................................................................................1

2. PROCEDIMENTOS EM VISUAL BASIC......................................................................................2

2.1 TIPOS DE PROCEDIMENTOS...............................................................................................................2 2.2 COMPONENTES DUM PROCEDIMENTO...............................................................................................2 2.3 LIGAR PROCEDIMENTOS ...................................................................................................................2

3. COMO É ORGANIZADO UM MÓDULO EM V. BASIC............................................................3

4. DECLARAÇÕES EM VISUAL BASIC...........................................................................................4

4.1 TIPOS DE VARIÁVEIS EM V. BASIC ....................................................................................................4 4.2 TIPO DE INFORMAÇÃO CARACTER - CHARACTER .............................................................................5 4.3 DECLARAÇÃO DE VARIÁVEIS............................................................................................................5 4.4 DECLARAÇÃO DE CONSTANTES.........................................................................................................6 4.5 ÂMBITO DE UMA VARIÁVEL E DE UMA CONSTANTE...........................................................................6

5. OPERADORES..................................................................................................................................7

6. FUNÇÕES PREDEFINIDAS............................................................................................................7

7. EXPRESSÕES....................................................................................................................................8

8. INSTRUÇÕES BÁSICAS..................................................................................................................9

8.1 INSTRUÇÕES DE ATRIBUIÇÃO ...........................................................................................................9 8.2 INSTRUÇÕES DE LEITURA ...............................................................................................................10 8.3 INSTRUÇÕES DE ESCRITA................................................................................................................11

9. COMENTÁRIOS .............................................................................................................................12

10. ESTRUTURAS DE CONTROLO..............................................................................................13

10.1 SEQUÊNCIA ................................................................................................................................13 10.2 SELECÇÃO..................................................................................................................................13

10.2.1 Instrução de Selecção Se ... Então ... Senão... ..................................................................13 10.2.2 Instrução de Selecção Seleccionar Caso... Fim Seleccionar............................................17

10.3 REPETIÇÃO.................................................................................................................................19 10.3.1 Instrução de Repetição Faz ... Ciclo.................................................................................19 10.3.2 Instrução de Repetição Para ... Seguinte .........................................................................25 10.3.3 Instrução de Repetição Para Cada ... Seguinte................................................................27

11. VARIÁVEIS DE TIPO ESTRUTURADO OU ARRAYS........................................................29

11.1 ALTERAR O TAMANHO DE UM ARRAY EM RUN-TIME (ARRAYS DINÂMICOS) ............................32 11.2 ARRAYS MULTIDIMENSIONAIS ...................................................................................................33

12. TIPOS DE DADOS CRIADOS PELO UTILIZADOR.............................................................37

Informática II

Page 3: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

Visual Basic do Excel

Informática II – Cap. III - Excel – Visual Basic Pág. 1

O objectivo de um programa é o cálculo de valores. O computador manipula representações de valores, que não são mais do que configurações de bits ou palavras da memória. As representações físicas variam segundo os objectos a representar. É necessário a especificação do tipo de valores a manipular. Cada objecto terá um nome, para além de um tipo e de um valor. Os nomes dos objectos no programa chamam-se identificadores (exceptuando as palavras reservadas à linguagem V. Basic). Os objectos podem ser:

Constantes - nome fixo, tipo fixo e valor fixo. Exemplo: Kb - constante de nome "Kb", do tipo inteiro e valor de 1024

Variáveis - nome fixo, tipo fixo e valor variável. Exemplo: Factor - variável de nome factor, do tipo inteiro e de valor variável. A variável toma um valor, ou mais, durante a execução do programa.

Objectos V. Basic ou Excel - Um botão, caixa de diálogo, folha, livro, podendo ter propriedades e métodos. Exemplo: CaixaTexto1 - Objecto que é uma caixa de texto (onde se pode escrever texto),

cuja propriedade Valor [Value em Inglês], contém a string mostrada nessa caixa.

Para atribuirmos esse valor à variável Nome, faremos: Nome = CaixaTexto1.Valor [Nome = CaixaTexto1.Value]

Um programa em linguagem Visual Basic deve ser constituído por três partes fundamentais:

o cabeçalho, onde é indicado o nome do procedimento, tipo e também as origens dos dados de entrada e dos resultados;

• as declarações de todas as variáveis e constantes que intervêm no programa, e as definições dos seus tipos; e

o corpo do programa, onde aparecem as instruções que determinam as acções a executar ao longo do programa.

Esta estruturação não é de todo obrigatória, já que a declaração de variáveis e constantes não é obrigatória e pode também fazer-se em qualquer local do corpo do programa. De qualquer forma, recomenda-se a especificação obrigatória das variáveis e constantes e, pelo menos as mais relevantes deverão ser definidas no início de cada procedimento ou módulo.

1. Introdução

Page 4: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 2

Os procedimentos são blocos de código V.Basic, que é digitado num módulo V.B., sendo cada um executado como uma unidade.

• O código V.B. de um procedimento, indica o que fazer; •

Uma instrução é uma unidade sintacticamente completa de código, que expressa uma acção; Ex.Lucro_Líquido=Lucro_Bruto - Margem

Uma função retorna um valor; Ex. Maiúscula [Ucase em Inglês], retorna o texto em letras maiúsculas.

2.1 Tipos de Procedimentos Os procedimentos podem ser:

Procedimentos Proc [Sub em Inglês] - Não retornam um valor Inicia com um Proc e termina com Fim Proc [End Sub em Inglês ]

Procedimento Função [Function em Inglês] - Retornam um valor ao procedimento chamante Inicia com Função e termina com Fim Função [End Function em Inglês ]

2.2 Componentes dum Procedimento

Um procedimento tem: •

Função ... Fim Função [Function ... End Function] ou ou Proc ... Fim Proc [Sub ... End Sub]

Nome • Argumentos (opcionais) •

Código Visual Basic • Valor de retorno que existe na função e não existe no Proc/Sub.

2.3 Ligar Procedimentos

Idealmente um procedimento deve fazer uma coisa e bem. Devem criar-se procedimentos curtos, reutilizáveis, fáceis de manter e que possam trabalhar em conjunto. Procedimentos curtos são mais facilmente desenháveis, de implementar, de corrigir e alterar, dado que têm muito menos código. Com muitos procedimentos pode também evitar-se a escrita do mesmo código muitas vezes, colocando o código a repetir num procedimento e invocá-lo, quando necessário. Um procedimento pode chamar outros e este invocar outros e assim sucessivamente.

2. Procedimentos em Visual Basic

Page 5: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 3

Um módulo em V. Basic, contém usualmente, vários procedimentos. A sua ordem é irrelevante, a não ser por uma questão de sistematização do problema. Há no entanto regras que devem ser obedecidas. No início há uma área, denominada Secção de Declarações, onde devem ser declaradas constantes e variáveis comuns ao módulo ou ao livro, outras informações e opções de funcionamento do V.B. Exemplo:

Em Português Diferenças em Inglês ‘Início do Módulo ‘ESPECIFICAR OPÇÕES DO V. BASIC Opção Explícita Option Explicit ‘DECLARAÇÕES DE CONSTANTES E VARIÁVEIS DO MÓDULO ‘Declaração de constantes Público Const DowJones=3500 Public Const DowJones=3500 ‘Declarações de variáveis Decl Prec_Orig Dim Prec_Orig Decl Num_Vendas, Prec_Venda Dim Num_Vendas, Prec_Venda ‘Fim de declarações. ‘PROCEDIMENTOS Proc Vendas_Stock()

Inicializar_Folha Busca_Dados_Stock Insere_Valores Fim Proc

Sub Vendas_Stock() Fim Sub

Proc Inicializar_Folha() .... .... .... Fim Proc .... .... ....

Sub Inicializar_Folha() Fim Sub

3. Como é organizado um módulo em V. Basic

Page 6: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 4

4.1 Tipos de variáveis em V. Basic

Na linguagem V. Basic qualquer tipo de informação (dado) tem associado o seu tipo, implícita ou explicitamente, de tal modo que:

o tipo da informação determina a gama de valores que esta pode tomar e a gama de operações que lhe pode ser aplicada;

• cada informação tem um tipo, que pode ser redefinido internamente pelo V.B. em caso de necessidade;

o tipo de informação pode ser deduzido só pela sua forma ou contexto, sem qualquer conhecimento do valor que lhe poderá ser atribuído durante a execução do programa;

cada operador requer operandos e produz resultados de um determinado tipo. Na tabela seguinte são mostrados os tipos de variáveis do V. Basic.

Tipo de Dados (em Português)

Tipo de Dados (em Inglês)

Ocupação (em bytes)

Intervalo de valores possíveis

Booleano Boolean 2 bytes Verdadeiro/True ou Falso/False Inteiro Integer 2 bytes -32768 a 32767 Longo (Inteiro Longo)

Long 4 bytes -2,147,483,648 a 2,147,483,647

Simples (VF de Precisão Simples)

Single 4 bytes Ver manual

Duplo (VF de Precisão Dupla)

Double 8 bytes Ver manual

Moeda Currency 8 bytes Valores com 4 casas décimais e até aos biliões

Data Date 8 bytes 1 de Jan 0100 até 31 Dez 9999 Cadeia String 1 bytes p/ caracter 0 a 65535 ou mais em alguns

sistemas Variante Variant Como apropriado Texto ou valores até Double Objecto Object 4 bytes Qualquer referência a um objecto Definida pelo Utilizador

Definida pelo Utilizador

Número requerido pelos elementos

O de cada elemento que constitui o tipo de dados definido

4. Declarações em Visual Basic

Page 7: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 5

4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes no computador. Podem-se dividir em 4 grupos: Letras - A, B, ..., Z e a, b, ..., z; Dígitos - 0, 1, ..., 9; Caracteres especiais -! " # $ % & ' ( ) * + - , . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ etc Caracter branco ou espaço. O valor do tipo caracter é designado entre aspas: “A” “3” “!” Os caracteres são representados internamente no computador por um conjunto de zeros e uns, por exemplo, a tabela ASCII.

4.3 Declaração de Variáveis Como já atrás foi dito, as variáveis em V.B. não têm de ser obrigatoriamente explicitadas, embora seja conveniente faze-lo, pois torna o código de execução mais rápida e mais explícito. Para que o V.B verifique da existência de declaração de variáveis, colocar o statement Opção Explícita [Option Explicit] no início de cada módulo (secção de declarações). Uma variável é definida por um identificador com um nome fixo, tipo fixo e valor variável. Exemplos:

Declarações (em Português) Declarações (em Inglês) Decl S como Cadeia, Nome como Cadeia Decl ENome como Cadeia * 50 ‘(ENome - variável de tamanho fixo) Decl DataDia como Data Decl Botão como Objecto Decl Número1 como Inteiro Decl SimNao como Booleano Decl QualquerCoisa como Variante

Dim S As String, Nome As String Dim ENome As String * 50 ‘ (ENome - variável de tamanho fixo) Dim DataDia As Date Dim Botão As Object Dim Número1 As Integer Dim SimNao As Boolean Dim QualquerCoisa As Variant

Page 8: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 6

4.4 Declaração de constantes Uma constante é um identificador utilizado em substituição de um determinado valor. As constantes tornam-se particularmente úteis quando existe um valor que é utilizado várias vezes no programa e/ou quando um valor é difícil de memorizar. Por outro lado, a utilização de constantes torna um programa mais claro e facilita a sua manutenção. Exemplos: Const PI=3.14159265 Const PI2=PI * 2

4.5 Âmbito de uma variável e de uma constante

Caso uma variável seja definida dentro dum procedimento, só o código dentro desse procedimento pode aceder ou alterar o valor da variável. Por vezes, é necessário que o valor duma variável seja ‘visível’, fora do procedimento (em todo o módulo ou em todo o livro), chamando-se a essa disponibilidade de aceder à variável o seu “âmbito”. Dependendo onde se declarar a variável, o respectivo âmbito pode ser de 3 tipos:

Âmbito Declaração da Variável Local Decl [Dim] ou Estática [Static] dentro do procedimento Módulo Decl [Dim], Estática [Static] ou Priv [Private] no início do

módulo Publico Público [Public] no início do módulo

O âmbito de uma constante também depende do local e da forma como esta é declarada. Assim sendo os âmbitos possíveis são:

Âmbito Declaração de Constante Local Declaração da constante dentro do procedimento Módulo Priv[Private] Const ... no início do módulo Publico Público[Public] Const ... no início do módulo

Page 9: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 7

Aritméticos: +, -, /, *, ^, \ (divisão inteira) e Resto [Mod em Inglês] (resto inteiro) •

Concatenação: & •

Lógicos: E [And], Eqv, Imp, Não [Not], Ou [Or] e OuX [XoR] •

Comparação: =, <, <=, >, >= e <> •

For [Is] (operador equivalência) e Semelhante [Like] (operador semelhança) Ex. Texto = Mystery” Semelhante “M*y” [ Texto = Mystery” Like “M*y”], retorna o

valor lógico Verdadeiro.

As funções aceitam dados e produzem e devolvem resultados. Enumeram-se as seguintes: Funções em Português

F. em Inglês

Significado

ABS(x) - Calcula o módulo de x; ARCTG(x) [ATN] - Ângulo, compreendido entre 0 e n, cuja tangente é x. COS(x) - Coseno de x, com x em radianos; e EXP(x) - Exponencial de x, ex; FIXAR(x) [FIX] - Devolve parte inteira de um número; INT(x) - Devolve parte inteira de um número; LN(x) [LOG] - Logaritmo Natural de x, para x > 0; RAIZQ(x) [SQR] - Calcula a raiz quadrada de x. SEN(x) [SIN] - Seno de x, com x em radianos; ASC(str) - Devolve código associado ao 1º caracter da string str; CAR(c) [CHR] - Devolve caracter correspondente ao código c; VAL(str) - Devolve números contidos na string str; MEIO(str,i,n) [MID] - Devolve n caracteres da string str a partir da posição i;REMESP(str) [TRIM] - Devolve string str sem espaços no início e no fim; NÚMEROCAR(x) [LEN] - Se x for uma string devolve nº de caracteres da string; Há centenas de outras que poderão ser consultadas no manual OnLine, em caso de necessidade. Exemplos: Português Em Inglês Fixar(99.8) = Int(99.8) = 99 Fix(99.8) = Int(99.8) = 99 Fixar(-99.8) = -99 Int(-99.) = -100 Fix(-99.8) = -99 Int(-99.) = -100 Car(65) = “A” Car(90)= “Z” Chr(65) = “A” Chr(90)= “Z” Car(97)= “a” Car(122)= “z” Chr(97)= “a” Chr(122)= “z” Asc(“A”) =65 Asc(“a”)=97 (=)

5. Operadores

6. Funções Predefinidas

Page 10: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 8

Português Em Inglês Car(Asc(“a”)-32)=“A” Chr(Asc(“a”)-32)=“A” Meio("Excel", 2, 3) = “xce” Mid("Excel", 2, 3) = “xce” RemEsp(" Excel v7 ") = “Excel v7” Trim(" Excel v7 ") = “Excel v7” NúmeroCar(" Excel v7 ") = 12 Len(" Excel v7 ") = 12 NúmeroCar(RemEsp(" Excel v7 ")) = 8 Len(Trim(" Excel v7 ")) = 8

Expressões são regras para calcular valores, consistindo num conjunto de operandos ligados por operadores. No V. Basic os operadores têm as seguintes prioridades:

(Inglês) PRIORIDADES

NOT* / \ MOD AND

+ - OR= <> > >= < <=

4321

OPERADORES

NÃO* / \ RESTO E

+ - OU= <> > >= < <=

(Português)

As regras para o cálculo de expressões são as seguintes:

• Se todos os operadores têm igual prioridade, o cálculo é efectuado da esquerda para a direita;

Se os operadores têm prioridades diferentes, as operações são efectuadas por ordem de prioridade, começando na prioridade mais elevada; e

As duas primeiras regras podem ser alteradas por utilização de parêntesis, efectuando-se neste caso primeiro as operações dentro de parêntesis.

7. Expressões

Page 11: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 9

8.1 Instruções de Atribuição Instruções de atribuição são as instruções utilizadas para atribuir um valor particular a uma variável, valor esse que é especificado sob a forma de uma expressão.

IDENTIFICADOR

DIAGRAMA SINTÁTICO

:= EXPRESSÃO O operador da instrução de atribuição é: = - toma o valor de Exemplos: I = 3 a variável I toma o valor 3; J = I a variável J toma o valor da variável I; x = I * J + 5 a variável x toma o valor da expressão;

8. Instruções Básicas

Page 12: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 10

8.2 Instruções de Leitura Mostram uma caixa de diálogo e esperam que o utilizador escreva texto ou escolha um botão, retornando então o conteúdo da caixa de texto. Sintaxe em: Português CxEntrada(Prompt [,títulol][ ,val.defeito][ ,x pos][ ,y pos]) Inglês InputBox(Prompt [,títulol][ ,val.defeito][ ,x pos][ ,y pos]) Se o utilizador seleccionar o botão OK ou bater Enter, a função CxEntrada/InputBox retorna o conteúdo da caixa de texto. Com Cancelar ou Escape, retorna uma string de comprimento nulo “”. Exemplo: Português Cod= CxEntrada(“Indique o Código do Produto”, “Consulta a Produtos”) Inglês Cod= InputBox(“Indique o Código do Produto”, “Consulta a Produtos”) Obs. A função CxEntrada/ InputBox, retorna uma string. Caso o tipo de dados da variável para a qual vai ser transferida o valor retornado pela função, seja de outro tipo, deve usar-se a função conveniente para conversão de dados. Exemplo: Português N=Val(CxEntrada(“Numero Inteiro entre 1 e 100”) Inglês N=Val(InputBox(“Numero Inteiro entre 1 e 100”)

Page 13: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 11

8.3 Instruções de Escrita Mostram uma mensagem numa caixa de diálogo. A caixa só é fechada depois de o utilizador “clicar” um dos botões disponíveis. O valor retornado pela função, indica o botão que foi “clicado” pelo utilizador. Sintaxe: Português CxMsg(prompt [,botões] [título] [fich_Ajuda, contexto]) Inglês MsgBox(prompt [,botões] [título] [fich_Ajuda, contexto]) Obs. Para informações quanto ao item botões e valor retornado, recomenda-se a consulta ao help do V. Basic. Exemplo: O exemplo que se segue, usa a função CxMsg/MsgBox para mostrar uma mensagem crítica de erro, com o botão Sim e Não. O botão Não é especificado como botão de resposta por defeito. O valor retornado pela CxMsg/ MsgBox, depende do botão seleccionado pelo utilizador. Para os propósitos deste exemplo, assume-se que o Help.Hlp é um ficheiro de help que contém um tópico de ajuda de contexto com nº 1000. Português Inglês Msg=“Quer Continuar?” Msg=“Quer Continuar?” Style=vbSimNão+vbCrítico+vbBotãoAssumido2 Style=vbYesNo+vbCritical+vbDefaultButton2 Title=“Demostração da CxMsg” Title=“Demostração da MsgBox” Help=“Help.Hlp” Help=“Help.Hlp” Ctxt=1000 Ctxt=1000 ‘Mostra a mensagem ‘Mostra a mensagem Resp= CxMsg(Msg, Style, Title, Help, Ctxt) Resp= MsgBox(Msg, Style, Title, Help, Ctxt) Se Response=vbSim Então If Response=vbSim Então MyString = “Sim” ‘OBS. 1 MyString = “Sim” ‘OBS. 1 Senão Else MyString = “Não” ‘OBS. 2 MyString = “Não” ‘OBS. 2 Fim Se End If OBS: 1- O utilizador clicou o botão Sim 2- O utilizador clicou o botão Não As instruções de escrita podem ser formatadas, isto é, para cada saída podemos indicar a largura (em caracteres) desse campo e também o número de casas decimais, se o campo for do tipo real. Utiliza-se a função Formatar [Format], cuja sintaxe e informação adicional se recomenda consulta no Help OnLine.

Page 14: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 12

São frases dentro do programa que ajudam à sua compreensão. Os comentários são constituídos por uma sequência de caracteres iniciados por plica (‘) e que termina no fim da linha. Quer isto dizer que poderemos escrever uma instrução e indicar no final dela o respectivo propósito em comentário. Se pretendermos que toda a linha seja um comentário, então colocaremos a plica no seu início. Exemplos: I = I + 1 ‘Incrementar a variável I ‘ Procedimento destinado a calcular os números primos até ao inteiro a indicar Português Proc Perímetro() ‘ calcula o perímetro de uma circunferência, de raio R Const PI = 3.14 Decl R como simples, Per como simples ‘Inicio do tratamento R=Val(CxEntrada(“Insira o Raio da circunferência”) ‘Cálculo do valor do perímetro, utilizando a fórmula respectiva Per = 2 * PI * R; ‘Impressão do resultado CxMsg(“O perímetro da circ. de raio “ & R & “é igual a “ & Per) Fim Proc Inglês Sub Perímetro() ‘ calcula o perímetro de uma circunferência, de raio R Const PI = 3.14 Dim R As Single, Per As Single ‘Inicio do tratamento R=Val(InputBox(“Insira o Raio da circunferência”) ‘Cálculo do valor do perímetro, utilizando a fórmula respectiva Per = 2 * PI * R; ‘Impressão do resultado Msgox(“O perímetro da circ. de raio “ & R & “é igual a “ & Per) End Sub

9. Comentários

Page 15: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 13

Existem três estruturas de controlo: sequência, repetição e selecção.

10.1 Sequência As instruções são executadas sequencialmente. ... Inst. 1 Inst. 2 ... Na mesma linha podem colocam-se 2 ou mais instruções, desde que separadas com dois pontos (:). Obs. Apesar duma linha poder ter um maior comprimento do que a largura do ecran disponível, sendo efectuado o scroll horizontal automaticamente, pode suceder que pretendamos continuar uma instrução na linha seguinte. Para esse propósito, coloca-se no fim da linha um underscore (_).

10.2 Selecção As instruções de selecção permitem a execução condicional entre uma ou mais instruções. Existem no Visual Basic duas instruções de selecção: Se ... Então ... Senão ... [ If ... Then ... Else ...] Seleccionar Caso [Select Case] 10.2.1 Instrução de Selecção Se ... Então ... Senão...

DIAGRAMA SINTÁTICO

SE ENTÃOCondição

SENÃO

Instrução

Instrução

10. Estruturas de Controlo

Page 16: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 14

Expressão ?

Verdadeira

Falsa

ESQUEMA

Instrução 1

Expressão ?Verdadeira Falsa

Instrução 1 Instrução 2

A instrução Se pode ser composta. Existem duas maneiras de ela ser composta: - se a instrução depois do Senão[Else] é outra instrução Se [If]. Exemplo: Português Se condição1 Então instrução1 SenãoSe condição2 Então instrução2 Senão instrução3 Fim Se Inglês If condição1 Then instrução1 ElseIf condição2 Then instrução2 Else instrução3 End If - se a instrução depois do Então [Then] é outra instrução Se [If]. Exemplo: Português Se condição1 Então Se condição2 Então Se condição3 Então instrução1 Senão instrução2 Fim Se Senão instrução3 Fim Se Senão instrução4 Fim Se Inglês

Page 17: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 15

If condição1 Then If condição2 Then If condição3 then instrução1 Else instrução2 End If Else instrução3 End If Else instrução4 End If Exemplo: Programa que lê três números inteiros indicados por ordem crescente e diz se poderão ser considerados como os lados de um triângulo; em caso afirmativo diz de que tipo de triângulo se trata. Português Proc Triângulo() Decl a, b, c Como Inteiro a=Val(CxEntrada(“Introduza o Comp. do 1º lado do triângulo”)) b=Val(CxEntrada(“Introduza o Comp. do 2º lado do triângulo”)) c=Val(CxEntrada(“Introduza o Comp. do 3º lado do triângulo”)) Se a + b > c Então Se a = c Então CxMsg(“a=“ & a & “, b=“ & b & “, c=“ & c & “- Triângulo Equilátero” ) SenãoSe ( a = b ) ou ( b = c ) Então CxMsg(“a=“ & a & “, b=“ & b & “, c=“ & c & “ - Triângulo Isósceles” ) Senão CxMsg(“a=“ & a & “, b=“ & b & “, c=“ & c & “ - Triângulo Escaleno” ) Fim Se Senão CxMsg(“Não é um Triângulo!!!”) Fim Se Fim Proc

Page 18: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 16

Inglês Sub Triângulo() Dim a, b, c As Integer a=Val(InputBox(“Introduza o Comp. do 1º lado do triângulo”)) b=Val(InputBox (“Introduza o Comp. do 2º lado do triângulo”)) c=Val(InputBox (“Introduza o Comp. do 3º lado do triângulo”)) If a + b > c Then If a = c Then Msgbox(“a=“ & a & “, b=“ & b & “, c=“ & c & “- Triângulo Equilátero” ) ElseIf ( a = b ) Or ( b = c ) Then Msgbox (“a=“ & a & “, b=“ & b & “, c=“ & c & “ - Triângulo Isósceles” ) Else Msgbox (“a=“ & a & “, b=“ & b & “, c=“ & c & “ - Triângulo Escaleno” ) End If Else Msgbox (“Não é um Triângulo!!!”) End If End Sub

Page 19: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 17

10.2.2 Instrução de Selecção Seleccionar Caso... Fim Seleccionar

ESQUEMA

Instrução 2

Expressão ?

Instrução 1 Instrução 3

C1

C2, C3 C5

C7

Sintaxe Formal: Em Português Em Inglês Seleccionar Caso expressão_de_teste Caso lista1expressão Instruções Caso lista2expressão Instruções ...... ...... Caso Senão Instruções Fim Seleccionar

Select Case expressão_de_teste Case lista1expressão Instruções Case lista2expressão Instruções ...... ...... Case Else Instruções End Select

Cada listaexpressão é uma lista de um ou mais valores, se muitos, serão separados por vírgulas. Se mais de um Caso é igual a expressão_de_teste, só o bloco de instruções associado ao 1º caso é executado. O V. Basic executará as instruções do Caso Senão, se nenhum dos listaexpressão satisfizer a expressão_de_teste.

Page 20: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 18

Exemplo: Programa para escrever o último dia de um determinado mês e de um ano compreendido entre 1900 e 2000. Português Proc ultimoDia() Decl mes, ano Como Inteiro mes=Val(CxEntrada(“Introduza o Mês”)) ano=Val(CxEntrada (“Introduza o Ano”)) Seleccionar Caso mes Caso 1, 3, 5, 7, 8, 10, 12 CxMsg(mes & “ tem 31 dias!”) Caso 4, 6, 9, 11 CxMsg(mes & “ tem 30 dias!”) Caso 2 Se (ano Resto 4) = 0 Então CxMsg(mes & “ tem 29 dias!”) Senão CxMsg(mes & “ tem 28 dias!”) Fim Se Fim Seleccionar Fim Proc Inglês Sub ultimoDia() Dim mes, ano As Integer mes=Val(InputBox(“Introduza o Mês”)) ano=Val(InputBox (“Introduza o Ano”)) Select Case mes Case 1, 3, 5, 7, 8, 10, 12 MsgBox(mes & “ tem 31 dias!”) Case 4, 6, 9, 11 MsgBox (mes & “ tem 30 dias!”) Case 2 If (ano Mod 4) = 0 Then MsgBox (mes & “ tem 29 dias!”) Else MsgBox (mes & “ tem 28 dias!”) End If End Select End Sub

Page 21: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 19

10.3 Repetição As instruções de repetição implicam a existência de um ciclo no programa, que vai permitir a repetição de uma instrução ou de uma instrução composta, sujeita a uma condição que determina o final da instrução de repetição. Existem no V. Basic três instruções de repetição: Faz ... Ciclo [ Do ... Loop ] Para ... Seguinte [ For ... Next ] Para Cada ... Seguinte [ For Each ... Next ] 10.3.1 Instrução de Repetição Faz ... Ciclo

Expressão ?

Instrução

Verdadeira

Falsa

ESQUEMA

Há três variantes desta instrução: 1. Com teste prévio à condição no início do Ciclo, enquanto condição for verdadeira. 2. Idem à anterior, com teste à condição no final do Ciclo, executando as instruções do Ciclo, pelo menos uma vez. 3. Correr o Ciclo até que condição seja verdadeira. 1.

Faz Enquanto Condição .... .... Ciclo

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

A expressão condição, deverá produzir um valor lógico. É de realçar que a condição é verificada antes da execução de qualquer instrução do Ciclo. Assim, essas instruções podem nunca ser executadas, desde que a condição do Ciclo seja inicialmente falsa. Obs. Caso o Ciclo esteja mal construído, motivando a sua execução infinita, situação que deve obviamente ser evitada, pode parar-se a execução com a tecla Esc. Exemplos:

Page 22: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 20

A função que se segue, conta as ocorrências de uma string - string_a_Procurar - dentro de outra string - stringLonga - , efectuando sucessivos Ciclos enquanto a string_a_Procurar seja encontrada. O ciclo pode correr um número qualquer de vezes, podendo também nunca ser executado, se inicialmente a condição for falsa. Português Função ContaStrings (stringLonga, string_a_Procurar) pos = 1 Faz Enquanto PosCadeia(pos,stringLonga,string_a_Procurar) ‘Retorna verd./falso pos= PosCadeia(pos, stringLonga, string_a_Procurar) + 1 Contador=Contador + 1 Ciclo ContaStrings=Contador Fim Função Inglês Function ContaStrings (stringLonga, string_a_Procurar) pos = 1 Do While Instr(pos, stringLonga, string_a_Procurar) ‘Retorna verdade/falso pos=Instr(pos, stringLonga, string_a_Procurar) + 1 Contador=Contador + 1 Loop ContaStrings=Contador End Function Obs: A função PosCadeia [Instr] devolve a posição da primeira ocorrência de uma string noutra string. Para obtenção de informação adicional recomenda-se a consulta ao help do V. Basic.

Page 23: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 21

Este outro programa lê dois inteiros positivos e divide o primeiro pelo segundo, usando só as operações de soma e subtracção. Português Proc divisao1() Decl x, y, quociente, resto Como Inteiro ‘Inicio do tratamento x = Val(CxEntrada(“Insira o Dividendo”)) y = Val(CxEntrada(“Insira o Divisor”)) resto = x : quociente = 0 Faz Enquanto resto >= y quociente = quociente + 1; resto = resto - y Ciclo; CxMsg(x & “ dividido por “ & y & “ é “ & quociente & “ ,resto “ & resto) Fim Proc Inglês Sub divisao1() Dim x, y, quociente, resto As Integer ‘Inicio do tratamento x = Val(InputBox(“Insira o Dividendo”)) y = Val(InputBox(“Insira o Divisor”)) resto = x : quociente = 0 Do While resto >= y quociente = quociente + 1; resto = resto - y Loop; MsgBox(x & “ dividido por “ & y & “ é “ & quociente & “ ,resto “ & resto) End Sub

Page 24: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 22

2.

Faz .... .... Ciclo Enquanto Condição

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

Neste caso, a instrução permite correr as instruções do Ciclo antes e no final de cada Ciclo efectuar o teste à condição. Esta variação de procedimento, garante que as instruções contidas no Ciclo são executadas pelo menos uma vez.

Expressão ?

Instrução n

VerdadeiraFalsa

ESQUEMA

Instrução 1

Instrução 2

Exemplos: Português Faz ProcDados ‘ Chama o procedim. que processa os dados pelo menos uma vez Resposta=CxMsg(“Pretende processar mais dados?”, vbSimNão) Ciclo Enquanto Resposta = vbSim Inglês Do ProcDados ‘ Chama o procedim. que processa os dados pelo menos uma vez Resposta=MsgBox(“Pretende processar mais dados?”, vbYesNo) Loop While Resposta = vbYes

Page 25: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 23

O proc. Divisao1, mas partindo do princípio que o primeiro inteiro é maior que o segundo. Português Proc divisao2 Decl x, y, quociente, resto Como Inteiro x = Val(CxEntrada(“Insira o Dividendo”)) y = Val(CxEntrada(“Insira o Divisor”)) resto = x : quociente = 0 Faz quociente = quociente + 1 resto = resto - y Ciclo Enquanto resto < y CxMsg(x & “ dividido por “ & y & “ é “ & quociente & “ ,resto “ & resto) Fim Proc Inglês Sub divisao2 Dim x, y, quociente, resto As Integer x = Val(InputBox(“Insira o Dividendo”)) y = Val(InputBox(“Insira o Divisor”)) resto = x : quociente = 0 Do quociente = quociente + 1 resto = resto - y Loop While resto < y MsgBox(x & “ dividido por “ & y & “ é “ & quociente & “ ,resto “ & resto) End Sub

Page 26: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 24

3. Faz AtéQue Condição .... .... Ciclo

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

ou

Faz .... .... Ciclo AtéQue Condição

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

Também com duas variantes, tal como o Ciclo Enquanto, com teste prévio ou no final do Ciclo. A diferença entre este tipo de Ciclo e o anterior, reside no facto de, neste caso, o Ciclo é executado enquanto a condição for falsa em vez de verdadeira. Exemplos: 1. Com teste prévio Português Faz AtéQue Resposta = vbNão ProcDados ‘ Chama o procedim. que processa os dados pelo menos uma vez Resposta=CxMsg(“Pretende processar mais dados?”, vbSimNão) Ciclo Inglês Do Util Resposta = vbNo ProcDados ‘ Chama o procedim. que processa os dados pelo menos uma vez Resposta=MsgBox(“Pretende processar mais dados?”, vbYesNo) Loop

Page 27: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 25

2. Com teste no final do Ciclo Português Faz ProcDados ‘ Chama o procedim. que processa os dados pelo menos uma vez Resposta=CxMsg(“Pretende processar mais dados?”, vbSimNão) Ciclo AtéQue Resposta = vbNão Inglês Do ProcDados ‘ Chama o procedim. que processa os dados pelo menos uma vez Resposta=MsgBox(“Pretende processar mais dados?”, vbYesNo) Loop Until Resposta = vbNo 10.3.2 Instrução de Repetição Para ... Seguinte Sintaxe: Português Para contador = início Até Fim [Inc incremento] instruções Seguinte [contador] Inglês For contador = início To Fim [Step incremento] instruções Next [contador] É usada quando o número de repetições não depende do efeito das instruções dentro do ciclo. A variável de controlo vai sendo incrementada ou decrementada do valor dado por incremento, desde um valor inicial, correspondente a início (literal ou expressão), até a um valor final, dado pelo Fim (literal ou expressão). Os argumentos contador, início, fim e incremento são todas numéricas. O incremento pode ser positivo ou negativo.

Page 28: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 26

Exemplo: Programa para calcular a soma de vários inteiros positivos. O primeiro valor a entrar é um inteiro que dá o número de inteiros cuja soma se pretende calcular. Português Proc soma() Decl comp, k, I, soma Como Inteiro comp = Val(CxEntrada(“Somar quantos números inteiros?”)) soma = 0; Para k = 1 até comp I = Val(CxEntrada(“Próximo Número a somar”)) soma = soma + 1 Seguinte k CxMsg(“ A soma é : “ & soma) Fim Proc Inglês Sub soma() Dim comp, k, I, soma As Integer comp = Val(InputBox(“Somar quantos números inteiros?”)) soma = 0; For k = 1 TO comp I = Val(InputBox(“Próximo Número a somar”)) soma = soma + 1 Next k MsgBox(“ A soma é : “ & soma) End Sub Obs. Quando o V.Basic executa um Ciclo Para ... Seguinte, [For ... Next] segue os seguintes passos: 1. Coloca o contador igual a início 2. Testa para ver se contador é maior do que o Fim. Se for, o V. Basic sai do Ciclo. 3. Corre as instruções 4. Incrementa o contador de 1, ou de incremento, caso tenha sido especificado 5. Repete os passos 2 a 4.

Page 29: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 27

10.3.3 Instrução de Repetição Para Cada ... Seguinte Sintaxe: Português Para Cada elemento Em grupo instruções Seguinte elemento Inglês For Each elemento In groupo Instruções Next elemento É semelhante ao Ciclo Para Seguinte, mas repete um conjunto de instruções para cada elemento de uma colecção de objectos ou num array, em vez de repetir as instruções um número de vezes especificado. Isto é de especial ajuda se não se sabe quantos elementos estão no grupo. É de utilização muito interessante na criação de macros para tratamento de dados em folhas. Exemplo: Português Proc IncrementarSelecçãoCorrente() ‘Assigna uma referência de objecto ( a selecção actual) a uma variável

DefRef Intervalo_a_Incrementar = Selecção ‘C refere-se a uma célula particular durante cada iteração do Ciclo Para Cada C Em Intervalo_a_Incrementar Se ForNumérico(C.Valor) Então C.Valor = C.Valor + 1 Fim Se Seguinte C Fim Proc

Page 30: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 28

Inglês Sub IncrementarSelecçãoCorrente() Set Intervalo_a_Incrementar = Selection ‘C refere-se a uma célula particular durante cada ciclo do loop For Each C In Intervalo_a_Incrementar If IsNumeric(C.Value) Then C.Value = C.Value + 1 End If Next C End Sub Obs. Quando o V.Basic executa um Ciclo Para Cada ... Seguinte [For Each ... Next], segue os seguintes passos: 1. Define o elemento nomeando o primeiro elemento no grupo (desde que haja pelo menos um elemento). 2. Corre as instruções 3. Testa para ver se elemento é o último no grupo. Se for, Visual Basic sai do Ciclo. 4. Define elemento nomeando o próximo elemento no grupo. 5. Repete os passos 2 até 4.

Page 31: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 29

Problema: Supondo que uma empresa tem um grupo de vendedores, em números de 20 a quem são pagas comissões nas vendas que ultrapassam 2/3 da média das vendas efectuadas pelo grupo. Pretende-se um programa que leia o valor das vendas de cada um dos vendedores e imprima o número de referência de cada vendedor que alcançou e o valor das vendas por ele efectuadas. Algoritmo Comissões

lê os valores das rendas de cada vendedor ( Venda1, Venda2, ..., Venda20 );

calcular o nível da comissão ( Nível );

se Venda1 > Nível então imprime 1 e Venda1 se Venda2 > Nível então imprime 2 e Venda2 ... se Venda20 > Nível então imprime 20 e Venda20

Fim Comissões A resolução do problema simplifica-se se for considerado em vez de Venda1, Venda2, ..., Venda20 uma única variável de tipo estruturado ou Tabela ou Array. Uma variável de tipo estruturado ou Array é caracterizada por ter mais que uma componente; cada componente de uma informação do tipo estruturado é uma variável que pode ser do tipo simples ou estruturado. Por exemplo, uma tabela (Array em Inglês) é um conjunto ordenado de variáveis todas do mesmo tipo. Para utilizar uma tabela no exemplo anterior, seria como utilizar a noção de índice vendai em que vendai designa o valor das vendas efectuadas pelo vendedor i. O esquema do programa ficaria:

11. Variáveis de Tipo estruturado ou Arrays

Page 32: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 30

Algoritmo Comissões

lê Vendai ( para i de 1 a 20 );

calcula o nível da comissão ( Nível);

para i variando de 1 a 20 : - se Vendai > Nível então imprime ( i, Vendai ); Fim Comissões Na linguagem Visual Basic, a declaração duma variável desse tipo é feita do seguinte modo: Português Decl Nome_de_Variável (elementos) Como Tipo de dados Teríamos, no nosso caso: Decl Venda(1 To 20) Como Moeda Inglês Dim Nome_de_Variável (elementos) As Tipo de dados Teríamos, no nosso caso: Dim Venda(1 To 20) As Currency Para acedermos ao conteúdo de um dos elementos do array, bastará indicar o nome da variável e o respectivo número do elemento entre parêntisis. Exemplo: Venda(10), acederia ao valor de vendas do 11º vendedor. Atenção! Por defeito o 1º elemento, caso não seja explicitado na instrução de declaração da variável é o Zero (0).

Page 33: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 31

Versão final do programa Português Proc Comissoes() Const Vendedores = 20 Decl Venda(1 To 20) Como Moeda Decl Soma, Nível Como Moeda ‘Início do Tratamento Soma = 0 ‘ Inicializa valor do total de vendas a 0 Para i = 1 até Vendedores ‘ soma as vendas dos 20 vendedores Venda(i) = Val(CxEntrada(“Insira as vendas do “& i & “º vendedor”)) Soma = Soma + Venda(i) Seguinte Nível = 2/3* Soma / Vendedores ‘ nível de comissão Para i = 1 até Vendedores Se Venda(i) > Nivel Então CxMsg(“Vendedor “ & i & Venda(i) Fim Se Seguinte i Fim Proc Inglês Sub Comissoes() Const Vendedores = 20 Dim Venda(1 To 20) As Currency Dim Soma, Nivel As Currency ‘Início do Tratamento Soma = 0 ‘ Inicializa valor do total de vendas a 0 For i = 1 TO Vendedores ‘ soma as vendas dos 20 vendedores Venda(i) = Val(InputBox(“Insira as vendas do “& i & “º vendedor”)) Soma = Soma + Venda(i) Next Nivel = 2/3* Soma / Vendedores ‘ nível de comissão For i = 1 TO Vendedores If Venda(i) > Nivel Then MsgBox(“Vendedor “ & i & Venda(i) End If Next i End Sub

Page 34: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 32

11.1 Alterar o Tamanho de Um Array em Run-Time (Arrays Dinâmicos)

Uma Tabela ou Array, pode ter tamanho fixo ou variável, podendo inclusivamente ser redimensionada no decorrer do procedimento, utilizando o statement ReDim. Para que posamos redimensionar um array, faremos: Português Decl ArrayDinamico() como tipo de dados .... ReDim ArrayDinamico (X + 1) como tipo de dados Inglês Dim ArrayDinamico() como tipo de dados .... ReDim ArrayDinamico (X + 1) como tipo de dados Trata-se duma facilidade extremamente interessante, quando não conhecemos aquando da codificação do programa, de quantos elementos um array irá necessitar. Isso permite evitar que criemos arrays desnecessariamente grandes, obrigando a estabelecer tamanhos máximos à partida. Obviamente que esta situação permite uma gestão de memória mais eficiente.

Page 35: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 33

11.2 Arrays Multidimensionais Tabelas com um único índice, que requerem portanto apenas um valor para seleccionar o elemento da tabela, são chamados vectores ou tabelas unidimensionais. Há no entanto tabelas com mais que um índice, no caso de terem dois índices são chamadas matrizes ou tabelas bidimensionais.

Tabela Unidimensional ou Vector

1 2 3 4 5 6 7 8

x[1] x[8] Exemplo: Português xi ( i = 1, 2, ..., 8 ) Decl X(1 To 8) Como Inteiro X(5)= 3 Inglês xi ( i = 1, 2, ..., 8 ) Dim X(1 To 8) As Integer X(5)= 3

Tabela Bidimensional ou Matriz

j=1 j=2 j=3 j=4

i=1

i=2

i=3

A(1,4)

A(3,3) Exemplo: Português aij ( i = 1, 2, 3 ; j= 1, 2, 3, 4 ) Decl A (1 To 3, 1 To 4) Como Cadeia A ( 2, 3 ) = “F” Inglês aij ( i = 1, 2, 3 ; j= 1, 2, 3, 4 ) Dim A (1 To 3, 1 To 4) As String A ( 2, 3 ) = “F”

Page 36: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 34

Tabela Tridimensional

j=1j=2

j=3i=1 i=2 i=3 B(3,3,1)

B(3,3,3)

j

i

k

k=1

k=2

k=3

Exemplo: Português bijk ( i, j, k = 1, 2, 3) Decl B (1 To 3, 1 To 3, 1 To 3) Como Simples B ( 2, 3, 1 ) = 4.5 Inglês bijk ( i, j, k = 1, 2, 3) Dim B (1 To 3, 1 To 3, 1 To 3) As Single B ( 2, 3, 1 ) = 4.5

Page 37: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 35

Exemplo: Programa para calcular o produto de duas matrizes quadradas, 3x3, A e B sendo C a matriz resultante. Português Proc Matrizes () Decl a(1 To 3, 1 To 3), b(1 To 3, 1 To 3) Como Simples Decl i, j, k Como Inteiro Decl soma Como Simples ‘Aceitar os elementos da matriz A Para i = 1 até 3 Para j = 1 Até 3 a(i, j)=Val(CxEntrada(“Valor do elemento “ & I &” , “ & j, “Matriz A”) Seguinte j Seguinte i ‘Aceitar os elementos da matriz B Para i = 1 Até 3 Para j = 1 Até 3 b(i, j)=Val(CxEntrada(“Valor do elemento “ & I &” , “ & j, “Matriz B”) Seguinte j Seguinte i ‘Cálculo do produto das 2 matrizes Para j = 1 Até 3 Para k = 1 Até 3 soma = 0 Para i = 1 Até 3 soma = soma + a( j, i ) * b( i, k ) c( j, k )= soma Seguinte I Seguinte k Seguinte j ‘Mostra matriz resultante Para i= 1 Até 3 Para j = 1 Até 3 CxMsg(“a(“ & I & “,” & j & “) - “ & c( i, j ) ) Seguinte j Seguinte I Fim Proc

Page 38: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 36

Inglês Sub Matrizes () Dim a(1 To 3, 1 To 3), b(1 To 3, 1 To 3) As Single Dim i, j, k As Integer Dim soma As Single ‘Aceitar os elementos da matriz A For i = 1 To 3 For j = 1 To 3 a(i, j)=Val(InputBox(“Valor do elemento “ & I &” , “ & j, “Matriz A”) Next j Next i ‘Aceitar os elementos da matriz B For i = 1 To 3 For j = 1 To 3 b(i, j)=Val(InputBox(“Valor do elemento “ & I &” , “ & j, “Matriz B”) Next j Next i ‘Cálculo do produto das 2 matrizes For j := 1 To 3 For k = 1 To 3 soma = 0 For i = 1 To 3 soma = soma + a( j, i ) * b( i, k ) c( j, k )= soma Next I Next k Next j ‘Mostra matriz resultante For i= 1 To 3 For j = 1 To 3 MsgBox(“a(“ & I & “,” & j & “) - “ & c( i, j ) ) Next j Next I End Sub

Page 39: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 37

Podem combinar-se variáveis de tipos diferentes para se criarem tipos de dados próprios. Tipos de dados definidos pelo utilizador são úteis, sempre que se pretende criar uma única variável que armazene vários pedaços de informação relacionada, o que normalmente toma o nome de Registo ou Estruturas. Para se criar um tipo de dados definido pelo utilizador, usa-se o statement Tipo [Type]]]], que deve ser colocado no cimo de um módulo Visual Basic. Estes tipos de dados são sempre públicos. Exemplo: Pretende-se criar uma variável que permita registar informação sobre um computador. Português ‘Declarações Tipo InfSistema CPU Como variante Memoria Como Longo PlacaGrafica Como Cadeia Custo Como Moeda Data_de_Compra Como Variante Fim Tipo Num determinado módulo, podem criar-se variáveis locais deste tipo, fazendo: Decl MeuSistema Como InfSistema, TeuSistema Como InfSistema Inglês ‘Declarações Type InfSistema CPU As variant Memoria As Long PlacaGrafica As String Custo As Currency Data_de_Compra As Variant End Type Num determinado módulo, podem criar-se variáveis locais deste tipo, fazendo: Dim MeuSistema As InfSistema, TeuSistema As InfSistema

12. Tipos de Dados Criados pelo Utilizador

Page 40: EXCEL Visual Basic - estgv.ipv.pt · III - Excel – Visual Basic Pág. 5 4.2 Tipo de Informação Caracter - Character Tem como gama de valores o conjunto de caracteres existentes

VISUAL BASIC DO EXCEL

Informática II – Cap. III - Excel – Visual Basic Pág. 38

Para assignar e retornar valores dos elementos destas variáveis, indica-se o nome da variável de tipo e o nome da variável separadas por ., tal como se acede a propriedades dum objecto. Exemplo: Português MeuSistema.CPU = “Pentium IV” Se MeuSistema.data_de_Compra > #1/1/2002# Então ..... Fim Se Inglês MeuSistema.CPU = “Pentium IV” If MeuSistema.data_de_Compra > #1/1/2002# Then ..... End If Pode também assignar-se uma variável de tipo estruturado a outra, desde que do mesmo tipo definido pelo utilizador. Exemplo: TeuSistema = MeuSistema Uma variável de tipo definido pelo utilizador, pode conter qualquer tipo de dados em cada elemento.