Professional Documents
Culture Documents
http://www.bestexcel.eng.br
Excel_Vba_Aula13
User Forms
O que uma User Form e para que servem? Essencialmente as User Forms
nascem da necessidade que tem o usurio de interagir com as procedures de
maneira a mais amigvel possivel. Podemos usa-las para nos devolver
informaes ou, o que mais comum, usa-las para entrada de dados. At aqui, e
nos inumeros exemplos e exercicios apresentados, lanamos mo das funes
MsgBox e InputBox, funes essas que, de certa maneira, se impoem como
preciosos recursos do VBA, no tocante a interao entre o meio exterior e o
ambiente de programao. Contudo, como se ver, as User Forms nos conduz a
uma nova dimenso, fazendo com que nossas procedures incorporem todas as
facilidades a que estamos acostumados no ambiente Windows.
Como criar uma User Form ?
Para criar uma User Form necessrio que nos mudemos de ambiente
acessando o (V)isual (B)asic (E)ditor. Para faze-lo, estando no Excel, basta
(1)manter calcada a tecla Alt enquanto aciona a tecla (F11).
(2)Outra maneira de acessar o VBE seguir os passos
<Tools; <Macro; <Visual Basic Editor
Estando agora no VBE, acionamos na barra de ferramentas Standard a opo
Project Explorer que nos permitir navegar pelas planilhas, modulos, user
forms e outros elementos do nosso projeto que, a titulo de exemplo, apelidamos
BookX.xls. Portanto os passos seguintes no VBE sero :
<Project Explorer; ><Insert User Form
Ou, o que mais seguro :
<Project Explorer; <VBA Project(BookX.xls); ><Insert; <User Form
O proximo passo ser introduzir na User Form recem criada, Labels, TextBoxes,
ListBoxes, CheckBoxes, CommandButtons, e muitos outros elementos que
chamaremos ActiveX controls. Cada um desses controles reagem de forma
peculiar respondendo a uma variedade de eventos.
Introduzindo controles ActiveX na User Form
http://www.bestexcel.eng.br
Pgina
http://www.bestexcel.eng.br
Pgina
http://www.bestexcel.eng.br
Pgina
Name
txNome
txIdade
LbNome
LbIdade
cbOK
Caption
------------Nome
Idade
OK
ControlSource
sheet1!b2
sheet1!c2
-------------------
http://www.bestexcel.eng.br
Pgina
Atingimos um estgio no qual estamos com nossa User Form montada com os
controles ActiveX que nos interessam no momento. Seria comodo para o
usurio, para chamar a User Form que acabamos de criar, ter adicionalmente, no
ambiente Excel, um CommandButton inserido em Sheet1.
Para tanto, a titulo de recordao apresentamos a sequencia de aes a serem
seguidas para criar em Sheet1 esse novo objeto :
Pgina
Como ser que o VBA interpreta o fato de que o usurio clicou no objeto
CommandButton para obter determinada resposta? Esse fato, assim como
muitos outros apresentados ao longo desse curso, interpretado pelo VBA como
sendo um evento. Em resumo, o fato de clicarmos num objeto com determinada
finalidade constitui-se num evento.
Consequentemente as duas instrues anteriores devem responder pelo seguinte
evento: Clicando-se no objeto commandbutton cuja propriedade Name :
cbBookX, queremos trazer para a tela a User Form DadosPessoais. Para isso
inserimos a instruo DadosPessoais.Show
Private Sub CommandButton1_Click()
DadosPessoais.Show
End Sub
Pgina
propriedade Caption: OK
http://www.bestexcel.eng.br
Pgina
O leitor j deve ter percebido que estamos usando prefixos para os controles
ActiveX de tal forma que seja possivel identifica-los rapidamente. Por exemplo
txNome; txIdade(TextBoxes); cbOK(CommandButtons); lbIdade(Label) etc...
Usando o commandbutton Cancel
CommandButton1
(Sheet2)
UserForm1
Controles ActiveX
ComandButton1
ComandButton2
TextBox1
Label1
Propriedade Name
Propriedade
Caption
Propriedade
Default
Propriedade
Cancel
cbIntroducao
Exibe Introducao
----------------
----------------
------------------------------TRUE
FALSE
-------------------------------
------------------------------FALSE
TRUE
-------------------------------
UFIntroducao
---------------cbOK
cbCancel
txNome
LbNome
Introducao
---------------OK
Cancel
Seu Nome ?
Operao:
(1)Clicamos no commandbutton cbIntroducao (caption: ExibeIntroducao), (2) a
User Form UFIntroducao (caption: Introducao) chamada para a planilha ativa
(Sheet2), (3)propositalmente, no providenciamos que a textbox txNome viesse
vazia, consequentemente ao ser carregada na tela o referido controle se
apresenta com dados. (4)se teclamos no objeto cbCancel (caption Cancel) a
propriedade Value da textbox txNome assumir o valor Empty (vide procedure
cbCancel_Click( )).(5)se teclamos no commandbutton cbOK os dados da
txNome so transferidos para a planilha e a User Form descartada da tela.
(6)se teclamos no commandbutton cbCancel a User Form descartada sem
afetar o conteudo da celula a2.
http://www.bestexcel.eng.br
Pgina
A ilustrao acima tem por objetivo chamar a ateno do leitor para os seguintes
fatos : (1)Ao criarmos a User Form DadosPessoais a mesma aparecer na sua
view particular (Observe que nosso VBAProject(BookX.xls) conta, sob o folder
Forms, com 4 User Forms) (2)Ao ser a User Form DadosPessoais criada, sob o
folder Forms (View Project Explorer) a barra de ferramentas Toolbox estar
disponivel para que o Usurio selecione e aplique os controles ActiveX que lhe
interessarem. (3)A lista de propriedades da User Form DadosPessoais pode ser
obtida fazendo : >Clique na User Form DadosPessoais com o (R)ight (M)ouse
(B)utton; <com o LMB selecione a opo Properties, ou ento, se a UserForm
estiver no modo de edio (as alas de arraste estaro presentes no seu contorno)
acione <View; <Properties Window (4)O valor da propriedade Name foi
alterado de UserForm1 para DadosPessoais. Esse alterao se reflete e fica
registrada na view Project Explorer como mostra a ilustrao acima. (5)Uma vez
aplicado um controle na User Form, para acessarmos sua lista de propriedades,
tambem h dois caminhos : >ActiveX (o controle entra no modo de edio);
<Properties ou ento : <ActiveX; <View; <Properties Window
http://www.bestexcel.eng.br
Pgina
10
http://www.bestexcel.eng.br
Pgina
11
http://www.bestexcel.eng.br
Pgina
12
Observe o foco sobre o controle OK como resultado das aes que definiram
as prioridades
http://www.bestexcel.eng.br
Pgina
13
Dando sequencia aos exemplos, vamos montar uma User Form que capte o
nome da pessoa e o seu nivel de escolaridade e em seguida, transfere esses
dados para a planilha. Vide detalhes no preenchimento do quadro abaixo, fase
que corresponde ao planejamento, onde se prev os elementos que participaro
do projeto, as propriedades que sofrero alteraes, etc...
CommandButton1
UserForm1
Controles ActiveX
CommandButton1
CommandButton2
TextBox1
Label1
Frame Control
OptionButton1
OptionButton2
OptionButton3
OptionButton4
OptionButton5
OptionButton6
Propriedade
Propriedade
Name
Caption
cbChamaUserForm Escolaridade
UserForm1
Nome e Escolaridade
CbOK
CbCancel
TextNome
Lb1
Frame1
obPrimario
obColegial
obUniversitario
obPosGraduado
obMestrado
obAnalfabeto
OK
Cancel
---------------Nome :
Selecione seu Nivel
Primario
Colegial
Universitario
Pos Graduacao
Mestrado
Analfabeto
Propriedade
Accelerator
---------------------------------------------------------------------------------N
---------------P
C
U
G
M
A
Propriedade
Default
------------------------------------TRUE
FALSE
-------------------------------------------------------------------------------------------------------------
Propriedade
Cancel
------------------------------------FALSE
TRUE
----------------------------------------------------------------------------------
Propriedade
Value
-------------------------
6
7
1
0
2
0
1
2
3
4
5
TRUE
Pgina
Tab
Index
-------
14
Observaes :
(1)Estando na view Object (onde montamos a User Form, seus controles,
definimos as propriedades e estabelecemos as prioridades) se acionamos (F7)
ganhamos acesso as procedures (view Code) (2)Estando na view Code onde
editamos as procedures, se acionamos Shft (F7) voltamos a view Object
http://www.bestexcel.eng.br
Pgina
15
http://www.bestexcel.eng.br
Pgina
16
Button1
Button2
Caption
UserForm1
CommandButton1
CommandButton2
CommandButton3
cbShow
cbHide
cbUnLoad
UserForm2
CommandButton1
UserForm2
cbOK
UserForm2
OK
http://www.bestexcel.eng.br
Pgina
17
A UserForm1
A UserForm2
Seja montar uma UserForm de tal forma que uma vez preenchidos os seus
requisitos (commandbuttons, textboxes, checkboxes, optionbuttons, etc...) nos
apresente uma MessageBox com os dados desse preenchimento.
Abrimos um novo arquivo que denominamos Book7x.xls. Na Sheet1 inserimos
um button (a partir da barra de ferramentas Forms; Caption: Faixa Etaria) que
http://www.bestexcel.eng.br
Pgina
19
Name
UserForm1
Lb1
txNome
Frame1
obMenos25
obEntre2535
obMais35
cbOK
cbCancel
Caption
Faixa etaria
UserForm1
Nome:
Faixa Etaria
Menos de 25 anos
Entre 25 e 35 anos
Mais de 35 anos
OK
Cancel
Pgina
20
Ao inserirmos uma UserForm, observamos que a mesma vem com uma grade de
pontos, elementos necessrios e que servem de guia para aplicarmos nossos
controles alinhados, com as mesmas dimenses e igualmente espaados visando
obter um resultado final dotado de certa esttica. Apesar disso no muito
simples faze-lo. Eis algumas dicas para resolver essa questo. (1)Se voce aplicar
2 ou mais OptionButtons, segure a tecla Shift enquanto clica nos mesmos. Com
esses controles selecionados, acesse a opo Format no Menu para alinha-los e
espaa-los igualmente. (2)Se voce vai aplicar varios OptionButtons, aplique o
primeiro e ajuste o seu tamanho. A partir desse modelo use o mtodo Copy
Paste para inserir os demais. (3)Vamos supor que voce vai aplicar 3 Option
http://www.bestexcel.eng.br
Pgina
21
Buttons na sua User Fom. Esses controles, num primeiro momento, estaro
desalinhados e espaados um dos outros de forma irregular. Segure a tecla Shift
e mantendo-a calcada, clique no primeiro, segundo e terceiro OptionButton.
Observar que esses 3 controles ficaram selecionados. Observar tambem que o
OptionButton selecionado em primeiro lugar tem as alas de arraste brancas,
enquanto os demais tem as alas de arraste pretas. Ao comandar o alinhamento,
o mesmo ser providenciado tomando por base o que tem as alas brancas. (4)O
que foi dito em relao ao controle OptionButton se aplica aos demais controles.
DoEvents
H casos em que o codificador deseja que a User Form saia de cena to logo
acione um controle. Neste caso as instrues UserForm1.Hide:DoEvents
devero se localizar no topo da procedure. O exemplo a seguir esclarece.
Private Sub CommandButton1_Click( )
ou Me.Hide
UserForm1.Hide
DoEvents
For Linha = 1 to 3
Cells(Linha, 1) = Linha
Next
Unload UserForm1
End Sub
'ou Me.Hide
Pgina
22
(1)
(3)
Abrimos um novo arquivo (Book12x.xls) onde vamos inserir duas User Forms :
UserForm1 e UserForm2 e um modulo(Module1). Introduzimos na propriedade
http://www.bestexcel.eng.br
Pgina
24
Operao :
Executamos a Procedure Teste( ). A mensagem Initialize_Tag entra em cena
mostrando que o mtodo Show acionou a event procedure Private Sub User
Form1_Initialize. Quando clicamos no boto OK dessa messagebox entra em
cena a mensagem Activate_Tag concomitantemente com a UserForm1. Fica
assim comprovado mais uma vez que o metodo Show invoca dois eventos :
Initialize e Activate nesta ordem.
A instruo Load e a Event procedure Initialize
http://www.bestexcel.eng.br
Pgina
25
UserForm1
Caption
Teste
UserForm1
Tag
Outros
CommandButton1 CommandButton1
Opcional
txEndereco1
-------Obrigatorio
txEndereco2
-------Obrigatorio
txEndereco3
-------LbResid
LbEscr
LbOutros
Residencia
Escritorio
End. Opcional
O quadro acima deixa claro que na Sheet1 devemos ter um button (criado a
partir da Barra de Ferramentas Forms) que chame a procedure Teste( ) (a ser
desenvolvida na view Book14x.xls-Module1(Code)). Na view Project Explorer,
inserimos uma UserForm(UserForm1) e um Modulo(Module1). Na UserForm
aplicamos os controles indicados, observando (1)que a propriedade Tag, para duas
primeiras textboxes foi preenchida com o string Obrigatorio. A finalidade ser usar este lance na event
procedure. (2)Que o controle CommandButton1 sendo opcional neste projeto, o deixamos de lado. (3)Que
as instrues InputBox, conforme demonstramos, podem ser posicionadas na Sheet1 adequadamente, desde
que providenciemos suas coordenadas de forma a evitar a superposio de objetos. (4)Que o metodo Show
deflagra as events procedures Initialize e Activate, nesta ordem, e que nos aproveitamos desse fato. (5)A
event procedure Initialize tem por finalidade preparar o preenchimento, no sentido de tornar mais eficiente
ou acelerar as aes que se seguirem. (6)Que incluimos a instruo For Each Next ao final da event
procedure Activate( ) para demonstrar como possivel percorrer uma coleo de controles capturando,
nesse percurso, elementos de interesse do usurio. (7)Que incluimos na MsgBox final um cone
(vbInformation) e um ttulo para essa caixa de mensagem. (8)Que a instruo MsgBox ao final, embora
desnecessria, tem por objetivo interromper a execuo deixando mostra a UserForm preenchida com os
dados fornecidos pelo usurio.
Pgina
26
http://www.bestexcel.eng.br
Pgina
28
Fim da Aula13
http://www.bestexcel.eng.br
Pgina
29