• Nenhum resultado encontrado

Trabalhar com objectos Range

No documento Programação em VBA Texto Introdutório (páginas 73-77)

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)

Sintaxe 2:

Worksheet.Range(Celula1, Celula2)

A 1a sintaxe usa nomes de gamas pré-definidos29, enquanto que a 2a utiliza as re-

ferências das células que definem os dois vértices opostos da área rectangular contendo as células que se quer especificar. Caso se omita a referência a Worksheet em qualquer das sintaxes anteriores, o VBA pressupõe que se trata da folha de cálculo activa naquele momento.

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 da folha de cálculo activa. 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)

Na sintaxe acima, a entidadeObjecto pode ser um objecto Worksheet ou Range. Mais uma vez, 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 encontra30. Veja-se o seguinte exemplo:

1 For c o l u n a = 2 To 13

2 C e l l s ( 2 , Coluna ) . Value = "Mes␣ " & c o l u n a − 1 3 Next

O exemplo acima usa um ciclo For...To para preencher todas as células da gama C2 a C13 com o texto "Mês X" em que X é o no do mês. É usado o operador de concatenação

de strings & para efectuar a colagem.

29Atribuídos em Excel usando o Menu "Insert/Name/Define".

30Se o objecto for do tipo Range, os argumentos Linha e Coluna referir-se-ão à linha e à coluna dentro

Caso se pretenda identificar uma linha ou coluna completa, podem ser utilizados os métodos Rows e Columns.

Sintaxe:

Objecto.Rows(Indice) Objecto.Columns(Indice)

Para ilustrar a utilização do método Rows atente-se no seguinte exemplo de sub- rotina31:

Listing 14: Sub-rotina InsereLinhas

1 Sub I n s e r e L i n h a s ( gama As Range , num As Integer )

2 Dim num_linhas As Integer , u l t i m a _ l i n h a As Integer 3 Dim i As Integer

4 With gama

5 num_linhas = . Rows . Count

6 u l t i m a _ l i n h a = . Rows ( num_linhas ) . Row 7 For i = 1 To num

8 . Rows ( u l t i m a _ l i n h a + i ) . I n s e r t

9 Next

10 End With 11 End Sub

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:

1 Sub i n s e r e T e s t e ( )

2 I n s e r e L i n h a s Worksheets ( 3 ) . Range ( " Dados " ) , 3 3 End Sub

Apresentamos outro exemplo, agora referido ao método Columns:

Columns(5).ColumnWidth = 15

Aplicando o método Columns ao objecto Columns(5) (a coluna de índice 5, ou seja, a coluna E) o efeito obtido é a mudança da sua largura para 15.

Existe uma propriedade dos objectos Range particularmente útil. Trata-se da propri- edade Offset que permite definir um deslocamento em relação a um objecto Range, por exemplo, em relação à célula activa.

Sintaxe:

Range.Offset(linha,coluna)

Na Figura 38 podem observar-se dois exemplos de aplicação desta propriedade. Mantendo- se a célula activa B3, no caso A foi armazenado o valor 2 na célula B5 (duas linhas abaixo de B3 e na mesma coluna) usando a seguinte instrução:

ActiveCell.Offset(2,0) = 2

No caso B, foi colocado o valor 2 em A3 (na mesma linha e uma coluna antes de b3), usando a instrução:

ActiveCell.Offset(0,-1) = 2

Note-se que nos dois casos a célula activa se manteve inalterada. Apenas se especificou a posição de uma célula em relação a um referencial fixo (B3).

Figura 38: Exemplos de utilização da propriedade Offset

Usando esta propriedade podemos escolher uma célula especificando a sua coluna ou a sua linha (ou as duas) de forma relativa, ou seja, em relação ao objecto Range a que se aplica. Isto pode não parecer à primeira vista especialmente útil. No entanto, se pensarmos que linha ou coluna podem ser constituídos por variáveis, cujo valor pode ser controlado por uma estrutura de repetição, podemos ver que temos aqui uma forma expedita de executarmos uma mesma acção sobre um conjunto de células definido de forma relativa em relação a uma dada célula, que podemos considerar como uma espécie de âncora.

9

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 ob- jectos da classe UserForm e como as integrar numa aplicação em VBA.

9.1

Instalação da Form

Uma Form é uma janela, em si mesma um objecto, utilizada como um contentor para outros objectos gráficos (ver Secção 4.3.3 na página 32). Pode-se criar um objecto da classe UserForm no Editor do VBA através do Menu "Insert/User Form".

Figura 39: Criação de uma Form no VBA

Na Figura 39 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 (como, aliás, de qualquer controlo que esteja seleccionado).

No documento Programação em VBA Texto Introdutório (páginas 73-77)

Documentos relacionados