Escolar Documentos
Profissional Documentos
Cultura Documentos
O VBA constitui uma ferramenta poderosa nas mãos de programadores experientes, mas
pode, ao mesmo tempo, ser muito útil a qualquer utilizador, mesmo inexperiente.
De facto, no dia a dia da utilização destas aplicações, defrontamo-nos com a
necessidade de repetir a mesma tarefa várias vezes ao dia ou, de em certas ocasiões, ter
que repetir uma determinada tarefa uma série de vezes de seguida. Seja escrever ou
formatar um certo texto, seja executar uma série de comandos ou escolher opções de
menus, seja ainda realizar a formatação complexa de um documento, são inúmeras as
ocasiões em que dava jeito poder automatizar essas tarefas repetitivas.
É aqui que entra o VBA, permitindo a construção daquilo que se designa vulgarmente
por macros.
Do lado esquerdo na Figura 4 podem-se ver duas janelas, a primeira das quais é
designada por Explorador de Projectos e que serve para mostrar o conteúdo do projecto
VBA actual. Um projecto em VBA inclui um ficheiro duma aplicação Office (como, por
exemplo, uma folha de cálculo do Excel) e todos os ficheiros VBA associados, incluindo os
próprios macros e eventuais user forms (janelas de interface próprias utilizadas pelos
1 Public Sub v e r i f i c a V a l o r ()
End I f
1Sobre o assunto, ver Secção 8.
2A distinção entre funções e procedimentos (ou sub-rotinas) será abordada mais à frente.
Não nos vamos de momento preocupar com os detalhes do código que constitui o
macro. Basta verificar que, em 1o lugar, é constituído por uma linha de cabeçalho que
especifica o tipo de macro (neste caso, uma sub-rotina (Sub) ou procedimento) e o seu
nome (verificaValor). O corpo do macro é composto pela estrutura de controle
condicional (If...Then3) que vai verificar se o conteúdo da célula B24 é ou não maior
que o valor 200. Caso essa condição seja verdadeira, o macro apresentará uma mensagem
no ecran dizendo que o valor máximo foi excedido. Finalmente, o macro é terminado com
uma linha contendo "End Sub".
O que este simples macro faz, portanto, é verificar o conteúdo de uma célula específica
da folha de cálculo e avisar o utilizador caso o valor nela contido ultrapassar um valor pré-
determinado. Sempre que for necessário fazer esta verificação, bastará invocar a
combinação de teclas que tenha sido associada a este macro.
É verdade que esta verificação poderia ter sido realizada colocando numa célula uma
fórmula contendo a função standard do Excel IF. Mas suponhamos agora que se pretende
algo mais complicado, por exemplo, fazer essa verificação num conjunto de células e
apenas desencadear o alarme caso mais do que duas dessas células ultrapassem o limite
estabelecido. A sub-rotina modificada poderia ser algo como:
Listing 2: verificaGama - exemplo de função definida pelo utilizador
3 c=0
4 For i = 1 To 5
6 c=c+ 1
7 End I f
8 Next
declarações necessárias num bloco a colocar no início, para mais fácil manutenção do
programa.
Em VBA, existem duas formas de declaração de variáveis: explícita e implícita. A
declaração explícita exige a utilização da instrução específica
Dim ... As (Dimensionar ...
Como). Por exemplo, a
instrução
cria (declara) uma variável com o nome Preço e do tipo Integer, ou seja, dimensio-
nada para receber dados do tipo integer (inteiro simples7).
A declaração implícita resume-se a utilizar pela primeira vez uma variável sem qual-
quer declaração explícita prévia, dando-lhe um nome e atribuindo-lhe um valor. O VBA
criará automaticamente a variável do tipo pretendido.
Esta segunda forma de declarar variáveis tem, a despeito da sua simplicidade, um
problema grave: é possível, por distracção, criar uma variável nova indesejada, quando
o que se pretendia era apenas escrever o nome de uma variável já existente. Suponha,
por exemplo, que havia criado uma variável "Distancia" mediante a instrução8:
7
A discussão dos vários tipos de dados suportados pelo VBA será feita na Secção 3.3 na
próxima página.
8Como se verá na secção 3.4 na página 17, esta instrução guarda na variável "Distancia"o valor
1260
Distancia=1260
Como é a primeira vez que o VBA encontra esta palavra ("Distancia"), partirá do
princípio que se trata de uma variável ainda por declarar e tratará de a criar, substituindo-
se ao programador. Dar-lhe-á o nome "Distancia" e dimensiona-la-á de forma a poder
guardar inteiros simples, já que é essa a utilização sugerida na instrução.
Agora suponha que adiante no programa, por engano, escrevia "Distncia" ao referir-se
à variável em causa. O VBA não emitirá nenhum alerta, já que aceitou tranquilamente
"Distncia" como uma nova variável. A forma mais prudente de lidar com declarações de
variáveis é, pois, utilizar apenas declarações explícitas, e instruir o VBA para não aceitar
declarações implícitas, gerando uma mensagem de erro apropriada. Para tal, deverá ser
acrescentada a instrução Option Explicit no início do módulo contendo o macro.
Variável = Valor
temp = idade
Por expressão entende-se um valor numérico, uma cadeia de caracteres, ou uma ex-
pressão cujo resultado seja um destes tipos de valores.
Caso, por exemplo, seja necessário usar ao longo de um macro um mesmo factor em
vários cálculos, faz sentido definir esse factor como constante e usar o seu nome em vez
dele:
Sempre que seja subsequentemente necessário utilizar este factor numa expressão,
usar-se-á Factor em vez de 1.347.
• Os seus "métodos" especificam o que pode ser feito com ele: acelerar, travar,
mudar de direcção, etc;
4.1.1 Propriedades
As propriedades de um objecto são as suas características físicas. Como na vida real, cada
objecto possui características próprias ou propriedades, que podem ser quantificadas ou
especificadas, como sejam as suas dimensões ou o tipo de letra que usa. A cada objecto
está associada uma lista de propriedades a que é possível atribuir valores, determinando a
sua aparência, localização e outros detalhes. Pode-se então dizer que as propriedades de
um objecto definem a forma como ele se apresenta ou se comporta.
Diversos objectos podem partilhar a mesma propriedade. Essa propriedade, no
entanto, pode afectar esses objectos de forma diferente.
4.1.2 Métodos
Os métodos traduzem acções que um macro pode realizar sobre os objectos. Por exemplo,
aplicar o método Save ao objecto ActiveDocument implica desencadear o processo de
salvaguardar o conteúdo do documento activo num determinado ficheiro. Aplicar o
método Clear a um objecto da classe ListBox terá como consequência a eliminação de
todas as linhas nele contidas. A cada classe de objectos é possível aplicar um determinado
conjunto de métodos.
Para vermos como um método é aplicado a um objecto, vamos considerar o objecto
Worksheet, que representa uma folha de cálculo do Excel. Se pretendermos que o nosso
macro mova essa folha para uma nova posição dentro do Livro de Trabalho (Workbook ), ele
deverá aplicar o método Move a esse objecto, usando a seguinte sintaxe:
Worksheet.Move([Before][, After])
4.1.3 Eventos
Os eventos são acções que, uma vez exercidas sobre um objecto, implicam a
possibilidade de ocorrer uma resposta automática por parte dele. Basicamente, um
evento é algo que acontece a um objecto. Por exemplo, a abertura de uma folha de um
livro de trabalho (workbook ) em Excel é um evento. A inserção de uma nova folha no
livro de trabalho é
outro exemplo de evento.
Para que um objecto possa reagir a um dado evento deverá existir, previamente pro-
gramado, um procedimento especial, chamado event handler, que vai especificar o que
fazer caso esse evento ocorra. Sem isso, o objecto detectará esse acontecimento mas não
saberá o que fazer. Nenhuma resposta será produzida.
associado a esse objecto (command1 ) um event handler adequado, o objecto será já capaz
de responder ao evento e produzir o resultado desejado. Neste caso, esse resultado deverá
ser efectuar os cálculos necessários para concluir se o número introduzido é ou não primo
e apresentar essa conclusão no rótulo lbl2.
Application.ActiveWindow
Application.ActiveWindow.ActiveCell.Font.Name
ActiveCell.Font.Name
Se quisermos utilizar esta propriedade para mudar o tipo de letra da célula activa,
utilizaremos então uma instrução como a seguinte10:
ActiveCell.Font.Name = "Helvetica"
Se, ao contrário, quisermos obter o valor de uma dada propriedade, a instrução a usar
será do tipo:
variavel = Objecto.Propriedade
Para obtermos, por exemplo, o conteúdo da célula activa da folha de cálculo, a ins-
trução correcta seria:
conteudo = ActiveCell.Value
Worksheets("Leituras").Activate
Workbooks.Open("Dados.xls")
Muitas vezes, os argumentos que se podem fornecer a um método são opcionais. Por
exemplo, a instrução abaixo adiciona (insere) uma nova folha de cálculo imediatamente
antes da folha com o nome "Dados_Jan":
Worksheets.Add Before:=Worksheets("Dados_Jan")
No entanto, caso seja omitido o argumento Before, a nova folha será inserida antes
da folha de cálculo activa. É esse o comportamento por defeito do método Add.
4.3.1 MsgBox
A função MsgBox permite apresentar no ecran uma Caixa de Mensagem (Msg Box ). Trata-
se de uma pequena janela contendo um mensagem, pelo menos um botão de co- mando e
eventualmente um pequeno desenho (ícone) ilustrativo do tipo de mensagem. Na Figura
12 encontra-se um exemplo de uma destas janelas.
Figura 12: Exemplo de MsgBox
Assim, para obter a MsBox da Figura 12 na página anterior o valor a utilizar para
o parâmetro características seria obtido somando 3 valores, um de cada coluna da Tabela
3, cada um deles especificando uma das características (Botões de Comando, Ícone e qual
o botão com o "focus"11):
1 + 16 + 0 = 17
Desta maneira, o valor devolvido pela função será guardado (atribuído) em Variável,
podendo depois ser avaliado por instruções seguintes.
4.3.2 InputBox
A função InputBox permite apresentar ao utilizador uma mensagem com uma questão,
recolhendo ao mesmo tempo uma string contendo a sua resposta. Assim, ao contrário da
função MsgBox (Secção 4.3.1 na página 25), esta função produz um resultado do tipo string
e não do tipo integer.
12
Ao contrário da MsgBox, neste caso os dois botões são fixos. Por outro lado, a tecla ESC
tem o mesmo comportamento.
4.3.3 Forms
Como vimos no início da Secção 4 na página 19, uma interface gráfica (em terminologia
VBA, uma DialogBox ) é construída dispondo os objectos adequados (genericamente
designados por controlos) sobre uma janela especial, a form. Efectivamente uma form é
utilizada como um contentor para outros objectos gráficos. Um objecto da classe User-
Form pode ser criado no Editor do VBA através do Menu "Insert/User Form". Esse
processo será visto em detalhe na Secção 8 na página 56.
A seguir são apresentadas algumas das principais propriedades que podem ser
configuradas numa Form:
Nas próximas secções, referiremos com algum detalhe os controlos de uso mais comum
na construção de dialogBoxes em VBA. Estes são os objectos que mais frequentemente são
colocados numa form.
cmdArranque.Enabled = True
O que fizemos com a instrução acima foi atribuir o valor booleano (lógico) True à
pro- priedade Enabled 13 do botão de comando cmdArranque. Estamos, assim, a
tratar uma propriedade como sendo uma variável. De facto, uma propriedade pode ser
considerada como uma variável especial.
4.3.5 Rótulos
Os rótulos, também designados por etiquetas (label ) são usados para apresentar texto na
interface. Mais uma vez, a propriedade mais utilizada é a propriedade Caption, que
permite especificar o texto a apresentar. Este controlo é usado não só para apresentar
informação estática, que é escolhida na fase de concepção da interface, como também
informação dinâmica, como seja a apresentação de resultados:
Enquanto que os rótulos (Label ) são utilizados pelo programa para aparesentar
informação ao utilizador, já as caixas de texto (Text Box ) são maioritariamente usadas
para permitir a leitura de informação pelo programa.
13Esta propriedade permite controlar o acesso do utilizador ao botão de comando.
Val() Retorna como valor numérico um número contido dentro duma string
Str() Retorna uma string representando um número
Vamos supor que um macro precisa de calcular o peso total à custa de dois valores
introduzidos pelo utilizador através de duas TextBox. A tentação seria usar a instrução:
No entanto, o que a propriedade Text das TextBox contem é apenas texto, ainda que contendo
algarismos. Para extrair a informação numérica de dentro do texto, haverá que utilizar a função
Val():
Possuem também uma propriedade Value que, neste caso, pode apresentar os seguintes
valores:
0 não activada
1 activada
2 não disponível
O texto a inserir junto de cada caixa de verificação deve ser especificado mediante a
propriedade Caption.
listbox.AddItem elemento
ou
Listbox.RemoveItem posição
5.1.1 If...Then...Else
Figura 18: Estrutura de controlo condicional If...Then...Else
1 I f condicao Then
2 [ in s t r u c o e s ]
3 Else
4 [ in s t r u c o e s alternativas ]
5 End I f
Quando numa estrutura condicional não existe qualquer acção a executar quando a
condição seja falsa, usa-se uma variante simplificada, a If...Then. O seu diagrama está
descrito na Figura 19 na página 35. A sua sintaxe será então:
1 I f condicao Then
2 [ in s t r u c o e s ]
3 End I f
Nesta 2a variante, quando a acção a realizar no caso a condição ser verdadeira puder
ser executada com apenas uma instrução, é possível utilizar a seguinte sintaxe
simplificada, sem o delimitador End If :
Dos primeiros seis operadores não haverá muito a dizer. Já do And e do Or haverá
alguns detalhes a esclarecer:
Basta que quer Expr1 quer Expr2 seja falsa, para a expressão ser falsa
Basta que quer Expr1 quer Expr2 seja verdadeira, para a expressão ser ver-
dadeira
2 Accao1
4 Accao2
5 Else If condicao 3 Then
6 ...
7 Else
8 AccaoN
9 End If
Esta estrutura condicional permite a selecção de uma entre várias alternativas mu-
tuamente exclusivas. As instruções que se seguem à palavra reservada Else (aqui re-
presentadas por "AcçãoN") serão executadas apenas se nenhuma das condições se tiver
verificado.
Else If
5 Else If
9
Else If
Else If
10
11 Else
É possível imbricar um qualquer número de blocos ElseIf dentro de uma dada estru-
tura condicional.
Analizando esse fluxograma, pode-se observar que tudo roda à volta do teste a uma
condição, descrita como condição de funcionamento. Se a condição for verdadeira na
altura em que o teste é realizado, as instruções que compõem o chamado corpo do ciclo
serão executadas, após o que novo teste à condição será efectuado. Enquanto a condição
se verificar ser verdadeira, o programa não sairá deste ciclo. Na 1a vez em que a condição
se mostrar falsa, o ciclo terminará e o programa poderá continuar com as instruções
seguintes.
Chama-se corpo do ciclo ao conjunto de instruções que serão executadas em cada
iteração (repetição) do ciclo. Esse conjunto pode incluir qualquer número de instruções e
de qualquer tipo, mesmo outras estruturas repetitivas. Neste último caso, estaremos
perante o que se designa por ciclos imbricados ou embutidos, que serão tratados em
detalhe na Secção 5.2.5 na página 44.
A sintaxe em VBA desta estrutura de controle é a seguinte:
1 Do While condicao
2 [ in s t r u c o e s ]
3 Loop
A segunda variante é muito semelhante à primeira. A grande diferença diz respeito à
condição de controle. Neste caso, temos a chamada condição de termo (ou de fim) o que
faz com que o ciclo funcione enquanto a condição for falsa ou, por outras palavras, até que
a condição de termo seja verdadeira (Figura 22).
A sintaxe da variante Do...Until será então:
1 Do
2 [ in s t r u c o e s ]
3 Loop Until condicao
Como se pode deduzir do atrás dito, é possível transformar uma estrutura Do...While
numa Do...Until desde que se substitua a palavra While pela Until e se negue a condição
de controlo. Escolher uma ou outra estrutura de controlo depende, no fundo, do
jeito
3 ’ Corpo do Cic lo
4 co ntador = co ntador + 1
5 Loop
Decorrendo do que vimos na secção anterior, torna-se claro que é igualmente possível
construir este ciclo usando a estrutura Do..Until.
Há que ter em conta as seguintes questões na construção de um ciclo controlado por
contador usando as estruturas de controlo Do...While ou Do...Until :
• Inicializar a variável contadora
Exemplo
1 For co ntador = v a l o r _ i n i c i a l To va l o r _ f in a l
2 [ in s t r u c o e s ]
3 Next
14Por sua vez, um workbook é também um objecto. Um objecto pode assim ser ele próprio uma
colecção de objectos.
O ciclo exterior é controlado por uma sentinela, no caso qualquer valor inteiro não
positivo. É um exemplo de sentinela constituído não por um valor específico mas por
uma gama de valores possíveis. O ciclo interior é claramente controlado por contador,
funcionando tantas vezes quantas o valor do inteiro cujo factorial se pretende calcular.
nome_vector
(indice)
Exemplos:
15Épossível forçar que os índices dos vectores comecem do valor 1 usando a directiva Option
Base 1.
Os elementos de um vector não têm que ser inteiros, nem sequer valores numéricos.
Na Figura 27 na página precedente é representado um vector contendo strings (texto).
Considerando o vector como armazenado os nomes dos membros de uma equipa de
futebol, os sucessivos valores do índice podem ser vistos como os correspondentes
números das suas camisolas. Note-se que estamos, neste caso, a forçar os valores do índice
a iniciar em 1.
Exemplos:
16
Adicionalmente, a instrução Dim atribui valores iniciais a todos os elementos do vector
(zeros no caso de vectores numéricos e strings nulas no caso de vectores alfa-numéricos).
Dim notas(30) As
Single Dim
nomes(100) As
String
Nota: num_elementos não se refere ao valor máximo que a variável índice pode
assumir (7, no caso do vector var_Multipla) mas sim ao número de elementos do vector
(8, neste caso). Por este processo, a declaração do limite inferior faz-se de forma implícita:
por defeito assume-se como limite inferior do índice o valor zero (ou 1 se tal for
especificado mediante a instrução Option Base 1 ).
Uma forma alternativa de utilizar a instrução Dim para declarar vectores implica a
utilização da palavra reservada To, permitindo especificar o menor e o maior valor que o
índice pode assumir:
Dim nome_vector(menorIndice To maiorIndice) As Tipo
Exemplos:
12
var = vector(indice)
2 ’ L i st a de i n s t r u c o e s
3 Nome = r e s u l ta d o
4 End Function
Repare-se que para além das diferenças óbvias no cabeçalho e no delimitador final em
relação às sub-rotinas estudadas atrás, verifica-se o seguinte:
1. A seguir ao nome da função e entre parênteses encontra-se uma lista de
argumentos, através dos quais a função vai receber as informações essenciais à
realização do seu trabalho.
2. O resultado dos cálculos efectuados será entregue à fórmula ou expressão
que invocou a função, depositando-o no seu próprio nome, como se este fosse
uma variável.
Atentemos na seguinte fórmula:
= 10 * sin(angulo)
Para calcular a fórmula, ir-se-á multiplicar por 10 o resultado fornecido pela função
standard sin. Esta, por sua vez, para poder fornecer o resultado deverá ter recebido a
informação de qual o ângulo (neste caso em radianos) de que se quer calcular o seno.
Quando a função termina o seu trabalho, deixará o resultado do seu cálculo no lugar que
ocupava na fórmula.
Figura 29: Funções como caixas pretas
Para o utilizador da função, não interessa conhecer o seu funcionamento interno, mas
apenas qual a informação que lhe tem que fornecer e qual o tipo de resultado esperado.
Assim sendo, pode dizer-se que do ponto de vista do utilizador da função, ela se comporta
como uma caixa preta, à qual é fornecida informação e que, com base nela, produz um
resultado (Figura 29 na página anterior).
Observe-se que esta função possui dois parâmetros de entrada, venda e custo,
através dos quais receberá os dados correspondentes. Note-se ainda que o resultado da
expressão que calcula a margem de lucro é atribuído directamente ao próprio nome da
função. É esse o processo pelo qual uma função consegue fornecer o resultado do seu
trabalho à entidade que a invocou.
Esta função poderá ser utilizada em qualquer fórmula contida numa célula da folha de
cálculo, das mesma maneira que qualquer das funções pré-existentes o seria. Um exemplo
de uma fórmula utilizando esta função seria a descrita na Figura 30.
Figura 30: Utilização da função margemLucro numa fórmula
macro, calcular o
17
Claro que só as funções do Excel que não se encontram duplicadas no VBA podem ser
acedidas por meio da propriedade WorsheetFunction.
valor médio de uma gama de células (identificada pelo nome "Dados") poderia ser
usada a seguinte instrução:
med =
Application.WorksheetFunction.Average(Range("Dados"))
Esta instrução permite aceder à função standard Average do Excel, à qual é fornecido
um objecto do tipo Range, representando a gama de células descritas sob o nome
"Dados".
Sintaxe:
Workbooks.Open Nome_do_ficheiro
Exemplo:
Workbooks.Open "C : \Documentos\Excel\Dados.xls"
Os métodos Save e Close são utilizados de forma similar para salvaguardar o conteúdo
dum ficheiro e para o fechar, respectivamente.
Worksheets(2)
Worksheets("Custos")
Workbook("Dados 2007").Worksheets("Custos").Activate
Sintaxe:
Worksheet.Copy [Position]
Exemplo:
Worksheets(2).Copy After:=Worksheets(3)
O exemplo anterior faz uma cópia da 2a folha de cálculo e insere-a a seguir à 3a.
O método Move usa uma sintaxe idêntica para mover uma determinada folha de
cálculo para outra posição.
Sintaxe:
Worksheet.Add [Position]
Também aqui o argumento Position é opcional. Se for omitido, a nova folha de
cálculo será inserida imediatamente antes da folha activa.
Exemplo:
Worksheets.Add After:=Worksheets("Medidas")
Sintaxe 1:
Worksheet.Range(Nome)
Sintaxe 2:
Worksheet.Range(Celula1, Celula2)
Exemplos:
Range("C5").Value = 100
Range("D1","D10").Value = 0
Worksheets(3).Range("Dados").ClearContents
O 1o exemplo guarda o valor 100 na célula C5. O 2o exemplo atribui o valor zero a
todas as células da gama D1 a D10. Nestes dois exemplos é utilizada a propriedade
Value dos objectos Range que permite conhecer ou modificar o seu valor. No 3o
exemplo limpa-se o conteúdo das células da gama "Dados" da 3a folha de cálculo,
mediante a aplicação do método ClearContents.
Caso queiramos identificar apenas uma célula podemos também utilizar o método
Cells.
Sintaxe:
Objecto.Cells(Linha,Coluna)
19Atribuídos em Excel usando o Menu "Insert/Name/Define".
Sintaxe:
Objecto.Rows(Indice)
Objecto.Columns(Indice)
3 Dim i As Integer
4 With gama
Esta sub-rotina recebe como argumentos uma gama de células (um objecto do tipo
Range) e um inteiro especificando o número de linhas a inserir abaixo da última linha
dessa gama. A estrutura With...End...With é muito prática porque permite executar
um conjunto de instruções sobre um determinado objecto, neste caso qualquer
objecto Range que a sub-rotina receba como argumento. Dentro da estrutura
With...End...With omite-se qualquer referência a esse objecto, usando-se apenas os
seus métodos e propri- edades. Assim, .Rows.Count refere-se ao número total de
linhas da gama especificada e .Rows(num_linhas).Row fornece-nos o índice da última
linha dessa gama. O ciclo For...To repete num vezes a aplicação do método Insert à
ultima linha da gama.
Para testar a sub-rotina InsereLinhas, use-se a seguinte rotina de teste:
20Se
o objecto for do tipo Range, os argumentos Linha e Coluna referir-se-ão à linha e à coluna
dentro da gama de células especificada.
21Adaptado de um exemplo contido em [1].
1 Sub in s e r e Te s te ()
Columns(5).ColumnWidth = 15
1. Visualização da Form
1 Exemplo :
2 MinhaForm . Show
Se, em alternativa, se pretender arrancar com a Form mas sem a visualizar nesse
momento, usa-se a instrução Load :
1 Exemplo :
2 Load MinhaForm
2 Dim op As Integer
5 Unload Me
2 usrFrmInput . Show
Unload Me
Numa Tabstrip é usual inserirem-se outros controlos, um pouco como se faria numa
mini-Form ou num quadro. No exemplo da figura, encontram-se três TextBox.
Conforme referido na Secção 4.1, para que um controlo possa reagir a acções
provocadas pelo utilizador, como o "clicar" do rato, é preciso que o programador crie sub-
programas especiais, chamados Event Handlers e que esses sub-programas sejam
associados aos controlos respectivos.
Vamos apresentar dois exemplos de Event Handlers, sub-programas que permitem
especificar o comportamento de controlos em face de certos eventos. Em 1o lugar,
apresentar-se-á o Event Handler da form "UserForm2" para o evento Initialize, que ocorre
quando a form é criada após o arranque do programa:
10
11
Este procedimento vai inicializar os dois separadores do controlo Tabstrip1 com que ele
é criado por defeito, mudando-lhe os nomes para "Civil" e "Informática". De seguida,
acrescenta um terceiro separador e dá-lhe o nome "Electrotecnia". Por fim, são atribuídos a
cada uma das TextBox contidas na Tabstrip1 os conteúdos das três células da folha de
cálculo referentes ao curso referente ao 1o separador.
O próximo procedimento é o Event Handler do controlo Tabstrip1 para o evento
Change que ocorre sempre que alguma alteração ocorre nesse controlo, concretamente,
uma mudança de separador activo.
∗ 100
∗ 100
13
14
∗ 100
16
17
A propriedade Value dos objectos Tabstrip contem um valor numérico inteiro que
traduz qual o separador que está activo. Em função do valor recolhido na variável v, a
estrutura condicional imbricada If...Then...Else irá escolher o conjunto de valores corres-
pondente.
8 Notas finais
Parte da estrutura e alguns dos exemplos apresentados foram inspirados no livro de Paul
McFreddies[1]. Foram ainda reutilizados e adaptados materiais contidos na Sebenta de
Introdução à Computação da minha autoria[2].
Referências
[1] Paul McFredies. VBA for the Microsoft Office System, QUE.