• Nenhum resultado encontrado

Associação da Form ao procedimento

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

Uma vez construída a form é preciso associá-la ao programa que a vai utilizar. 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 2o ponto, referente ao tratamento dos eventos, foi já discutido anteriormente. Os

restantes serão tratados nas secções seguintes.

9.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:

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:

1 Exemplo :

2 Set MinhaForm = Nothing

9.3.2 Tratamento de eventos através de Event Handlers

Este tema foi já introduzido na Secção 4.1.3 na página 25. Pelo menos um controlo instalado na form deve ter um Event Handler associado. Vamos agora considerar o exemplo de um Event Handler utilizando a instrução Unload Me e associado a um controlo (neste caso, como é habitual, 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:

Listing 15: Handler do objecto cmdFechar para o evento click

1 Private Sub cmdFechar_Click ( ) 2 Dim op As Integer

3 op = MsgBox( " S a i r ? ( Yes /No) " , vbYesNo + v b Q u e s t i o n ) 4 I f op = vbYes Then

5 Unload Me

6 End I f 7 End Sub

A sub-rotina acima vai especificar a reacção do botão de comando cmdFechar ao evento Click, neste caso apresentar uma MsgBox que confirme a intenção do utilizador de fechar a Form.

Outro evento importante é o Change que ocorre sempre que se altera o conteúdo de objectos como as Text Box. Na Secção 9.4 na página 82 encontra-se um exemplo de um Event Handler associado a este tipo de evento.

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.

9.3.3 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 re- sumida na seguinte tabela:

Classe Conteúdo

CheckBox True ou False conforme esteja ou não activada OptionButton True ou False conforme esteja ou não activada

ListBox A posição da linha seleccionada

TextBox O conteúdo da TextBox (pode-se também usar a propriedade Text ) TabStrip Um inteiro indicando qual a Tab que está activa

Recorde-se que nas List Boxes em VBA à 1a linha corresponde a posição 1.

9.3.4 Exemplo de aplicação

Vamos finalmente aplicar estes conceitos e técnicas na construção e integração de uma UserForm (descrita na Figura 40 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 Número do aluno e uma Combo Box para selecção do seu Curso. Conforme referido na Secção 4.3.10 na página 36, 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.

Listing 16: Exemplo de sub-rotina de invocação de uma UserForm

1 Public Sub t e s t U s e r F o r m I n p u t ( ) 2 usrFrmInput . Show

3 Set usrFrmInput = Nothing 4 End Sub

O macro da Listagem 16 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).

Listing 17: Exemplo de sub-rotina de inicialização de uma UserForm

1 Private Sub U s e r F o r m _ I n i t i a l i z e ( ) 2 cmbCursos . AddItem " C i v i l "

3 cmbCursos . AddItem " I n f o r m a t i c a " 4 cmbCursos . AddItem " E l e c t r o t e c n i a " 5 cmbCursos . AddItem " G e o t e c n i a " 6 cmbCursos . AddItem " Quimica "

7 cmbCursos . AddItem " I n s t r u m e n t a c a o ␣ Medica " 8 End Sub

A sub-rotina da Listagem 17 é um event handler especial que trata do evento Initialize. Este evento ocorre quando a UserForm é criada. Assim sendo, esta sub-rotina é executada de forma automática sempre que a UserForm arranca. Neste caso, trata de inicializar a Combo Box "cmbCursos" com os nomes dos diferentes cursos da escola.

Figura 40: A UserForm para Entrada Múltipla de Dados

Listing 18: Handler do objecto cmdFechar para o evento Click

1 Private Sub cmdFechar_Click ( ) 2 With Worksheets ( 4 ) 3 . [ H5 ] = txtNome . Value 4 . [ I 5 ] = txtNum . Value 5 . [ J5 ] = cmbCursos . Text 6 End With 7 Unload Me 8 End Sub

O Event Handler da Listagem 18 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, permitindo assim memorizar os dados introduzidos pelo utilizador.

Nessa listagem pode observar-se que as três instruções de atribuição a outras tantas células da folha de cálculo "Worksheets(4)" estão encapsuladas pela estrutura With..End With. Esta estrutura permite a omissão da referência ao objecto (neste caso a "Workshe- ets(4)") a que pertencem as células em causa. Isto é também válido quando queremos especificar propriedades ou aplicar métodos a um mesmo objecto. Veja-se o exemplo na Secção 9.4.

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

Documentos relacionados