Apontamentos de VBA Texto Introdutório. António Silva

Documentos relacionados
VBA Visual Basic for Applications. APROG - Civil

Programação de Computadores usando VBA

1 - Ambiente de desenvolvimento

FORMAÇÃO DE MICROSOFT EXCEL 2010

O AMBIENTE DE TRABALHO... 2 CRIAR, ABRIR E GUARDAR DOCUMENTOS... 6 EDIÇÃO DE DOCUMENTOS... 7 FORMATAÇÃO DE TEXTO Manual de Word INTRODUÇÃO...

Módulo 1a: Introdução ao Visual Basic for Applications (VBA)

Objectos, Propriedades e Métodos

Visual Basic for Applications

Excel. Aula Prática n o 6 VBA. 1. Inicie o Microsoft Excel e abra o ficheiro "Excel_6" que se encontra no directório APROG.

Objectos Gráficos 2. APROG (Civil) Aula 5

Macros e Programação VBA

VISUAL BASIC PARA APLICAÇÕES (VBA)

Aplicações de Escritório Electrónico

Módulo 1a: Introdução ao Visual Basic for Applications (VBA) - Eventos, Gráficos e Interfaces gráficas -

Fundamentos Programação

FORMAÇÃO DE MICROSOFT WORD Mário de Almeida Pedro, M. Sc. Janeiro 2014

Manual Prático. Elisabete Aguiar

Desenho/Formas SmartArt

Gestão de Base de dados Formulários

Tutorial de Extensibilidade

Programação em VBA Texto Introdutório

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

EISnt Centro de Formação em Tecnologia

Iniciação à Informática

OpenOffice.org. tutorial apresentação

Objectos Gráficos 1. APROG (Civil) Aula 4. Friday, November 2, 12

APROG. Civil. Programas Básicos. ISEP DEI, Angelo Martins 2006 ISEP DEI, António Silva Programas Básicos

ESCOLA SECUNDÁRIA MANUEL DA FONSECA, SANTIAGO DO CACÉM GRUPO DISICPLINAR - Informática ANO: 10º TICP ANO LECTIVO: 2008/2009 p.1/6

O Ambiente de Trabalho Candy

Escola Profissional Agrícola de Lamego Ano Lectivo 2008 / 2009

Neste exercício, vamos criar uma Folha de Cálculo, onde vamos utilizar alguns Controlos de Formulários.

TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO SISTEMAS DE GESTÃO DE BASE DE DADOS FORMULÁRIOS

Estruturas de Decisão. APROG (Civil) Aula 6

Aula 01 Microsoft Excel 2016

Programação em VBA Texto Introdutório. António Silva

Variáveis Tipos de Dados

Dispor e organizar folhas de cálculo

1 o º ciclo. Índice TUTORIAL

Vantagens da Folha de Cálculo. UFCD 3776 Informática folha de cálculo e base de dados. Formadora: Sónia Rodrigues.

A Professora: Vanda Pereira. Ambiente de Trabalho. Estrutura de uma Folha de Cálculo. Microsoft Office Excel Módulo 1

777 Processador de Texto

UFCD 786 Instalação e configuração de sistemas de bases de dados

MANUAL DE MICROSOFT EXCEL 2003 Sem bichos de sete cabeças

O que é e como funciona o VBA no excel?

ANO LECTIVO 2008/2009. Planificação Médio Prazo. 8º Ano Área de Projecto. Horário Semanal: 1 Bloco de 90 min

ZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011

FORMAÇÃO DE MICROSOFT EXCEL 2010

UFCD 778 Folha de Cálculo Formadora: Sónia Rodrigues

1) Mostrando uma mensagem. 10 exemplos de macros essenciais no Excel. Este conteúdo faz parte da série: Excel VBA Ver 6 posts dessa série

VBA USANDO TABELA DO WORD COMO BANDO DE DADOS

Como construir uma animação em Excel Proporcionalidade Directa. Gráfico da função y = k.x

Para iniciarmos o trabalho se faz necessária a implantação da GUIA DESENVOLVEDOR. Botão Direito do Mouse; Personalizar Faixa de Opções

O que é um programa em Visual Basic?

Variáveis Tipos de Dados. APROG (Civil) Aula 2

Modulo 2 Gestão de Base

INSTALAÇÃO E OPERAÇÃO DE SISTEMAS INFORMÁTICOS

Introdução à Programação. João Manuel R. S. Tavares

Executar uma macro clicando em um botão da Barra de Ferramentas de Acesso Rápido

Estruturas de Controlo Repetitivo. APROG (Civil) Aula 8

GESPOS WINDOWS. Manual do Utilizador GESTÃO DE CORES E TAMANHOS

BMLABEL MANUAL DO UTILIZADOR

Domine o Word Professor: Rafael Henriques

INICIAÇÃO AO EXCEL Renato Albuquerque abril de 2016

Gestão de Base de dados Tabelas e Chaves

AGRUPAMENTO de ESCOLAS Nº1 de SANTIAGO do CACÉM Ano Letivo 2013/2014 PLANIFICAÇÃO ANUAL

Escola Secundária c/ 3º Ciclo de Ferreira Dias. CURSOS PROFISSIONAIS Ano Letivo 2012 / Atividade 2

Introdução à Programação

MANUAL Formação: TIC (Word) Maio a Jul/2011

Tecnologias da Informação e Comunicação

TIC 1 Processamento de Texto UMA INTRODUÇÃO AO PROCESSADOR DE TEXTO MS WORD [André Coutinho]

Exercício 43. Página 51. Conteúdos: Inserção de campos de formulário Inserção de Macros

Microsoft Excel: # 1

Aplicações de Escritório Electrónico

PLANIFICAÇÃO ANUAL. Documento(s) Orientador(es): Programa da disciplina da Direção-Geral de Formação Vocacional

2. Abrir a folha I do ficheiro vendedores_a.xls. Obter as folhas II e III.

Desenvolvendo Aplicações Poderosas com Excel e VBA

Tecnologias da Informação e Comunicação 10º ano INTRODUÇÃO AO EXCEL. Basicamente uma folha de cálculo é uma enorme folha dividida em linhas e colunas.

Tabelas Dinâmicas Excel

Microsoft Excel Ficha prática n. 8

Bertolo Por que Laços no VBA?

w w w. b a l a n c a s m a r q u e s. p t B M G e s t

FORMAÇÃO DE MICROSOFT WORD Mário de Almeida Pedro, M. Sc. Janeiro 2014

Associações de Ficheiros. Mike McBride Tradução: José Pires

Tarefa Orientada 3 Aplic. Manutenção de Produtos Text Box

Operação com processadores de texto 1º Período Instalar, configurar e operar com software de escritório.

Transcrição:

Apontamentos de VBA Texto Introdutório António Silva 2008-12-29 1

.

Conteúdo 1 Introdução 5 2 Conceitos Básicos 5 2.1 O que é um Macro?.............................. 5 2.2 Técnicas de construção dum Macro..................... 5 2.3 Gravação de um Macro............................ 6 2.4 A escrita de um Macro............................ 7 2.5 O editor de VBA............................... 7 2.6 Criação de um Macro............................. 9 2.7 Funções e Sub-rotinas............................ 10 2.8 Exemplo de função definida pelo utilizador................. 11 3 Como trabalhar com Objectos 11 3.1 Propriedades, Métodos e Eventos...................... 12 4 Estruturas de controlo do programa 13 4.1 Estruturas de controlo tradicionais..................... 13 4.1.1 If...Then...Else............................ 13 4.1.2 Do...Loop............................... 13 4.1.3 For...Next............................... 13 4.2 Estruturas típicas do VBA.......................... 14 4.2.1 For Each...Next............................ 14 5 Programação do Excel usando VBA 14 5.1 Como aceder às funções standard do Excel................. 14 5.2 Trabalhar com objectos Workbook...................... 15 5.3 Trabalhar com objectos Worksheet..................... 15 5.3.1 Propriedades de Worksheet...................... 15 5.3.2 Métodos de Worksheet........................ 16 5.4 Trabalhar com objectos Range........................ 16 6 Adicionando uma interface gráfica 18 6.1 Instalação da Form.............................. 18 6.2 Instalação dos Controlos........................... 19 6.3 Incorporação da Form na sub-rotina..................... 22 6.3.1 Como visualizar e terminar uma Form............... 22 6.4 Tratamento de eventos através de Event Handlers............. 23 6.4.1 Como recolher os resultados de uma Form............. 23 6.4.2 Exemplo de aplicação......................... 23 7 Notas finais 25 3

Lista de Figuras 1 Janela de invocação do ambiente de Gravação de Macros......... 6 2 Janela de Gestão de Macros......................... 7 3 Barra de Ferramentas de Visual Basic.................... 7 4 Editor integrado do Visual Basic...................... 8 5 Criação de novo Módulo........................... 9 6 Utilização da função margemlucro numa fórmula............. 11 7 Lista de eventos disponíveis......................... 12 8 Criação de uma Form no VBE........................ 19 9 Objecto da classe Tabstrip.......................... 21 10 A UserForm para Entrada Múltipla de Dados............... 24 4

1 Introdução VBA é um acrónimo que quer dizer Visual Basic for Applications. É uma linguagem de programação que permite acrescentar capacidades adicionais a certo tipo de aplicações informáticas, neste caso, as pertencentes ao Microsoft Office, nomeadamente o Excel e o Word. Permite ainda automatizar a realização de certas tarefas rotineiras nessas aplicações. Como o próprio nome indica, trata-se duma adaptação da linguagem genérica de programação Visual Basic de modo a poder ser utilizada no ambiente específico destas aplicações. Este texto destina-se aos alunos que já possuem alguns conhecimentos quer de programação em Visual Basic quer do gestor de folhas de cálculo Excel. Concretamente, presume-se que já estão capazes de utilizar estruturas de controle (condicional e repetitivo) e que estão familiarizados com os conceitos de função e sub-rotina. 2 Conceitos Básicos É comum utilizadores de programas como folhas de cálculo ou processadores de texto terem de realizar as mesmas tarefas repetidas vezes, como seja formatar de determinado modo uma porção de texto, executar os mesmos cálculos em diferentes partes de uma folha de cálculo, ou ainda executar uma sequência de opções de menus. A solução é automatizar essas tarefas, construindo aquilo que se designa por macros, que não são mais que descrições formalizadas das tarefas que se pretende automatizar. A linguagem utilizada para descrever essas tarefas é precisamente o VBA mas não é obrigatório conhecer esta linguagem para o poder fazer, especialmente quando as tarefas a programar são relativamente simples. Existe um método alternativo de "ensinar" ao computador o que fazer em resposta a um determinado comando e que é tratado na Secção 2.2. 2.1 O que é um Macro? Um macro é um conjunto de instruções (escritas em VBA) que dizem a um programa como o Excel o que fazer para atingir um determinado objectivo. E esse conjunto de instruções pode ser activado mediante uma determinada tecla ou sequência de "clicks" do rato. A cada acção ou comando da aplicação corresponderá uma instrução específica do macro. 2.2 Técnicas de construção dum Macro Existem duas formas de criar um macro. A primeira corresponde a mostrar ao computador o que fazer para conseguir obter o resultado pretendido. O utilizador indica ao programa que se vai entrar num modo de gravação do macro e inicia a execução da sequência de acções que normalmente teria que executar. Quando chega ao fim dessa sequência, indica ao programa que a gravação terminou. Após ter atribuído a essa sequência uma combinação de teclas especial, esse macro estará pronto a ser executado, substituindo assim o conjunto de acções que anteriormente seriam necessárias. 5

Se se investigar, no entanto, o conteúdo desse macro, verificar-se-á que ele é composto por instruções escritas precisamente em VBA. Assim sendo, é fácil de intuir que a forma alternativa de construir um macro será precisamente alinhar essas instruções num editor de texto apropriado. É essa a forma de criar um macro quando o seu âmbito é algo não trivial. 2.3 Gravação de um Macro Quando uma dada operação envolvendo uma série de acções deva ser utilizada frequentemente faz sentido tentar automatizar a sua execução. Para gravar um macro que seja capaz de efectuar essas acções, haverá que invocar o modo de gravação de macros, mediante o Menu "Tools/Macros/Record a New Macro" (em Excel), o que fará aparecer a janela descrita da Figura 1. Nela se pode especificar o nome do macro, a localização em que será armazenado, uma descrição das suas funções e ainda a combinação de teclas (Shortcut key) que será utilizada para arrancar com o macro, uma vez este construído. Figura 1: Janela de invocação do ambiente de Gravação de Macros Após se premir a tecla OK, aparecerá uma pequena janela que permitirá controlar o processo de gravação e dever-se-á dar início à execução das acções que o macro vai substituir. Quando se tiver executado a última acção a incluir no macro, basta dar a indicação de que a gravação terminou. Uma vez tal realizado, esse macro passará a estar disponível mediante a invocação da combinação de teclas especificada anteriormente (no caso da Figura 1, seria Ctrl+Shft+M) e executará, de forma automática, exactamente a mesma sequência de acções que tínhamos realizado manualmente. Em alternativa, mediante a combinação de teclas ALT-F8, pode ser accionada a janela de Gestão de Macros (Figura 2 na página seguinte), onde, entre outras acções, pode ser escolhido o macro a ser executado. 6

Figura 2: Janela de Gestão de Macros 2.4 A escrita de um Macro Ensinar pelo exemplo ao Excel como fazer as coisas é um método expedito de construir um macro, mas tem as suas limitações. Já que um macro não é mais que um programa escrito em VBA, porque não tratá-lo como tal e aceder a seu código, alterando-o de forma a melhorar a sua eficiência ou a corrigir problemas. E já agora, porque não criá-los de raiz, aproveitando todo o poder duma linguagem como o VBA? 2.5 O editor de VBA Para facilitar o acesso às facilidades de gravação e edição de macros, será conveniente tornar visível de forma permanente a barra de ferramentas de Visual Basic (Figura 3). No Excel, isto poderá fazer-se mediante a opção de Menu "View/Toolbars/Visual Basic". Figura 3: Barra de Ferramentas de Visual Basic Para aceder ao editor especializado de Visual Basic (Figura 4 na página seguinte), que se encontra integrado no próprio Excel, basta utilizar o icone adequado na barra de ferramentas ou usar directamente a combinação de teclas ALT-F11. Tornando a premir esta combinação de teclas, voltaremos à nossa folha de cálculo. A este editor especializado é também dado o nome de Integrated Development Environment (IDE) ou 7

Figura 4: Editor integrado do Visual Basic Ambiente de Desenvolvimento Integrado e é semelhante à aplicação autónoma usada para o desenvolvimento de programas em Visual Basic. 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 macros 1 ). Para poder começar a escrever macros usando o VBA é necessário criar um módulo que o possa albergar, o que é conseguido usando a opção de menu "Insert/Module". Como consequência, para além do novo módulo aparecer referido na janela do Explorador de Projectos, será criada uma janela nova onde será possível escrever o código que constitui os novos macros. Se já existir algum módulo criado, bastará seleccionar o módulo pretendido no explorador de projectos, posicionar o cursor na janela correspondente a esse módulo numa área fora de qualquer macro e seleccionar a opção de menu "Insert/Procedure". Aparecerá uma janela própria (Figura 5 na página seguinte) onde será possível dar o nome ao novo procedimento (o conjunto de instruções que constituirá o macro), especificar o 1 Sobre o assunto, ver Secção 6. 8

Figura 5: Criação de novo Módulo tipo de macro que vai ser construído (função ou sub-rotina 2 ) e qual o âmbito da sua utilização (pública ou privada, ou seja, limitada ao ficheiro actual). 2.6 Criação de um Macro Está na hora de construir o primeiro macro em VBA. Suponhamos que se pretende um macro que verifique se o valor presente numa determinada célula é superior a um dado limite e que, caso seja, disso notifique o utilizador. A sub-rotina em que esse macro deverá assentar poderá ter o seguinte conteúdo: Public Sub v e r i f i c a V a l o r ( ) I f C e l l s (2, 2) > 100 Then MsgBox " Valor maximo excedido! " End I f End Sub Neste código podemos observar que a sub-rotina verificavalor utiliza uma estrutura de controle condicional (If...Then) para verificar o conteúdo da célula B2 (que se encontra na 2 a linha e 2 a coluna da folha de cálculo). Caso esse conteúdo ultrapasse o valor limite de 100, será afixada uma janela com a mensagem de alarme adequada. Sempre que for necessário fazer esta verificação, bastará invocar a combinação de teclas que tenha sido associada a este macro. Esta verificação poderia ter sido realizada colocando numa célula uma fórmula contendo a função do Excel IF. Mas suponhamos agora que se pretende algo mais complicado, por exemplo, fazer essa verificação numa gama 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: 2 A distinção entre funções e sub-rotinas, que estará já clara para quem possua os conhecimentos básicos de Visual Basic, será tratada mais à frente. 9

Public Sub verificagama ( ) Dim i As Integer, c As Integer c = 0 For i = 1 To 5 I f C e l l s ( i, 3) > 100 Then c = c + 1 End I f Next I f End I f End Sub c > 2 Then MsgBox c & " v a l o r e s s u p e r i o r e s ao l i m i t e! " A verificação é agora repetida em todas as células de C1 a C5 graças aos serviços da estrutura de controlo repetitivo For...To. É ainda actualizado um contador (baseado na variável c) sempre que o valor contido na célula em análise ultrapassa o limite. Só no caso de o conteúdo desse contador ultrapassar o valor 2 se gerará a mensagem de alarme. Estamos já em posição de perceber a utilidade de construir os macros usando directamente o VBA. Não seria trivial resolver este problema usando apenas fórmulas e certamente impossível executando comandos e seleccionando menus do Excel. A um macro criado usando directamente o VBA pode também ser associada uma combinação de teclas que facilite o seu acesso. Isso pode ser feito através do botão Opções na Janela de Gestão de Macros, invocada mediante ALT-F8. 2.7 Funções e Sub-rotinas As sub-rotinas descritas na secção anterior destinam-se a executar tarefas, neste caso, de vigilância sobre os valores contidos em determinadas células da folha de cálculo. No entanto, não é possível utilizá-las em fórmulas, ao contrário do que acontece com as funções standard disponíveis no Excel, como seja a função IF referida atrás, ou a função SUM, que calcula a soma do conteúdo numérico das várias células contidas numa dada gama. Isso acontece porque, para poderem ser utilizadas em células, terão que ser estruturadas como funções, e comportarem-se de maneira idêntica à das funções standard. Uma função, seja ela pré-existente no Excel, ou criada pelo utilizador, deve poder receber a informação de que necessita, e de poder devolver o resultado do seu trabalho, de modo a esse resultado poder ser utilizado na fórmula ou expressão que a utilize. Para tal, tem que possuir uma estrutura definida pela sintaxe seguinte: Function Nome ( argumento1, argumento2,... ) L i s t a de i n s t r u c o e s Nome = r e s u l t a d o 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. 10

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. 2.8 Exemplo de função definida pelo utilizador Vamos agora criar uma função que permita calcular a margem de lucro percentual de um determinado produto sabendo o seu custo e o seu preço de venda. Supõe-se que esses dados se encontrarão previamente armazenados em duas células da folha de cálculo. Uma solução possível será a seguinte: Public Function margemlucro ( venda, custo ) margemlucro = ( venda custo ) / venda End Function 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 6. Figura 6: Utilização da função margemlucro numa fórmula A fórmula contem referências às células D3 e D2, em que estão contidos, respectivamente, o preço de venda e o custo do produto. Quando a função é invocada, cópias do conteúdo destas duas células são passadas à função, que os recebe através dos parâmetros de entrada respectivos, venda e custo. 3 Como trabalhar com Objectos Para que uma macro (função ou sub-rotina) possa manipular o ambiente da aplicação, seja modificando a formatação de um documento, modificando opções da aplicação ou introduzindo dados numa gama de células, vai ser preciso interagir com Objectos. Quer o documento, quer a gama de células, quer a própria aplicação são considerados, para os efeitos de programação em VBA, como sendo objectos. Os objectos podem ser manipulados de várias formas: podemos mudar as suas propriedades; 11

podemos aplicar um método a esse objecto; podemos especificar uma sub-rotina que será executada sempre que um determinado evento ocorra a esse objecto. Os conceitos de propriedades, métodos e eventos deveriam já estar claros para quem tenha tido alguma exposição à programação em Visual Basic. No entanto, vamos aqui rever rapidamente essas noções. 3.1 Propriedades, Métodos e Eventos As propriedades de um objecto são as suas características físicas, como sejam as suas dimensões ou o tipo de letra que usa. Os métodos traduzem acções que podem ser realizadas 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. Os eventos, por sua vez, são acções que, uma vez exercidas sobre um objecto, implicam a possibilidade de ocorrer uma resposta automática desse objecto. 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 é outro exemplo de evento. Para que um objecto possa reagir a um dado evento deverá existir, previamente programado, um procedimento especial, chamado event handler, que vai especificar o que fazer caso esse evento ocorra. Sem isso, o objecto detecta esse acontecimento mas não sabe o que deve fazer. Figura 7: Lista de eventos disponíveis Na Figura 7 pode-se ver a janela de escrita de código. Na parte de cima, à direita, pode ser acedida a lista de eventos disponíveis para o objecto Worksheet. Seleccionando um dos eventos, será possível construir o procedimento event handler que permita ao objecto Worksheet reagir a esse evento. O cabeçalho e o delimitador final são criados automaticamente pelo editor do VBA, sendo da responsabilidade do programador a inclusão das instruções necessárias. Na figura são referidos vários eventos que podem ocorrer no objecto Worksheet, tais como o Activate que ocorre sempre que uma folha de cálculo se torna activa, ou ochange que é desencadeado por qualquer alteração ao seu conteúdo. 12

4 Estruturas de controlo do programa O VBA herda do Visual Basic uma série de estruturas de controlo do fluxo do programa. Têm um funcionamento semelhante pelo que não deverá haver surpresas. Vamos, no entanto, revê-las de forma sumária. Em seguida, serão apresentadas estruturas de controlo específicas do VBA. 4.1 Estruturas de controlo tradicionais 4.1.1 If...Then...Else A sintaxe desta estrutura é: I f condicao Then [ i n s t r u c o e s ] Else [ i n s t r u c o e s a l t e r n a t i v a s ] End i f Quando a condição é verdadeira serão executadas as instruções delimitadas por Then e Else. Em caso contrário, será executado o bloco alternativo de instruções. Esta estrutura existe em duas variantes: com ou sem a alternativa Else. No 1 o existe uma acção alternativa a ser executada caso a condição seja falsa. No 2 o caso, a alternativa será não fazer nada. 4.1.2 Do...Loop Estão disponíveis as quatro variantes que já se encontravam no Visual Basic: Do While e Do Until, com teste no princípio ou no fim. Dois exemplos de sintaxe são a seguir fornecidos: Do While condicao [ i n s t r u c o e s ] Loop Do [ i n s t r u c o e s ] Loop Until condicao 4.1.3 For...Next À semelhança do que acontece no Visual Basic, esta estrutura é usada quando é possível determinar de antemão o número de vezes que um dado número de instruções deve ser repetido. A sua sintaxe é: For contador = v a l o r _ i n i c i a l To v a l o r _ f i n a l [ i n s t r u c o e s ] Next 13

4.2 Estruturas típicas do VBA 4.2.1 For Each...Next Esta estrutura é uma variação da For...Next que opera numa colecção de objectos. Uma colecção é um conjunto de objectos idênticos, pertencentes à mesma classe, e que são referenciáveis mediante um índice. Por exemplo, um Workbook é constituído por um conjunto de objectos da classe Worksheet 3. A sintaxe desta estrutura é a seguinte: For Each elemento In Coleccao [ i n s t r u c o e s ] Next O bloco de instruções será aplicada a cada elemento da colecção de objectos em causa. A seguir é apresentado um exemplo de sub-rotina, utilizando esta estrutura de controlo: Public Sub FormataBordo ( ) Dim c e l l O b j e c t As Range For Each c e l l O b j e c t In S e l e c t i o n c e l l O b j e c t. BorderAround ColorIndex :=3, Weight:= xlthick Next End Sub É criada a variável cellobject para guardar um objecto do tipo Range (que representa uma gama de células - assunto tratado na Secção 5.4). O ciclo For Each...Next aplica o método BorderAround a cada uma das células contidas na gama representada por cellobject. Com os argumentos fornecidos no exemplo, este método formata o bordo dessas células a vermelho e uma linha grossa. 5 Programação do Excel usando VBA Nesta secção vamos aprender a trabalhar com os objectos do Excel mais comuns: o Workbook (Livro de trabalho), a Worksheet (Folha de cálculo) e o Range (gama de células). São objectos que pertencem, por sua vez, ao objecto principal que é a Application (Aplicação, neste caso, o próprio Excel). 5.1 Como aceder às funções standard do Excel Se bem que o VBA possua várias dezenas de funções pré-definidas, é muito conveniente poder utilizar directamente qualquer uma das centenas de funções standard oferecidas pelo Excel. Para poder aceder a elas a partir do VBA é necessário utilizar a propriedade WorsheetFunction do objecto Application 4. Por exemplo, para, num macro, calcular o valor médio de uma gama de células (identificada pelo nome "Dados") poderia ser usada a seguinte instrução: vmedio = Application. WorksheetFunction. Average ( Range ( "Dados" ) 3 Por sua vez, um workbook é também um objecto. Um objecto pode assim ser ele próprio uma colecção de objectos. 4 Claro que só as funções do Excel que não se encontram duplicadas no VBA podem ser acedidas por meio da propriedade WorsheetFunction. 14

5.2 Trabalhar com objectos Workbook Usando estes objectos, o VBA pode criar novos livros de trabalho, abrir ou fechar existentes, entre outras acções possíveis. Para especificar qual o livro de trabalho com que queremos trabalhar podemos fazê-lo de três maneiras diferentes: Usando o objecto Workbooks que representa o conjunto dos ficheiros Excel abertos naquele momento (Workbooks(Nome)); Usando o objecto ActiveWorkbook que representa o ficheiro com que se está de momento a trabalhar; Usando o objecto ThisWorkbook que representa o ficheiro em que o próprio programa em VBA (e não o utilizador) está a operar. Para abrir um Livro de Trabalho aplica-se o método Open ao objecto Workbooks: Sintaxe : Workbooks. Open Nome_do_ficheiro Exemplo : Workbooks.Open "C: \ Documentos\ Excel \Dados. x l s " Os métodos Save e Close são utilizados de forma similar para salvaguardar o conteúdo dum ficheiro e para o fechar, respectivamente. 5.3 Trabalhar com objectos Worksheet Normalmente um livro de trabalho possui mais do que uma folha de cálculo (é normalmente criado logo à partida com três). Para escolher qual a folha de cálculo com que se pretende trabalhar usa-se o objecto Worksheets especificando um índice ou o nome da folha de cálculo em causa: Worksheets ( 2 ) Worksheets ( " Custos " ) Para acrescentar uma folha de cálculo ao livro de trabalho o método adequado será o Add: Exemplo : Worksheets.Add After := Worksheets ( "Medidas" ) 5.3.1 Propriedades de Worksheet Nesta secção são referidas algumas das suas propriedades mais úteis: Worksheet.Name - permite mudar ou obter o nome da folha de cálculo. O exemplo abaixo muda o nome de "Folha 1" para "Medidas": Worksheets ( " Folha 1" ).Name = "Medidas" Worksheet.StandardWidth - permite especificar a largura standard das colunas duma folha de cálculo. 15

5.3.2 Métodos de Worksheet Eis alguns dos métodos normalmente aplicados a este tipo de objectos: Worksheet.Activate - torna activa a folha de cálculo especificada 5. O exemplo seguinte torna activa a folha de cálculo "Custos" do livro de trabalho "Dados 2007": Workbook ( "Dados 2007 " ). Worksheets ( " Custos " ). Activate Worksheet.Copy - copia a folha de cálculo especificada para outra posição dentro do livro de trabalho. Sintaxe : Worksheet.Copy [ P o s i t i o n ] O argumento Position é opcional e pode ter o valor Before ou After indicando a posição onde a cópia será inserida. Caso o argumento não seja incluído, a cópia será inserida num novo livro de trabalho. Exemplo : Worksheets ( 2 ).Copy After := Worksheets ( 3 ) O exemplo anterior faz uma cópia da 2 a folha de cálculo e insere-a a seguir à 3 a. O método Move usa uma sintaxe idêntica para mover uma determinada folha de cálculo para outra posição. Worksheet.Delete - permite eliminar a folha de cálculo especificada. 5.4 Trabalhar com objectos Range Um objecto do tipo Range pode representar uma simples célula, um conjunto de células, uma linha ou uma coluna. Não existe em VBA um objecto específico para representar uma célula individual. Para nos referirmos a uma célula ou gama de células podemos aplicar o método Range ao objecto Worksheet usando uma de duas sintaxes possíveis: Sintaxe 1 : Worksheet. Range (Nome) Range (Nome) Sintaxe 2 : Worksheet. Range ( Celula1, Celula2 ) A 1 a sintaxe usa nomes de gamas pré-definidos 6, enquanto que a 2 a utiliza as referências das células que definem dois vértices opostos da área rectangular contendo as células que se quer especificar. Caso se omita Worksheet em qualquer das sintaxes anteriores, o VBA pressupõe que se trata da folha de cálculo activa naquele momento. 5 A folha de cálculo activa é aquela que está visível no momento. 6 Atribuídos em Excel usando o Menu "Name/Define". 16

Exemplos : Range ( "C5" ). Value = 100 Range ( "D1", "D10" ). Value = 0 Worksheets ( 3 ). Range ( "Dados" ). ClearContents O 1 o exemplo guarda o valor 100 na célula C5. O 2 o exemplo atribui o valor zero a todas as células da gama D1 a D10. O 3 o exemplo limpa o conteúdo das células da gama "Dados" da 3 a folha de cálculo. A propriedade Value dos objectos Range permite conhecer ou modificar o seu valor. Para identificarmos apenas uma célula podemos também utilizar o método Cells. Sintaxe : Objecto. C e l l s ( Linha, Coluna ) Objecto pode ser um objecto Worksheet ou Range. A sua omissão, leva o VBA a partir do princípio que se trata da folha de cálculo activa. Linha e Coluna são valores numéricos indicando qual a linha e qual a coluna na intersecção das quais a célula se encontra 7. Exemplo : For coluna = 2 To 13 C e l l s (2, Coluna ). Value = "Mes " & coluna 1 Next O exemplo acima usa um ciclo For...To para preencher todas as células da gama C2 a C13 com um texto "Mês X" em que X é o n o do mês. É usado o operador de concatenação de strings & para efectuar a colagem. Caso se pretenda identificar uma linha ou coluna completa, podem ser utilizados os métodos Rows e Columns. Sintaxe : Objecto. Rows( I n d i c e ) Objecto. Columns ( I n d i c e ) Para ilustar a utilização do método Rows atente-se no seguinte exemplo 8 : Sub I n s e r e L i n h a s (gama As Range, num As Integer ) Dim num_linhas As Integer, ultima_linha As Integer Dim i As Integer With gama num_linhas =. Rows. Count ultima_linha =. Rows( num_linhas ). Row For i = 1 To num. Rows( ultima_linha + i ). I n s e r t Next End With End Sub 7 Se o objecto for do tipo Range, Linha e Coluna referir-se-ão à linha e à coluna dentro da gama de células especificada. 8 Adaptado de um exemplo contido em [1]. 17

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 propriedades. 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: Sub i n s e r e T e s t e ( ) I n s e r e L i n h a s Worksheets ( 3 ). Range ( "Dados" ), 3 End Sub Apresentamos outro exemplo, agora referido ao método Columns em que a largura da coluna E (5 a coluna) é mudada para 15: Columns ( 5 ). ColumnWidth = 15 6 Adicionando uma interface gráfica O acesso aos macros faz-se, conforme referido na Secção 2.3, mediante a combinação de teclas ALT-F8. Pode ainda associar-se a um macro uma combinação de teclas especial que permite accioná-lo directamente. No entanto, em muitos casos, é mais conveniente poder interagir com o macro através de uma interface própria, concebida especialmente para ele. Usam-se para o efeito objectos gráficos como Dialog Boxes (Caixas de Diálogo) desenhadas à medida, que são versões mais desenvolvidas das já conhecidas Input Boxes e Message Boxes. Vamos nesta secção ver como construir as nossas próprias Dialog Boxes usando objectos da classe UserForm e como as integrar numa aplicação em VBA. Para quem esteja já ambientado com a programação em Visual Basic, quer os conceitos, quer as técnicas aqui utilizados, são já conhecidos. 6.1 Instalação da Form Uma Form é uma janela, em si mesma um objecto, utilizada como um contentor para outros objectos gráficos. Pode-se criar um objecto da classe UserForm no Editor do VBA através do Menu "Insert/User Form". Na Figura 8 na próxima página pode-se ver uma Form vazia e uma caixa de ferramentas (Toolbox) contendo os vários controlos (objectos gráficos) disponíveis para a construção da interface. Pode ainda ver-se no canto inferior esquerdo a Janela de Propriedades, através da qual é possível manipular várias características da Form. A seguir são apresentadas algumas das principais propriedades que podem ser configuradas numa Form: Name - especifica o nome pelo qual a Form será identificada 18

Figura 8: Criação de uma Form no VBE Caption - especifica o título que figura no topo da Form BackColor - permite seleccionar a cor do fundo Enabled - controla a utilização da Form pelo utilizador ShowModal - permite alterar o comportamento da Form de modo a controlar o acesso à aplicação enquanto a Form estiver activa Font - controla o tipo e tamanho da letra utilizada Height - especifica a altura da Form Width - especifica a largura da Form 6.2 Instalação dos Controlos Usando a Caixa de Ferramentas Toolbox, é possível escolher e instalar os controlos na Form. À semelhança do que é feito no ambiente de desenvolvimento do Visual Basic, basta accionar o símbolo do controlo pretendido e desenhá-lo com o rato na Form. A seguir, quer agindo directamente sobre o controlo, quer utilizando a Janela de Propriedades, podem-se fazer os ajustes necessários das suas características. Se bem que cada classe 19

de controlos possua a sua lista própria de propriedades, existem algumas propriedades importantes que são comuns à maioria delas: Name - especifica o nome pelo qual o controlo será identificado no programa Caption - especifica o texto apresentado pelo controlo BackColor - permite seleccionar a cor do fundo Enabled - controla a utilização do objecto pelo utilizador Height - especifica a altura do controlo Width - especifica a sua largura Visible - especifica se o controlo está ou não visível Os controlos disponíveis em Visual Basic encontram-se também no ambiente de desenvolvimento do VBA: botões de comando (Command Buttons), etiquetas (Labels), caixas de texto (Text Boxes), quadros (Frames), botões de opção (Option Buttons), caixas de verificação (Check Boxes) e caixas de listagem (List Boxes), entre outros. O seu comportamento é idêntico ao observado em Visual Basic. Valerá a pena, no entanto, chamar a atenção para algumas propriedades específicas dos objectos da classe ListBox que diferem dos seus correspondentes em Visual Basic: ColumnCount - especifica o número de colunas em que os dados são apresentados ColumnHeads - controla os cabeçalhos das colunas RowSource - determina a fonte dos dados que vão preencher a ListBox Vamos agora introduzir um controlo existente no VBA e que não está disponível no Visual Basic 5.0. Trata-se do objecto Tabstrip que permite a apresentação de diferentes conjuntos de valores mediante a selecção de diferentes separadores ("tabs"). Na Figura 9 na página seguinte pode-se encontrar um exemplo de um objecto deste tipo. 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 3.1, para que um controlo possa reagir a acções provocadas pelo utilizador, como o "clicar" do rato, é preciso que o programador crie subprogramas 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 1 o 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: Private Sub UserForm_Initialize ( ) With TabStrip1. Tabs ( 0 ). Caption = " C i v i l ". Tabs ( 1 ). Caption = " I n f o r m a t i c a " 20

Figura 9: Objecto da classe Tabstrip. Tabs.Add " E l e c t r o t e c n i a " End With With Worksheets ( 4 ) txtnumalunos. Text =. [ D5 ] txtpercaprov. Text =. [ D6 ] 100 txtmedia. Text =. [ D7 ] End With End Sub 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 1 o 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. Private Sub TabStrip1_Change ( ) Dim v As Integer With Worksheets ( 4 ) v = TabStrip1. Value I f v = 0 Then txtnumalunos =. [ D5 ] txtpercaprov =. [ D6 ] 100 txtmedia =. [ D7 ] ElseIf v = 1 Then txtnumalunos =. [ E5 ] txtpercaprov =. [ E6 ] 100 txtmedia =. [ E7 ] Else 21

txtnumalunos =. [ F5 ] txtpercaprov =. [ F6 ] 100 txtmedia =. [ F7 ] End I f End With End Sub 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 correspondente. 6.3 Incorporação da Form na sub-rotina Nesta fase há três aspectos a considerar: 1. Visualização da Form 2. Tratamento dos eventos que ocorram enquanto a Form estiver visível 3. Processamento dos resultados fornecidos pela Form O 2 o ponto, referente ao tratamento dos eventos, foi já discutido anteriormente. Os restantes serão tratados nas secções seguintes. 6.3.1 Como visualizar e terminar uma Form Para visualizar a UserForm usa-se o método Show: Exemplo : MinhaForm. Show Se, em alternativa, se pretender arrancar com a Form mas sem a visualizar nesse momento, usa-se a instrução Load: Exemplo : Load MinhaForm Quando se pretender tornar a Form visível, aplicar-se-á então o método Show. Após a sua utilização, quando uma Form deixar de ser necessária, deve-se utilizar a instrução Unload para a desactivar: Exemplo : Unload Me No entanto, desactivar uma Form através da instrução Unload não implica que esta deixe de estar em memória. Para garantir a sua efectiva remoção, que se traduzirá na geração do evento Terminate, haverá que se usar a seguinte técnica: Exemplo : Set MinhaForm = Nothing 22

6.4 Tratamento de eventos através de Event Handlers A instrução Unload Me deve ser incluída num Event Handler associado a um controlo (normalmente um botão de comando) presente na Form. Nesta instrução, a palavra Me indica ao VBA que a Form a desactivar será aquela a que o Event Handler diz respeito. Um exemplo de um Event Handler que termine uma Form pode ser: Private Sub cmdfechar_click ( ) Dim op As Integer op = MsgBox( " S a i r?( Yes/No) ", vbyesno + vbquestion ) I f op = vbyes Then Unload Me End I f End Sub A sub-rotina acima vai especificar a reacção do botão de comando cmdfechar ao evento Click, neste caso apresentar uma Msg Box que confirme a intenção do utilizador de fechar a Form. O tratamento de qualquer evento a ocorrer na Form, ou em qualquer dos controlos nela presentes, deverá basear-se num Event Handler que defina a resposta adequada. Outro evento importante é o Change que ocorre sempre que se altera o conteúdo de objectos como as Text Box. Na Secção 6.2 na página 21 encontra-se um exemplo de um Event Handler associado a este tipo de evento. 6.4.1 Como recolher os resultados de uma Form Uma UserForm é muitas vezes utilizada para pedir informação ao utilizador. Nesse caso, será necessário recolher os dados introduzidos ou as opções seleccionadas nos controlos apropriados. Para tal é preciso aceder às propriedades Value dos diversos controlos existentes na Form e copiar os seus valores actuais para células da folha de cálculo. O conteúdo da propriedade Value nas principais classes de controlos encontra-se resumida na seguinte tabela: Classe CheckBox OptionButton ListBox TextBox TabStrip Conteúdo True ou False conforme esteja ou não activada True ou False conforme esteja ou não activada A posição da linha seleccionada O conteúdo da TextBox (pode-se também usar a propriedade Text) Um inteiro indicando qual a Tab que está activa Note-se que nas List Boxes em VBA a 1 a linha tem a posição 1, ao contrário do que se passa em Visual Basic, em que começa na posição 0. 6.4.2 Exemplo de aplicação Vamos finalmente aplicar estes conceitos e técnicas na construção e integração de uma UserForm (descrita na Figura 10 na página seguinte) que permita a introdução conjunta dos dados de um aluno (Nome, Número e Curso) sem necessidade de recorrer a três Input Boxes separadas. Esta UserForm conterá duas Text Boxes para inserção do Nome e 23

Número do aluno e uma Combo Box para selecção do seu Curso. Uma Combo Box é um controlo semelhante a uma List Box em que a lista está normalmente invisível, só aparecendo quando o campo superior é activado. Aplicam-se-lhe os mesmos métodos da classe ListBox. Public Sub testuserforminput ( ) usrfrminput. Show Set usrfrminput = Nothing End Sub Este macro chama a UserForm com o nome usrfrminput e remove-a de memória quando ela termine o seu trabalho. Para facilitar a sua invocação, é conveniente associar ao macro uma combinação de teclas específica, usando uma das técnicas já aprendidas (ver parte final da Secção 2.6). Private Sub UserForm_Initialize ( ) cmbcursos.additem " C i v i l " cmbcursos.additem " I n f o r m a t i c a " cmbcursos.additem " E l e c t r o t e c n i a " cmbcursos.additem " Geotecnia " cmbcursos. AddItem " Quimica" cmbcursos.additem " Instrumentacao Medica" End Sub Figura 10: A UserForm para Entrada Múltipla de Dados Esta sub-rotina especial, que é executada automaticamente quando a UserForm arranca, trata de inicializar a Combo Box "cmbcursos" com os nomes dos diferentes cursos da escola. Private Sub cmdfechar_click ( ) With Worksheets ( 4 ). [ H5 ] = txtnome. Value. [ I5 ] = txtnum. Value. [ J5 ] = cmbcursos. Text 24

End With Unload Me End Sub Este Event Handler está associado ao botão cmdfechar e é chamado quando sobre ele ocorre o evento Click. Antes de fechar a UserForm usando Unload, copia o conteúdo das duas Text Box e o da linha seleccionada da Combo Box para três células contíguas da folha de cálculo. 7 Notas finais Parte da estrutura e alguns dos exemplos apresentados foram inspirados no livro de Paul McFredies[1]. Referências [1] Paul McFredies. VBA for the Microsoft Office System, QUE. 25