13
1 Microsoft Excel VBA Fact Sheet: Build a UserForm for Excel © Martin Green www.fontstuff.com Tradução/Adaptação: Paulo Costa – www.e-dicas.blogspot.com Construir um Formulário em VBA para Excel Introdução Um formulário é uma janela de diálogo personalizada que se constrói utilizando o Editor de Visual Basic. Este exemplo é construído em Excel mas pode ser utilizado em qualquer outro programa que suporte VBA. Com um formulário poderá criar um interface amigável para o seu livro ou documento, tornando assim mais controlável para si e mais simples para o utilizador. Sobre o projecto Este documento mostra como construir um simples formulário para inserir dados pessoais sobre despesas numa folha de cálculo. O trabalho está dividido em duas secções principais: a construção do formulário em si e de seguida, escrever o código VBA para que ele funcione. O formulário final será parecido com a imagem seguinte (Fig.1). Fig. 1 – O projecto de Formulário terminado.

Construir Um Formulario Em VBA Para Excel

Embed Size (px)

Citation preview

Page 1: Construir Um Formulario Em VBA Para Excel

1

Microsoft Excel VBA Fact Sheet: Build a UserForm for Excel

© Martin Green www.fontstuff.com

Tradução/Adaptação: Paulo Costa – www.e-dicas.blogspot.com

Construir um Formulário em VBA para Excel

Introdução Um formulário é uma janela de diálogo personalizada que se constrói utilizando o Editor de Visual Basic.

Este exemplo é construído em Excel mas pode ser utilizado em qualquer outro programa que suporte

VBA.

Com um formulário poderá criar um interface amigável para o seu livro ou documento, tornando assim

mais controlável para si e mais simples para o utilizador.

Sobre o projecto Este documento mostra como construir um simples formulário para inserir dados pessoais sobre despesas numa folha de cálculo. O trabalho está dividido em duas secções principais: a construção do formulário em si e de seguida, escrever o código VBA para que ele funcione. O formulário final será parecido com a imagem seguinte (Fig.1).

Fig. 1 – O projecto de Formulário terminado.

Page 2: Construir Um Formulario Em VBA Para Excel

2

NOTA: as imagens aqui apresentadas mostram como são as janelas na versão Excel 2010 a correr num

sistema operativo Windows Vista. Se estiver a trabalhar numa outra versão do Excel ou noutro sistema

operativo a diferença será pequena, mas todas as técnicas explicadas serão exactamente iguais.

Construir o Formulário Inicie o Excel e abra o Editor de Visual Basic (atalho de teclado: [Alt]+[F11]). Irá necessitar das janelas do

Project Explorer e Properties Window por isso, se não estivem visíveis coloque-as através do Menu

View.

DICA: ao construir o seu formulário tente evitar o duplo clique em qualquer objecto a menos que as

instruções o indiquem), porque isso por vezes abre a janela de código do formulário. Se isso acontecer

acidentalmente, simplesmente feche a janela do código no botão fechar ou volte à janela do Formulário

com o atalho de teclado [Control]+[Tab].

Inserir um novo Formulário Certifique-se que o actual livro de trabalho (por exemplo, VBAProject(Livro1)) está seleccionado na

janela Project Explorer. De seguida abra o menu Inserir e escolha UserForm. Quando fizer isso um novo

formulário em branco irá surgir na janela de código do Editor de Visual Basic e uma entrada

correspondente surgirá na janela Project Explorer (Fig.2). Nesta janela verá uma nova pasta chamada

Forms contendo o novo formulário ao qual foi atribuído o nome de UserForm1.

A barra ToolBox (Fig.3) deverá estar visível caso contrario, clique algures no Formulário (O Editor de

Visual Basic esconde a ToolBox quando acha que estamos a trabalhar noutro objecto) e se mesmo assim

ainda não estiver visível abra-o através do menu View.

Fig. 3 - A janela Project Explorer mostra o formulário.

Fig. 2 - A ToolBox

Page 3: Construir Um Formulario Em VBA Para Excel

3

O Formulário tem um limite pontilhado ao seu redor. No contorno, no canto inferior direito e a meio da

aresta inferior e do lado direito do formulário, existem pequenos quadrados brancos. Estes são as alças

de redimensionamento. Poderá utilizar o rato para agarrar e arrastar de forma a redimensionar para o

tamanho necessário. A grelha de pontos no interior do formulário serve para ajudar a alinhar os

objectos facilmente.

Renomear o Formulário e adicionar um título Um projecto simples pode incluir vários formulários por isso é boa ideia dar a cada um nome

significativo. Com o formulário seleccionado procure a propriedade Name na janela Properties Window

(é normalmente a primeira propriedade da lista) e altere-o para frmDespesas. De seguida altere a

propriedade Caption para Despesas Pessoais. A janela Project explorer mostra agora o novo nome do

formulário e a barra de título mostra a nova propriedade caption (Fig.4).

Quando nomear formulários e os seus controlos lembre-se que não pode incluir espaços ou alguma das

“palavras reservadas” (i.e. aquelas palavras que fazem parte da linguagem do VBA tal com “Date”).

Adicionar o controlo Caixa de Texto e um Rotulo Os controlos são objectos, como caixa de texto, caixa de combinação e botões de comando, que serão

inseridos no formulário. A selecção dos controlos é feita nos botões da ToolBox. Aponte para os botões

da Toolbox para ver a legenda de cada um deles.

Adicione uma caixa de texto ao formulário, clicando no respectivo botão1 e depois clique mais ou menos

no centro do formulário. Assim como nos próprios formulários, os controlos possuem um contorno

pontilhado e alças de redimensionamento, isto quando o objecto está seleccionado (clique num objecto

para o seleccionar).

Poderá alterar o tamanho e a forma do controlo, quer agarrando e arrastando as alças de

redimensionamento (o ponteiro do rato mudará para uma dupla seta (Fig. 5)) quer alterando os valores

das propriedades Height e Width na janela Proprieties Window. Para mover um controlo agarre no

limite pontilhado (o ponteiro do rato mudará para uma cruz bidireccional (Fig. 6)) ou altere os valores

das propriedades Top e Left.

1 TextBox

Fig. 4 - A barra de título do formulário mostra a nova legenda

Page 4: Construir Um Formulario Em VBA Para Excel

4

Arraste a caixa de texto para perto do topo e mais ou menos centrado no formulário.

Cada controlo deverá ter um nome suficientemente identificativo de modo a que quando estiver a

escrever o código possa facilmente identifica-los. Este controlo em particular tem o nome predefinido

de TextBox1. Utilize a janela Properties Window para mudar o nome para txtnome.

DICA: Quando atribuir nomes aos controlos é útil adicionar um prefixo descritivo do tipo de controlo

(“txt” para as caixas de texto, “cbo” para caixas de combinação, et.). Isto permite lembra-lo qual o tipo

de controlo quando estiver a trabalhar com o código. Permite também forçar a que os nomes

apareceram agrupados quando vistos numa lista ordenada. Alem disso também permite utilizar palavras

que isoladas não são permitidas. (ex. txtDate em vez de Date).

Agora utilize a TollBox para inserir um rótulo2 no formulário. Para alterar a legenda do rótulo poderá

digitar directamente no rótulo ou mudar na janela Properties Window. Mude a legenda para Nome:.

Mude a propriedade TextAlign do rótulo para 3-fmTextAlignRight e de seguida dê um duplo clique na

alça de redimensionamento do canto inferior direito, de modo a ajustar a dimensão ao texto (Fig. 7).

Arraste o rótulo de modo a ficar à esquerda da caixa de texto, Nome.

Fig. 7 - Duplo clique na alça do canto inferior direito para ajustar o tamanho do rotulo

Quando arrasta os controlos no formulário estes são automaticamente ajustados à grelha de pontos.

Embora esta seja um recurso útil, por vezes podemos necessitar de maior precisão. Pode verificar que

não consegue colocar o rótulo exactamente ao centro da caixa de texto. A grelha força-o a ficar acima

ou abaixo. Utilize a janela Properties Window para subtrair (ou adicionar caso seja necessário) 3

unidades à propriedade Top do rótulo, de forma a posicionar correctamente com a caixa de texto (Fig.

8).

2 Label

Fig. 6 - Redimensionar um controlo

Fig. 5 - Mover um controlo

Page 5: Construir Um Formulario Em VBA Para Excel

5

Fig. 8 - Utilize a janela Properties Window para ajustar a posição final do controlo

Não é necessário dar um novo nome ao rótulo porque não nos vamos referir a ele neste projecto.,

noutras circunstâncias poderá ser necessário.

Adicionar os restantes controlos Utilize as mesmas técnicas para adicionar os restantes controlos ao formulário. Precisa adicionar quatro

caixas de texto, uma caixa de combinação (caixa de texto com uma lista pendente), uma caixa de

verificação e três botões de comando. Segue a lista dos controlos em falta e as suas propriedades:

Caixa de texto ................ Name: txtapelido Rotulo ............................. Caption: Apelido: Caixa de combinação ..... Name: cboDepartamento Rotulo ............................. Caption: Departmento: Caixa de texto ................ Name: txtData Rotulo ............................. Caption: Data: Caixa de texto ................ Name: txtquantia Rotulo ............................. Caption: Quantia: Caixa de Verificação ....... Name: chkRecibo, Caption: Recibo? Caixa de texto ................ Name: txtDescricao, Height:45, Width:132, scrollbars: 2-fmScrollbarsVertical Rotulo ............................. Caption: Descrição: Botão de comando ......... Name: cmdOK, Caption: OK Botão de comando ......... Name: cmdLimpar, Caption: Limpar Botão de comando ......... Name: cmdCancelar, Caption: Cancelar DICA: A qualquer altura poderá verificar qual o aspecto que o formulário está a tomar, bastando para isso pressionar a tecla [F5] ou clicando no botão Run da barra de ferramentas do Editor de Visual Basic. Ao fazer isso irá surgir o formulário no programa hospedeiro (neste caso o Excel). Para voltar ao Editor de Visual Basic, feche o formulário, clicando no botão [x] no canto superior direito.O formulário quando concluído deverá ser similar à imagem seguinte (Fig. 9):

Fig. 9 - O Formulário concluído em vista esquema de formulário (esquerda) e em uso (direita)

Page 6: Construir Um Formulario Em VBA Para Excel

6

Criar a lista para a caixa de combinação A caixa de escolha do Departamento, precisa agora que lhe seja atribuída a lista que deve apresentar.

Há duas maneiras de fazer isso. Pode ser feito através de código (este método está descrito na secção

seguinte) ou podemos indicar uma área nomeada do livro. Este último método é o mais utilizado porque

podemos editar a lista facilmente sem necessidade de reescrever código algum.

Mude para o Excel seleccione uma folha do mesmo livro. Escreva numa coluna os elementos que deseja

que surjam na lista da caixa de combinação. Coloque um elemento em cada célula. Se desejar que os

elementos aparecem ordenados alfabeticamente, ordene os elementos na própria folha de cálculo.

Agora seleccione as células que vão dar origem à lista de opções e atribua-lhes um nome. A maneira

mais fácil é clicar na caixa de nome (mesmo por cima da célula A1), escreva o nome Departamentos,

(Fig. 10) clicando de seguida na tecla [Enter]. Clique numa célula qualquer da folha de cálculo e

verifique se atribui o nome correctamente, clicando na seta preta da caixa de nome e seleccione o nome

Departamentos. Deverá visualizar o conjunto de células já seleccionadas.

Se precisar adicionar elementos à lista, poderá necessitar redefinir a sua lista. Poderá fazer isso, no

Menu Inserir escolha a opção Nome e Definir3. Volte ao Editor de Visual Basic e clique na caixa de

combinação, Departamento, para o seleccionar e de seguida aceda à janela Propreties Window e

localize a propriedade RowSource. Introduza o mesmo nome que atribuiu ao intervalo de células (neste

exemplo Departamentos).

Verifique o formulário (clique na tecla [F5]) e verifique se já surge a sua lista (Fig. 11).

Verificar a ordem de tabulação Muitas pessoas gostam de usar a tecla [Tab] para se movimentarem nos elementos de um formulário. A

ordem que a tecla Tab segue a ordem com que são inseridos os controlos n o formulário.

3 No MS Excel 2007/2010 – No separador Formulas e gestor de Nomes, seleccione o nome dado e clique

em editar.

Fig. 10 – Atribui um Nome ao intervalo de células da lista

Fig. 11 - A caixa de combinação mostra a lista

Page 7: Construir Um Formulario Em VBA Para Excel

7

Execute o formulário (abra-o em Excel) e começando na caixa de texto, Nome, pressione a tecla [Tab]

repetidamente e verifique se segue a ordem logica. Se desejar mudar a ordem, feche o formulário e no

Editor de Visual Basic, clique no menu View e escolha a Tab Order. Aqui poderá mover os itens na lista

para cima e para baixo, de modo a controlar a comportamento da tecla [Tab] no formulário (Fig. 12).

Fig. 12 –A janela Tab Order

Escreva o Código VBA O esquema do formulário está agora pronto. O próximo passo é escrever o código VBA para que

funcione. É necessário código para cada um dos botões…

Código para o botão cancelar O botão Cancelar é o mais fácil de codificar. Terá de fazer o mesmo que faz o botão integrado ([X]), no

canto direito superior do formulário.

Duplo clique no botão de comando cmdCancelar (ou um clique com a tecla direita e escolha a opção

View Code) para abrir o módulo de código do formulário. O Editor de Visual Basic vai mostrar já as

linhas Sub e End Sub do evento Click. Coloque o seu cursor no espaço vazio entre estas linhas, pressione

a tecla [Tab] e escreva a seguinte linha:

Unload Me

O seu código deverá ser igual ao seguinte (Listagem 1):

Listagem 1

Private Sub cmdCancelar_Click()

Unload Me

End Sub

Teste o código. Clique no menu Debug e escolha a opção Compile VBAProject. Se obtiver uma

mensagem de erro verifique a escrita do código e compile o código de novo. De seguida mude para a

vista esquema de formulário (pressione [Control]+[Tab] ou dê um duplo clique no nome do formulário

na janela Project Explorer). Pressione a tecla [F5] para executar o formulário em Excel. Clique no Botão

Cancelar e o formulário deverá fechar. Volte ao Editor de Visual Basic.

Page 8: Construir Um Formulario Em VBA Para Excel

8

Código para o botão Ok O Botão Ok tem de realizar três tarefas. Tem de:

1. Verificar se todas as informações foram fornecidas pelo utilizador (isto é chamado de validação).

2. Escrever os dados na folha de cálculo.

3. Apagar os dados do formulário para poder introduzir nova informação.

Na vista esquema de formulário dê um duplo clique no botão cmdOk e insira as linhas seguintes no

procedimento cmdOk_Click (Listagem 2):

Listagem 2

Private Sub cmdOK_Click()

If Me.txtnome.Value = "" Then

MsgBox "Por favor, insira um Nome.", vbExclamation, "Despesas

pessoais"

Me.txtnome.SetFocus

Exit Sub

End If

End Sub

Este procedimento utiliza uma instrução If para verificar o conteúdo da caixa de texto txtnome. Se a

caixa de texto estiver vazia (i.e. o seu conteúdo é “” – duplas aspas significam “nada”) uma mensagem é

mostrada e o foco é direccionado para essa caixa de texto (o cursor é colocado nessa caixa de texto) e o

procedimento é cancelado.

Como anteriormente, teste e compile o código. Abra o formulário e sem preencher a caixa de texto Nome, clique no botão OK. Deverá visualizar a mensagem de erro (Fig. 13). Feche a mensagem de erro e de seguida preencha a caixa de texto Nome e clique de novo no botão OK. Nenhuma mensagem deverá surgir agora. Faça uma entrada semelhante para cada caixa de texto e para a caixa de combinação. Pode ver o código

completo no final do documento (Listagem 8).

Alem de verificar se a caixa de texto tem algum valor, por vezes também é preciso verificar se é do tipo

correcto. Digite as seguintes declarações (Listagem 3). Estas usam a função IsNumeric() para verificar se

o valor da caixa de texto txtquantia é um numero ( e não algo como texto); e a função IsDate() para

verificar se o valor da caixa de texto txtData é uma data.

Listagem 3

Fig. 13 - A mensagem de erro lembra o utilizador a colocação do nome

Page 9: Construir Um Formulario Em VBA Para Excel

9

If Not IsNumeric(Me.txtquantia.Value) Then

MsgBox "A caixa da Quantia deve conter um número.", vbExclamation,

"Despesas pessoais"

Me.txtquantia.SetFocus

Exit Sub

End If

If Not IsDate(Me.txtData.Value) Then

MsgBox "A Caixa da data deve conter uma data.", vbExclamation, "

Despesas pessoais "

Me.txtData.SetFocus

Exit Sub

End If

Agora, tendo chegado a um ponto onde todos os itens necessários estão presentes e correctos, é hora

de escrever as entradas para a folha de cálculo. Este código envolve a utilização de uma variável para

armazenar o número de linhas da tabela.

Insira uma nova linha no inicio deste procedimento, imediatamente a seguir da declaração Private Sub

cmdOK_Click() e escreva a linha seguinte:

Dim Contadorlinhas As Long

Eu assumi que as entradas vão ser feitas na Folha1 do livro de trabalho actual, começando na célula A1.

Poderá preferir começar a tabela com uma linha de rótulos. O código funcionará na mesma com

cabeçalhos ou não.

Volte ao fim do código e insira a próxima linha:

Contadorlinhas = Worksheets("Folha1").Range("A1").CurrentRegion.Rows.Count

Esta declaração conta quantas linhas de dados estão incluídos na região que inclui a célula A1 e armazena esse número na variável Contadorlinhas. Agora escreva as linhas de código para escrever a data na folha de cálculo (Listagem 4): Listagem 4 With Worksheets("Folha1").Range("A1")

.Offset(Contadorlinhas, 0).Value = Me.txtnome.Value

.Offset(Contadorlinhas, 1).Value = Me.txtapelido.Value

.Offset(Contadorlinhas, 2).Value = Me.cboDepartamento.Value

.Offset(Contadorlinhas, 3).Value = DateValue(Me.txtData.Value)

.Offset(Contadorlinhas, 4).Value = Me.txtquantia.Value

.Offset(Contadorlinhas, 5).Value = Me.txtDescricao.Value

If Me.chkRecibo.Value = True Then

.Offset(Contadorlinhas, 6).Value = "Sim"

Else

.Offset(Contadorlinhas, 6).Value = "Não"

End If

.Offset(Contadorlinhas, 7).Value = Format(Now, "dd/mm/yyyy hh:nn:ss")

End With O código usa uma serie de declarações para escrever o valor de cada controlo numa célula. Cada célula

é identificada por uma posição relativa à célula A1, utilizando a propriedade de VBA Offset. Esta requer

2 números, o primeiro representa o número de linhas de distância da célula A1 (que está guardada na

variável Contadorlinhas), a segunda representa o número de colunas de distância da célula A1 (que é

escrita no código por um numero).

Page 10: Construir Um Formulario Em VBA Para Excel

10

Note que a função DateValue() é usada para mudar o valor da caixa de texto para uma data real (invés

de uma data apresentada como texto) antes de a passar para o Excel.

O valor de uma caixa de verificação é expressa em “TRUE” ou “FALSE” assim, como eu quero ver “SIM”

ou “NÃO” na folha de cálculo, o código utiliza uma declaração If para criar a entrada desejada.

Finalmente um registo de Registo de data/hora4 é inserido na última coluna usando o Format () para

especificar a hora exacta, fornecido pela função Now (). Agora é um bom momento para compilar e

testar o código novamente.

Para concluir o procedimento, após os dados terem sido escritos para a folha de cálculo, o formulário

precisa ser esvaziado. Isso exige uma outra variável a ser inserida no topo do procedimento:

Dim ctl As Control

Esta variável representa os controlos na folha de calculo e será utilizado no ciclo de visita a cada

controle, verifica se é uma caixa de texto ou uma caixa de combinação, e se for define o valor do

controlo para uma string vazia ("") . Se o controlo é uma caixa de verificação define o seu valor como

False. Digite as seguintes linhas (Listagem 5):

Listagem 5

For Each ctl In Me.Controls

If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then

ctl.Value = ""

ElseIf TypeName(ctl) = "CheckBox" Then

ctl.Value = False

End If

Next ctl

Compile e teste o código de novo. Se ocorrerem erros verifique se escreveu exactamente como

mostrado aqui.

Código para o botão Limpar A função deste botão é limpar o formulário manualmente, se o utilizador o desejar. Ele usa exactamente

o mesmo procedimento que a última parte do processo do botão OK, então dê um duplo clique no

botão cmdLimpar para criar seu procedimento de evento Click e digite o código mostrado na Listagem 5.

Você pode copiar o código do procedimento do botão OK para poupar tempo.

Compilar, Testar e Guardar O Formulário terminado Acabamos de completar o código para o formulário. Compile e teste. Se estiver satisfeito com o

funcionamento do formulário guarde o ficheiro. O trabalho está quase terminado. Tudo o que resta é

criar uma macro para abrir o formulário.

A macro para abrir o Formulário Como viu, é fácil abrir o formulário pelo Editor de Visual Basic, mas a pessoa que irá utilizar esta

ferramenta precisa de uma maneira simples de abrir o formulário pelo Excel. Há várias maneiras de

conseguir isso, todas envolvem a utilização desta simples declaração:

4 No original Timestamp

Page 11: Construir Um Formulario Em VBA Para Excel

11

frmDespesas.Show

Abrir o formulário manualmente Esta declaração pode ser incluída numa macro que o utilizador pode chamar através de um menu. Para

criar esta macro no Editor de Visual Basic, clique no menu Insert e escolha a opção Module para

adicionar um normal modulo ao livro que contem o formulário. Insira o código abaixo na janela deste

novo módulo (Listagem 6)

Listagem 6

Sub AbrirFormulario()

Worksheets("Folha1").Activate

frmDespesas.Show

End Sub

A primeira linha é opcional. Ela diz ao Excel para mudar para a folha Folha1. Mas uma vez que o código

que escreve os dados na folha de cálculo específica a folha pelo nome, este poderia ser omitido e ainda

assim os dados seriam colocados no sitio certo.

O utilizador pode correr esta macro a partir do menu do costume (Ferramentas> Macro> Macros) ou

poderá atribuir a macro a um menu personalizado, um botão numa barra de ferramentas, um botão na

folha de cálculo ou um objecto de desenho.

Abrir o formulário Automaticamente Poderá fazer uso de um dos procedimentos do Excel embutido no evento, para abrir o formulário

automaticamente quando o livro é aberto. No Editor de Visual Basic localize e clique duas vezes no

módulo ThisWorkbook na janela Project Explorer. Este módulo existe para manter as macros específicas

para este livro de trabalho.

No topo da janela de código existem duas listas pendentes. A da esquerda mostra neste momento

Geral. Abra a lista e escolha Workbook. O Editor do Visual Basic automaticamente cria a macro

Workbook_Open. Qualquer código que colocar neste macro será executado automaticamente quando o

livro abre. (Se quiser ver o que poderá fazer mais, dê uma olhadela nos outros itens na lista à direita.)

Complete do código da macro do seguinte modo (Listagem 7):

Listagem 7

Private Sub Workbook_Open()

Worksheets("Folha1").Activate

frmDespesas.Show

End Sub

Listagem com o código complete para o formulário Aqui está a listagem completa do código no módulo do formulário (Listagem 8)

Listagem 8

Private Sub cmdCancelar_Click()

Unload Me

End Sub

Page 12: Construir Um Formulario Em VBA Para Excel

12

Private Sub cmdLimpar_Click()

'Limpa o formulario

For Each ctl In Me.Controls

If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then

ctl.Value = ""

ElseIf TypeName(ctl) = "CheckBox" Then

ctl.Value = False

End If

Next ctl

End Sub

Private Sub cmdOK_Click()

Dim Contadorlinhas As Long

Dim ctl As Control

' Verifica os dados inseridos pelo utilizador

If Me.txtnome.Value = "" Then

MsgBox "Please enter a Nome.", vbExclamation, "Staff Expenses"

Me.txtnome.SetFocus

Exit Sub

End If

If Me.txtapelido.Value = "" Then

MsgBox "Please enter a Apelido.", vbExclamation, "Staff Expenses"

Me.txtnome.SetFocus

Exit Sub

End If

If Me.cboDepartamento.Value = "" Then

MsgBox "Please choose a Departmento.", vbExclamation, "Staff

Expenses"

Me.txtnome.SetFocus

Exit Sub

End If

If Me.txtData.Value = "" Then

MsgBox "Please enter a Data.", vbExclamation, "Staff Expenses"

Me.txtnome.SetFocus

Exit Sub

End If

If Me.txtquantia.Value = "" Then

MsgBox "Please enter an Quantia.", vbExclamation, "Staff Expenses"

Me.txtnome.SetFocus

Exit Sub

End If

If Me.txtDescricao.Value = "" Then

MsgBox "Please enter a Description.", vbExclamation, "Staff

Expenses"

Me.txtnome.SetFocus

Exit Sub

End If

If Not IsNumeric(Me.txtquantia.Value) Then

MsgBox "The Quantia box must contain a number.", vbExclamation,

"Staff Expenses"

Me.txtquantia.SetFocus

Exit Sub

End If

If Not IsDate(Me.txtData.Value) Then

MsgBox "The Data box must contain a Data.", vbExclamation, "Staff

Expenses"

Me.txtData.SetFocus

Exit Sub

End If

' Escrever os dados na folha

Page 13: Construir Um Formulario Em VBA Para Excel

13

Contadorlinhas =

Worksheets("Folha1").Range("A1").CurrentRegion.Rows.Count

With Worksheets("Folha1").Range("A1")

.Offset(Contadorlinhas, 0).Value = Me.txtnome.Value

.Offset(Contadorlinhas, 1).Value = Me.txtapelido.Value

.Offset(Contadorlinhas, 2).Value = Me.cboDepartamento.Value

.Offset(Contadorlinhas, 3).Value = DateValue(Me.txtData.Value)

.Offset(Contadorlinhas, 4).Value = Me.txtquantia.Value

.Offset(Contadorlinhas, 5).Value = Me.txtDescricao.Value

.Offset(Contadorlinhas, 6).Value = Format(Now, "dd/mm/yyyy

hh:nn:ss")

If Me.chkRecibo.Value = True Then

.Offset(Contadorlinhas, 7).Value = "Sim"

Else

.Offset(Contadorlinhas, 7).Value = "Não"

End If

End With

‘Limpa o formulário

For Each ctl In Me.Controls

If TypeName(ctl) = "TextBox" Or TypeName(ctl) = "ComboBox" Then

ctl.Value = ""

ElseIf TypeName(ctl) = "CheckBox" Then

ctl.Value = False

End If

Next ctl

End Sub