13
1999 – 2003 Porto Instituto Superior de Engenharia do Porto Departamento de Engenharia Informática VISUAL BASIC PARA APLICAÇÕES (VBA) Alberto A. C. Sampaio

VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Embed Size (px)

Citation preview

Page 1: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

1999 – 2003 Porto

Instituto Super ior de Engenhar ia do Por to Depar tamento de Engenhar ia Informática

VISUAL BASIC PARA APLICAÇÕES (VBA)

Alberto A. C. Sampaio

Page 2: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

I

ÍNDICE

1. PROJECTOS EM VISUAL BASIC PARA APLICAÇÕES.................... 1

1.1 INTRODUÇÃO ........................................................................................................ 1 1.2 AMBIENTE DE DESENVOLVIMENTO ........................................................................ 1

2. OBJECTOS E COLECÇÕES........................................................................... 3

2.1 OBJECTOS ESPECÍFICOS DOS APLICATIVOS............................................................. 3 2.2 COLECÇÃO............................................................................................................ 4

2.2.1 Aceder a Um Elemento de uma Colecção...................................................... 4 2.2.2 Instrução Específica para Percorrer Uma Colecção..................................... 4

3. SELECÇÃO E INTERVALO ................................................................................... 6

4. PROPRIEDADES DAS CÉLULAS.......................................................................... 7

5. CRIAÇÃO DE APLICAÇÕES VBA ........................................................................ 8

5.1 UTILIZAÇÃO DE FORMULÁRIOS.............................................................................. 8 5.2 INSERÇÃO DE OBJECTOS NA FOLHA DE CÁLCULO................................................... 8

5.2.1 Objectos do VBA .......................................................................................... 8 5.3 ADICIONAR OUTRAS ROTINAS..............................................................................10 5.4 UTILIZAÇÃO DE VARIÁVEIS..................................................................................11 5.5 EXERCÍCIOS .........................................................................................................11

Page 3: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 1

1. Projectos em Visual Basic para Aplicações

1.1 Introdução

No Excel é possivel elaborar pequenas rotinas, chamadas macros, sem ter de programar. Para isso há que recorrer ao gravador de macros do Excel. No entanto, para ser útil, é geralmente necessário alterar posteriormente o código gravado às necessidades do momento. Caso não o faça essas macros gravadas ser-lhe-ão de pouca utilidade.

Se o leitor pretende maximizar o potencial do Excel, então terá de programar no Excel, e para isso serão aqui introduzidos conceitos importantes para programação usando-se o Visual Basic para Aplicações. As instruções são as mesmas do Vuaisl Basic.

1.2 Ambiente de Desenvolvimento

Desde a versão Excel 97, que se passou a ter na aplicação Excel um ambiente de desenvolvimento em Visual Basic específico para essa aplicação.

Para se aceder ao ambiente, seleccione a partir da barra de o menus, Tools>Macro>Visual Basic Editor1. Também se pode aceder através do atalho de teclas, Alt+F11. O ambiente do VBA é mostrado na figura seguinte.

janela deprojecto

janela daspropriedades

Figura 1-1 Ambiente de Desenvolvimento do VBA.

Tem como principais características, permitir permitir vários projectos em simultâneo, e possuir uma estrutura hierárquica.

1 Também pode tornar visível a barra de ferramentas das Macros, e ter assim sempre disponível botões relativos ao Visual Basic. Para se inserir essa barra deverá escolher do menu, View>Toolbars>Visual Basic.

Page 4: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 2

A janela de Projecto no Excel, lista todos os projectos e seus itens, como exemplificado na figura seguinte:

Figura 1-2 Janela dos projectos

Os botões correspondem a:

• View Code (ver janela de código)

• View Object (ver objectos)

• Toggle Folders (projecto por pastas)

Como se vê existe um projecto para cada livro, com as folhas destes. Por projecto podem-se ter os seguintes componentes2:

• Objectos do Excel

• Formulários criados pelo programador

• Módulos de código

O código VBA terá de estar associado a estes componentes de um projecto. Logo, todos eles têm associada uma janela de código, aonde se pode introduzir o respectivo código. Estas janelas são como editores de texto, bastante simples, e especializados para código VB. Na parte superior de cada janela especificam-se opções do VB, constantes e variáveis. O restante espaço serve para as rotinas pré-definidas de eventos, e para as rotinas criadas pelo programador.

2 Existem também módulos de classe, que não serão aqui abordados.

Page 5: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 3

2. Objectos e Colecções

2.1 Objectos Específicos dos Aplicativos

Para além dos objectos do Visual Basic (ex: formulários, botões, etc.) existem objectos específicos de cada aplicativo que suporta VBA. Estes objectos vão sendo alterados com o surgimento de novas versões dos aplicativos, por isso é conveniente consultar a respectiva ajuda (através de F1).

Objectos do Microsoft Excel (Office 2000): são mostrados na figura seguinte.

Figura 2-1 Objectos do Microsoft Excel

Os objectos do Excel da janela de projecto (ver Figura 1-2) estão obviamente relacionados com alguns destes objectos. Por exemplo, existirá um projecto para cada livro.

Para cada objecto dos tipos livro, folha ou gráfico existem rotinas associadas a cada evento que esses objectos suportam.

O objecto Application representa a própria aplicação, neste caso o Excel.

Em cada momento existe apenas um livro activo, uma folha activa, etc. O application possui propriedades que contêm essas informações, por exemplo:

ActiveWorkbook – o livro activo (que está a ser usado) ActiveSheet - a folha activa do livro activo

ActiveCell – a célula activa

Muitas destas propriedades não necessitam ser antecedidas do especificador application. Por exemplo, em lugar de Application.ActiveWorkbook.Name, pode-se escrever apenas, ActiveWorkbook.Name.

Page 6: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 4

2.2 Colecção

Alguns dos elementos do modelo de objectos são colecções. Uma colecção é um objecto que contém outros objectos, normalmente do mesmo tipo. Os mais relevantes são: Workbooks – livros abertos;

Worksheets – folhas de um livro;

Cells – células.

Para se saber quantos elementos tem uma colecção, todas as colecções possuem a propriedade Count.

A colecção Cells é uma propriedade que representa todas as células do objecto a que se aplica. Pode ser aplicada aos objectos aplicação, intervalo (ver mais à frente) e folha.

O objecto folha é um elemento da colecção Worksheets.

2.2.1 Aceder a Um Elemento de uma Colecção

Cada elemento pode ser identificado pelo nome ou por um número de ordem de criação. Todas as colecções possuem a propriedade Item que permite identificar um elemento da colecção pela sua posição. Por outro lado, sempre que esta propriedade é a propriedade por pré-definição, então não é necessário escrevê-la.

Ex: Considerar que o primeiro livro aberto no Excel se chama notas.xls. Então, as duas expressões seguintes produzem o mesmo resultado.

Wor kbooks( 1) i dent i f i ca o pr i mei r o l i vr o aber t o, e

Wor kbooks( “ not as. x l s” ) i dent i f i ca especi f i ca/ e o l i vr o not as. x l s.

No caso da colecção Cells, para se identificar uma célula em particular, a colecção tanto pode ser usada de forma unidimensional como bidimensional, sendo neste caso semelhante a uma matriz, tendo por base a posição 1,1.

Act i veSheet . Cel l s( 1, 2) ‘ r ef er e- se à cél ul a A2

Act i veSheet . Cel l s( 1) ‘ r ef er e- se à cél ul a A1

Associado a cada célula existe a propriedade Value que contém o valor da respectiva célula.

Act i veSheet . Cel l s( 1, 1) . val ue=5 ‘ i nser e 5 na cél ul a A1

Para se se tornar um dado objecto activo usa-se o método Activate.

2.2.2 Instrução Específica para Percor rer Uma Colecção

A instrução For Each repete um bloco de instruções para cada elemento da colecção (ou vector). A sua sintaxe é:

For Each Elemento I n Grupo [ bl oco_i nst r uções] Next [ Elemento]

Os componentes da instrução são:

Page 7: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 5

Elemento Obrigatório. Uma variável usada para iterar através dos elementos da colecção (Grupo). Para colecções deve ser do tipo Variant, ou objecto (genérico ou não). Para vectores apenas pode ser Variant.

Grupo Obrigatório. Nome da colecção ou vector (neste caso não pode ser de tipos definidos pelo utilizador (com Type)).

bloco_instruções Opcional. Uma ou mais instruções executadas para cada elemento de Grupo.

Podem-se imbricar estes ciclos, mas cada Elemento deve ser único. Exemplo1: Escreve o nome de cada livro aberto (colecção Workbooks).

. . . For Each l i vr o I n Wor kbooks MsgBox l i vr o. Name Next l i vr o . . .

Page 8: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 6

3. Selecção e Intervalo

Um intervalo é uma célula ou um conjunto de células num dado intervalo de endereços de células. Para se representar um intervalo existe uma propriedade própria chamada Range. Podemos definir o número de intervalos que pretendermos.

Range( “ A1” ) ‘ I nt er val o de apenas uma cél ul a, A1.

Range( “ A1” , “ C2” ) ‘ I nt er val o de 6 cél ul as, de A1 a C2.

A propriedade Range produz um objecto do tipo Range. Este tipo de objectos também pode ser obtido por outras formas, por exemplo através da propriedade (colecção) Cells. Um objecto Range também possui uma propriedade Cells. A propriedade Range aplica-se a uma folha, a uma aplicação, ou a um objecto Range. Se não se especificar a folha, então aplica-se à folha activa. Quando a propriedade é aplicada a um objecto Range os endereços são relativos a este intervalo. Um intervalo de apenas uma célula é idêntico a uma célula.

Alguns exemplos: Range( " A1" ) . Val ue = Range( “ B1” ) . val ue Wor ksheet s( " Sheet 1" ) . Range( " A1" ) . Val ue = 10

Uma selecção significa a selecção de um objecto numa janela. A propriedade relativa à selecção chama-se Selection. Aqui interessa-nos a selecção de células. Neste caso Selection produz um objecto do tipo intervalo (Range). Logo é possível usar uma selecção numa expressão que espere um objecto do tipo intervalo. Por exemplo, passar uma selecção de células feita pelo utilizador para uma sub-rotina desenvolvida por nós.

Page 9: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 7

4. Propr iedades das Células

Frequentemente há necessidade de alterar alguma característica das células, ou do seu conteúdo. Por exemplo, mudar a cor de fundo, ou o estilo do conteúdo das células.

Para se alterar o conteúdo de uma célula ou intervalo de células, basta alterar a propriedade respectiva. Por exemplo a mudança de cor do conteúdo consiste em alterar a côr da fonte para o intervalo.

Exemplo: Formatação da célula activa a negrito.

Act i veCel l . Font . Bol d = Tr ue

Algumas propriedades da fonte: Tabela 4-1

Bold Booleana: True activa estilo negrito; False desactiva estilo

Color Cor da fonte.

Italic Booleana: True activa estilo itálico; False desactiva estilo

Size Um valor para o tamenho da fonte (por exemplo 12).

Underline Booleana: True activa estilo sublinhado; False desactiva estilo Processo idêntico ocorre com o interior de uma célula e coma moldura.

Page 10: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 8

5. Cr iação de Aplicações VBA

5.1 Utilização de Formulár ios

A utilização de formulários em VBA é idêntica à utilização no VB. A caixa de ferramentas não é visível até que se insira o primeiro formulário. A inserção pode ser feita através do botão , ou através do menu, Insert>>UserForm. Na figura seguinte é mostrado um formulário contendo um botão.

Um formulário pode ser chamado a partir de uma qualquer sub-rotina. Quando chamado ele aparecerá com a folha de cálculo por trás.

A utilização de formulários no VBA é idêntica à utilização no VB, pelo que não será aqui feita. Uma das diferenças mais significativas reside nos nomes dos objectos. Por exemplo, o formulário chama-se UserForm em VBA, enquanto se chamava Form em VB.

A abordagem para implementação também deverá ser a já utilizada em Visual Basic.

5.2 Inserção de Objectos na Folha de Cálculo

Em adição aos formulários, também é possível colocar objectos directamente na folha de cálculo. No Excel esses objectos podem ser de dois tipos: objectos de formulário do Excel, e objectos VBA da caixa de ferramentas. Estes podem ser inclusivamente misturados. Neste texto apenas se abordam os objectos VBA.

5.2.1 Objectos do VBA

Utilizando objectos do VBA também se podem colocar objectos na própria folha de cálculo e depois, caso se pretenda, associá-los a rotinas de eventos desenvolvidas pelo programador. Existe uma barra de botões com esses objectos. Previamente deverá fazer aparecer a barra de botões do Visual Basic. Para isso deverá escolher a partir do menu,

Page 11: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 9

View>Toolbars>Visual Basic. Nesta barra existem diversos botões como mostrado na figura seguinte.

Premindo-se o botão faz aparecer a caixa de ferramentas. Da caixa de ferramentas seleccionam-se os objectos que se pretendem incluir na folha. A passagem ao modo de desenho é automática assim que se selecciona um controlo da caixa de ferramentas. Após o desenho dos objectos na folha associa-se-lhes o respectivo código.

Para se associar código ao objecto prime-se duas vezes o botão esquerdo do rato sobre o objecto, ou se prime o botão direito e escolhe-se a opção “View Code” . Para se alterarem propriedades do objecto, prime-se o botão direito e escolhe-se a opção “Properties” . As rotinas associadas aos eventos suportados por esses objectos ficam ligadas automaticamente no VBA aos objectos folha do excel (por exemplo sheet1).

Os principais objectos do VBA são: a etiqueta (“Label” ), a caixa de texto (“TextBox1” ) e o botão (“CommandButton” ). O VBA dá o nome aos objectos inseridos na folha de cálculos adicionando um número sequencial ao tipo de objecto. Por exemplo, a primeira etiqueta terá o nome “Label1” . Esses objectos são idênticos aos do VB. Tal como no VB esses nomes podem ser alterados.

Vamos em seguida exemplificar a utilização do botão.

Exemplo 5-1 Elaborar um projecto VBA para somar os valores das células A1 e A2, carregando num botão que deverá ter sido criado na folha de cálculo. Pretende-se que o resultado surja na célula A3. Resolução: Para desenhar o botão, selecciona-se o botão da barra e desenha-se o botão no local pretendido3.

Em seguida altere o texto do botão para “Somar” . Agora prima duas vezes o botão esquerdo para aparecer o editor de VBA aonde se escreverá o código que permite somar os dois valores.

3 A nossa abordagem de implementação em VB está aqui bastante simplificada.

Page 12: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 10

Pr i vat e Sub CommandBut t on1_Cl i ck( ) Cel l s ( 3, 1) = Cel l s( 1, 1) + Cel l s( 2, 1) End Sub

Para executar, há que voltar à respectiva folha e após serem preenchidas as células A1 e A2 com valores, premir o botão “Somar” . Antes, deve ter saído do modo de desenho carregando novamente

no botão .

Como nota final, apesar de ser utilizado o tipo Single, este não tem a precisão adequada, pelo que se recomenda a utilização do tipo Double.

5.3 Adicionar Outras Rotinas

Poderiam ser adicionadas outras rotinas à janela de código para além das dos eventos associados aos objectos colocados na(s) folha(s) de cálculo. No caso de se pretender que essass rotinas sejam utilizadas por rotinas noutras janelas, então essas rotinas deverão ser desenvolvidas num módulo de código (module). Para fazer surgir um module seguir o menu do VBA Insert>Module.

Vamos colocar o cálculo da soma numa sub-rotina no módulo module1. Sub soma2( ) Cel l s( 3, 1) = Cel l s( 1, 1) + Cel l s( 2, 1) End Sub

E alterar a rotina do evento para: Pr i vat e Sub CommandBut t on1_Cl i ck( ) Cal l soma2 End Sub

O resultado é mostrado na figura seguinte.

Page 13: VISUAL BASIC PARA APLICAÇÕES (VBA) - …asilva/VBA-Excel-6-11-03-Q.pdf · • View Code (ver janela de código) • View Object ... Utilizando objectos do VBA também se podem colocar

Instituto Superior de Engenharia do Porto

VBA – Alberto A. C. Sampaio 11

5.4 Utilização de Var iáveis

A utilização de variáveis é idêntica ao Visual Basic. Por exemplo, para o exemplo anterior poder-se-ia ter procedido do seguinte modo:

Sub soma2( ) Di m n1 As Si ngl e, n2 As Si ngl e n1 = Cel l s( 1, 1) n2 = Cel l s( 2, 1) Cel l s ( 3, 1) = n1+n2 End Sub

5.5 Exercícios

Como exercício implemente a solução para o problema dos desvios.