Escolar Documentos
Profissional Documentos
Cultura Documentos
Parte 2
Ao adquirir este eBook voc tem o direito de l-lo na tela do seu computador e de imprimir
quantas cpias desejar, desde que sejam para uso pessoal. vetada a distribuio deste eBook,
mediante cpia ou qualquer outro meio de reproduo, para outras pessoas. Se voc recebeu
este eBook atravs de e-mail ou via FTP de algum site da Internet, ou atravs de CD de Revista,
saiba que voc est com uma cpia pirata, no autorizada. Se for este o seu caso entre em
contato com o autor atravs do e-mail rm@faircourt.com ou comunique diretamente ao nosso
site atravs do e-mail webmaster@juliobattisti.com.br.
Ao regularizar a sua cpia, voc estar remunerando, mediante uma pequena quantia, o trabalho
do autor e incentivando que novos trabalhos sejam disponibilizados.
Visite periodicamente o site www.juliobattisti.com.br para ficar por dentro das novidades!
Pr-requisitos
Para completar este curso necessrio um conhecimento mdio do ambiente de trabalho do
Excel em especial do VBE (Visual Basic Editor). Porm, quanto melhor o seu conhecimento deste
ambiente melhor ser o aproveitamento deste curso, pois no somente veremos manipulaes
diretamente no Excel como tambm acesso a banco de dados.
Este mdulo visa a criao de formulrios contendo os controles MultiPage e Tabstrip. Porm,
em certas situaes outros controles sero utilizados em conjunto para resolver problemas
encontrados no nosso dia-a-dia.
Este cursos a segunda parte do curso sobre formulrios no Excel. Se voc ainda no possui o
primeiro curso ele pode ser adquirido no seguinte endereo
http://www.juliobattisti.com.br/cursos/excelvbaforms/default.asp.
Os leitores interessados podem adquirir o curso bsico de Excel em 120 lies no seguinte
endereo: www.juliobattisti.com.br/excel120/excel120.asp que servir como trampolim
para um melhor aproveitamento e desenvolvimento deste mdulo.
Qualquer dvida referente a este mdulo podem ser colocadas diretamente no frum Excel
avanado no endereo: http://www.juliobattisti.com.br/forum/default.asp
Comentrios e sugestes para melhora do material podem ser enviados diretamente para o autor
no endereo rm@faircourt.com
NDICE ANALTICO
Introduo ........................................................................................................................................ 1
Bem-vindo a srie Como Fazer. ........................................................................................... 1
Antes de continuar .................................................................................................................. 1
Introduo
Nas sries que sero escritas estaremos olhando aspectos distintos do Excel de acordo com a
demanda do frum Excel Jlio Battisti (http://www.juliobattisti.com.br). A inteno principal
fornecer ao internauta uma ferramenta que concentre a ateno na soluo de um problema
especfico.
Esta a segunda parte da srie sobre formulrios no Excel. A primeira parte lida com os controles
Listbox e Combobox. Se voc no possui a primeira parte ela pode ser adquira em
http://www.juliobattisti.com.br/cursos/excelvbaforms/default.asp. Aqui, veremos
como manipular os controles MultiPage e TabStrip de forma eficiente no Excel. Estaremos
olhando a maneira como o Excel manipula estes controles e como utilizar este conhecimento para
resolver problemas.
Antes de continuar
O trabalho foi desenvolvido no Excel 2003. Devido rpida mudana em termos de tecnologia de
software, ateno sempre ser dada s verses mais recentes do aplicativo Excel.
No existe um pr-requisito per se; porm, o leitor deve estar ciente de que com o conhecimento
bsico em dia, o aproveitamento do material ser muito melhor. Sem o devido conhecimento de
algumas partes bsicas que envolvem funes, este mdulo se tornar mais laborioso e difcil do
que realmente para aqueles sem o conhecimento bsico.
Um MultiPage, por exemplo, ser bastante til quando precisamos trabalhar com uma grande
volume de informaes que podem ser classificadas em diversas categorias. Isto geralmente
ocorre quando trabalhamos com banco de dados. Vamos supor que estamos lidando com
informaes cadastrais de funcionrios. Utilizando o MultiPage podemos agrupar as informaes
por categorias: uma pgina poderia conter informaes pessoais; outra pgina relacionaria os
interesses do funcionrio e assim por diante. A vantagem neste caso que podemos manter
todas as informaes sobre o funcionrio em um nico formulrio onde as informaes so
agrupadas por pginas.
Um TabStrip por outro lado contm as mesmas guias (tabulaes) que o MultiPage, porm os
objetos colocados em uma guia so compartilhados com todas as outras guias. Em outras,
palavras se voc colocar uma caixa de texto na primeira guia do MultiPage, esta caixa somente
estar disponvel nesta guia. J no TabStrip a mesma caixa de texto estar presente em todas
as guias e exatamente na mesma posio.
Ambos os controles podem ser acessados a partir da caixa de ferramentas do VBE. Caso estes
controles no estejam presentes na caixa de ferramentas, voc poder inclu-los da seguinte
forma:
1. Clique com o boto direito do mouse sobre a caixa de ferramentas e escolhas a opo
Controles adicionais;
Figura 1-1
Por padro tanto o MultiPage quanto o TabStrip inserem 2 tabulaes. Tabulaes adicionais
podem ser acrescentadas atravs de um clique-direito sobre o objeto em questo. Por exemplo,
para acrescentar uma pgina extra ao MultiPage:
Figura 1-2
Observe que a caixa de propriedades mostra as propriedades para cada pgina quando ela
selecionada. Se voc deseja modificar o Name ou Caption de uma pgina qualquer, basta
selecionar a pgina em questo e modificar as propriedades. Se a caixa de propriedades no
estiver visvel, pressione F4 para ativ-la.
Alm da opo Nova pgina, podemos no mesmo menu de atalho selecionar as seguintes
opes:
Excluir pgina
Renomear
Mover
A primeira opo simplesmente remove a pgina em questo. A opo Mover utilizada para
modificar a posio relativa da pgina, em outras palavras, a Page2 pode ser movida para ficar
antes da Page1 e assim sucessivamente.
Figura 1-3
Em termos de propriedades, ficarei por aqui. O motivo para no entrar nos detalhes das
propriedades e que explicaes podem ser encontradas no Ajuda (Help) que acompanha o VBA.
Em outras palavras, seria repetir aqui o que voc encontra gratuitamente no Ajuda.
A primeira coisa que precisamos entender como cada controle funciona. Como observado no
tpico anterior, um controle colocado dentro do TabStrip estar disponvel em todas as
tabulaes do controle TabStrip. Isso significa que o controle no est sendo colocado na guia,
mas no container das guias, isto , no controle TabStrip.
Por outro lado, quando voc adiciona um controle qualquer em um MultiPage, o controle
somente estar visvel na pgina onde ele foi adicionado.
Esta diferena indica como devemos escolher entre MultiPage e TabStrip. Vamos supor que o
layout de todas as pginas igual, mas cada pgina (guia) mostra valore diferentes. Neste caso,
estaremos interessados em um TabStrip, pois o layout estar disponvel em todas as guias
uniformemente.
Porm, se estamos interessados em layouts diferentes em cada guia onde os dados apresentado
esto ligados de uma forma ou de outra, estamos interessados em um MultiPage.
Figura 2-1
1
Voc deve estar se perguntando o motivo para a no traduo de Page e a traduo dos Tabs. Esta uma incgnita que somente os
tradutores dos controles podero sanar, pois no tenho idia dos motivos para a inconsistncia.
Autor: Robert F Martim Criado em: 01/02/2005
Publicado: www.juliobattisti.com.br ltima edio: 22/3/2005 19:49:00
Contato: rm@faircourt.com
6 Srie Como Fazer: Formulrios no Excel Utilizando VBA: Multipage e TabStrip
somente ficar visvel quando a guia for selecionada. Por outro lado, a caixa de texto presente no
TabStrip compartilhada nas guias.
Com esta diferena definida a deciso sobre qual escolher comea a tomar forma.
Antes de partirmos para assuntos mais avanados, nos dois prximos tpicos veremos como cada
controle separadamente.
Acredito que o maior potencial do controle MultiPage est em sua versatilidade, isto , em como
podemos criar diversas pginas contendo informaes relacionadas sem a necessidade de vrios
formulrios.
Neste primeiro caso, carregaremos dados contidos em nossa planilha para criar nossas pginas.
No decorrer do mdulo, veremos como carregar estas informaes de um banco de dados e
manipul-las.
J vi formulrios com vrios controles onde a propriedade visible passada para true ou false
para simular um MultiPage. desnecessrio dizer que alm de criar cdigo desnecessrio
controlar tudo isso em um lugar s com tudo amontoado realmente complicado.
Sem dvida que nosso conceito do que bom est sempre em movimento. Hoje, encontramos a
soluo acima e amanha inventamos uma forma nova de fazer algo.
Se voc alguma vez trabalhou com o Access talvez tenha tido contato com um destes controles.
No Excel, ele realmente pouco conhecido e utilizado.
Algo que voc certamente precisa saber para manipular um MultiPage da melhor forma possvel
diz respeito navegao pelas tabulaes do MultiPage.
A chave para isso est na propriedade Value. Esta propriedade ser revista mais adiante quando
construiremos formulrios mais avanados.
Cada pgina de um MultiPage recebe uma numerao que vai de zero at o nmero de pginas
inseridas no controle. A figura abaixo mostra um formulrio contendo um MultiPage com quatro
pginas:
Figura 3-1
Como a quarta pgina a selecionada, se este formulrio iniciado esta ser a pgina ativa.
Porm, em um sistema de navegao voc certamente deseja que a pgina inicial seja a Page1.
A numerao das pginas iniciada em zero (0) e no caso acima a pgina quatro recebe o valor
3. Para forar a inicializao pela primeira pgina, basta definir o seguinte cdigo em seu
formulrio:
Ou ainda:
Se voc est criando um sistema de navegao no formulrio acima com certeza voc quer que o
formulrio seja iniciado pela pgina um. Alm disso, provvel que voc queira omitir as
tabulaes tambm.
Para omitir as tabulaes utilizamos a propriedade Style. Est propriedade pode receber os
argumentos fmTabStyleTabs, fmTabStyleButtons ou fmTabStyleNone. A primeira opo
a mostrada na figura acima. A segunda bem similar ao boto de alternncia (Toggle
Button) e a terceira a completa remoo das tabulaes.
Figura 3-2
Observe que a moldura do MultiPage no est mais presente. Se os botes fossem removidos
(utilizando a ltima opo de estilo) o que voc obtm um formulrio em branco. Ao carregar o
formulrio, se no houver nenhum outro controle na pgina do MultiPage a impresso que temos
que no h nada no formulrio.
A prxima pergunta ser: se no h nenhuma tabulao, ento, como navegar pelas pginas?
O novo valor do MultiPage em caso de avano ser o valor atual do MultiPage mais um. A linha
On Error Resume Next colocada, pois ao atingirmos o final do controle, no caso acima pgina
quatro valor trs, o prximo valor no poder ser passado para o controle e haver um erro.
Observe a figura:
Figura 3-3
Com a linha comentada ocorre um erro durante o avano. O exemplo acima com o On Error
Resume Next apenas um paliativo. Nos tpicos que seguem mostrarei como contar o
problema de outra forma.
Por analogia, para voltar uma pgina subtramos um do valor atual da pgina:
Uma propriedade que pode ser bastante til a MultiRow. Se voc j utilizou o caixa de opes
do Excel voc certamente j viu isso:
Figura 3-4
A figura acima mostra a caixa de opes do Excel com seu MultiPage com tabulaes como se
fossem as abas de etiquetas de uma pasta de arquivo. Este efeito conseguido quando
modificamos a propriedade MultiRow para True (verdadeiro):
Figura 3-5
A figura acima mostra o que ocorre ao modificarmos esta propriedade. Como pode ser observado,
o resultado final dependente do tamanho do MultiPage e de cada tabulao dentro do
MultiPage.
Esta caracterstica pode representar uma grande vantagem. Supondo que os campos so
exatamente os mesmos para duas pginas onde somente os dados mudam, ento, devemos usar
um TabStrip ao invs de um MultiPage, pois o design constante em todas as pginas.
Um exemplo interessante o exemplo padro dado pela prpria Microsoft. O exemplo consiste
em um formulrio com um TabStrip com trs tabulaes com o nome de trs cores. No TabStrip
h uma moldura de imagem e a moldura muda de cor conforme selecionamos uma tabulao
diferente.
Este exemplo, de domnio pblico, acompanha este mdulo, mas estarei mostrando o meu prprio
exemplo.
Para iniciar o seu formulrio com o ndice do TabStrip na primeira pgina, voc deve utilizar o
mesmo esquema que o MultiPage:
Ou ainda:
O exemplo a seguir mostra como utilizar o TabStrip em uma situao onde voc tem vrias
planilhas que representam estantes onde produtos so guardados. Cada estante possui suas
prateleiras onde os produtos so guardados.
Autor: Robert F Martim Criado em: 01/02/2005
Publicado: www.juliobattisti.com.br ltima edio: 22/3/2005 19:49:00
Contato: rm@faircourt.com
Srie Como Fazer: Formulrios no Excel Utilizando VBA: Multipage e TabStrip 13
O nosso formulrio possui um TabStrip com trs tabulaes. Cada tabulao representa uma
planilha. Dentro do TabStrip temos duas caixas de texto onde cada uma recebe a prateleira onde
se encontra o produto e o nome do produto. Dentro do mesmo TabStrip h dois botes para
navegao dentro da estante, isto , navegao pelos produtos.
Figura 4-1
Figura 5-1
Com as pginas criadas, podemos passar a propriedade Style para fmTabStyleNone para
remover as tabulaes das pginas. Voc pode modificar esta propriedade a qualquer momento,
mas o ideal remover as tabulaes ao terminar todo o cdigo e design para facilitar acesso s
pginas em caso de necessidade durante o desenvolvimento.
Iniciarei pelo cdigo do formulrio, isto , quando o formulrio for ativado algo acontecer:
2
Se desejar, acrescente um valor para a propriedade Accelerator dos botes. Neste caso, utilizo a letra V e n para acelerar o
acesso aos dois controles via teclado.
Autor: Robert F Martim Criado em: 01/02/2005
Publicado: www.juliobattisti.com.br ltima edio: 22/3/2005 19:49:00
Contato: rm@faircourt.com
16 Srie Como Fazer: Formulrios no Excel Utilizando VBA: Multipage e TabStrip
A primeira coisa a ser feita assegurar que iniciamos na primeira pgina. Em seguida, rodamos a
rotina chkPaginao. O que esta rotina faz bastante simples. Imagine a situao onde estamos
no limite do MultiPage? Se voc clicar no boto Voltar haver um erro, pois no h mais nada
para a esquerda. Por outro lado, se voc deseja avanar e no h mais pginas para avanarmos;
ento, haver um erro tambm.
Sub chkPaginao()
ndice = MultiPage1.Value
fim = MultiPage1.Pages.Count - 1
Case fim
cmdVoltar.Enabled = True
cmdAvanar.Enabled = False
Case Else
cmdVoltar.Enabled = True
cmdAvanar.Enabled = True
End Select
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' VOCE PODE UTILIZAR AS CONDICOES ABAIXO PARA SIMULAR '
' AS CONDICOES DO BLOCO SELECT CASE-END SELECT '
' APRESENTADAS ACIMA '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'If ndice = 0 Then
' cmdVoltar.Enabled = False
' cmdAvanar.Enabled = True
' Exit Sub
'End If
End Sub
Aqui, avalio o caso referente ao ndice atual do MultiPage. Cada pgina representada por um
nmero e este nmero passado para varivel ndice. Uma outra varivel importante a
referente ao final da paginao. A varivel fim encontrada contando-se o nmero total de
pginas e subtraindo um deste total. Isto necessrio porque a primeira pgina tem ndice 0
(zero); portanto a contagem resultar no nmero correto de pginas, mas com um ndice a mais.
Autor: Robert F Martim Criado em: 01/02/2005
Publicado: www.juliobattisti.com.br ltima edio: 22/3/2005 19:49:00
Contato: rm@faircourt.com
Srie Como Fazer: Formulrios no Excel Utilizando VBA: Multipage e TabStrip 17
Com estes dois ltimos cdigos prontos, terminamos o nosso sistema de navegao. A figura
abaixo mostra a situao onde nos encontramos nos extremos de nosso formulrio:
Figura 5-2
Ao iniciar o boto Voltar desativado por no haver mais pginas esquerda. No outro extremo,
o boto avanar desativado por no haver mais pginas para avanarmos. Ao removermos as
tabulaes o efeito criado pelo sistema ainda melhor:
Figura 5-3
Na figura acima, naveguei at a terceira pgina. Como o MultiPage encontra-se dentro de uma
Moldura a transio entre pginas acontece sutilmente e todos os controles parecem estar
dentro da Moldura.
A nossa prxima tarefa criar um Assistente para avaliao de crdito. No problema que definirei,
ns estamos interessados em saber informaes pessoais do indivduo, informaes de trabalho,
informaes sobre ganhos e produto a ser comprado e financiado.
Aqui, estou assumindo que voc possui certo conhecimento de matemtica financeira. Porm,
mesmo no tendo o desenvolvimento do problema bastante simples e fcil de acompanhar.
Para iniciar crie trs planilhas. Nomeie uma de Input, onde inseriremos os dados de entrada do
formulrio e a outra de Resultados, onde os resultados dos clculos sero colocados.
A primeira ter os seguintes dados (veja pasta de trabalho que acompanha este tpico):
Figura 6-1
E a planilha de resultados:
Figura 6-2
Crie um formulrio e adicione um MultiPage com cinco pginas. Cada pgina dever conter os
controles conforme as figuras:
Para a pgina 5, o controle a ser acrescentado uma ListBox (Caixa de Listagem) que ser
utilizada para colocar o resultado de nossos clculos.
Os controles de navegao devem estar fora do Multipage e para dar um ar melhor ao nosso
projeto, utilize uma Moldura (Frame) para agrupar os controles de cada pgina.
Aps posicionar todos os seus controles e estiver satisfeito com o layout geral de seu formulrio e
pginas do MultiPage, modifique a propriedade Style do MultiPage para fmTabStyleNone
para esconder as tabulaes, obtendo um resultado final como mostra a figura abaixo:
Figura 6-8
O layout final fica, obviamente, a critrio do leitor. Ele no precisa ser exatamente como
apresentado. D o seu prprio toque pessoal ao formulrio. O melhor brincar com diferentes
layouts para ver qual se encaixa melhor na mensagem e ajuda que voc deseja passar e dar ao
usurio de seu formulrio.
'Checar os controles
chkControles
End Sub
Sub chkControles()
'guarda o ndice atual do MultiPage
ndice = pageAssistente.Value
Case fim
'Se for a ltima pgina, inibe o boto "Avanar"
cmdAvanar.Enabled = False
'Habilita o boto "Voltar"
cmdVoltar.Enabled = True
'Habilita o boto "Concluir"
cmdConcluir.Enabled = True
Case Else
'Para casos diferentes de incio e final das
'pginas, habilitar os botes de "Avanar" e "Voltar"
cmdVoltar.Enabled = True
cmdAvanar.Enabled = True
'Desabilitar o boto de "Concluir"
cmdConcluir.Enabled = False
End Select
End Sub
'Clula A2 = 0
ws.Range("A2") = 0
'Para = 1 at nper
For i = 1 To nper
'na planilha ws (Resultados)
With ws
'Clula ("A" & i + 2) = nper
.Range("A" & i + 2) = i
End Sub
'Proporciona o juros
juros = spinJuros.Value / 400
'Do valor lquido, apenas 30% pode ser comprometido com o financiamento
txt30pct = Val(txtLquido) * 0.3
End Sub
'Do valor lquido, apenas 30% pode ser comprometido com o financiamento
txt30pct = Val(txtLquido) * 0.3
End Sub
E nosso Assistente de Anlise de Crdito est pronto para ser rodado. Na ltima pgina, voc
dever obter um resultado similar a este:
Figura 6-9
No primeiro mdulo sobre formulrio, mostrei como carregar informaes de um banco de dados e
forma aqui apresentada ligeiramente diferente. A inteno ir construindo os modelos da base
at o topo, isto , iniciamos com um exemplo simples e vamos aumentando a complexidade at
atingirmos um aplicativo que seja o mais robusto possvel.
Uma questo que vez ou outra aparece no frum sobre como carregar imagens para um
formulrio. No exemplo que segue, mostrarei como carregar as informaes de um banco de
dados e como carregar uma foto tambm.
Os dados utilizados so do banco de dados Northwind. Para evitar problemas com fotos de
pessoas, utilizo fotos numeradas para que voc possa visualizar a mudana. Apenas uma tabela
do banco de dados Northwind utilizada.
As figuras abaixo mostram o que o nosso MultiPage deve conter e como ele ficar aps o
carregamento dos dados.
Figura 7-1
Um formulrio
Um mdulo
O formulrio ser carregado assim que o documento Excel for aberto. Assim sendo, precisamos
inserir o cdigo no pasta de trabalho para a execuo:
Assegure-se que os nomes utilizados so os mesmos que no exemplo dado. Se eles forem
diferentes ocorrer um erro:
Os trs primeiros casos so bem simples. O primeiro avana um registro e o segundo volta um
registro. J o terceiro simplesmente descarrega o formulrio. A quarta rotina chamada quando o
formulrio iniciado assegurando que estamos sempre na primeira pgina do MultiPage e que o
primeiro registro do BD carregado.
O prximo passo definir as variveis que usaremos. Antes de continuar, porm, instale as
referncias ao Microsoft ActiveX Data Object x.x. Library. Para tanto, no VBE, v at
Ferramentas Referncias, selecione o item acima e instale-o.
Com as referncias instaladas, abra o mdulo que voc criou e entre as seguintes variveis logo
no topo:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim nomeBD As String
Dim IDFunc As Long
Algo que precisamos observar que a forma como os dados so carregados igual para o incio
de formulrio, avano e retrocesso dos registros, portanto, no h necessidade de repetir o
mesmo cdigo vrias vezes. Ao invs disso, o que faremos passar as variveis para o rotina que
carregar os dados.
Sub carregarInfo()
geral ThisWorkbook.Path & "\BD\bd2.mdb", IDInicial
End Sub
Sub prximo()
geral ThisWorkbook.Path & "\BD\bd2.mdb", Val(frmBD.txtIDFunc) + 1
End Sub
Sub anterior()
geral ThisWorkbook.Path & "\BD\bd2.mdb", Val(frmBD.txtIDFunc) - 1
End Sub
A rotina que carrega os dados para o formulrio chamada de geral e recebe o endereo
completo do banco de dados (incluindo o nome) e o ndice do funcionrio. Conforme for digita o
nome desta rotina ela lhe apresentar com os argumentos necessrios:
Figura 7-2
Os quais, como dito, so o endereo do banco de dados (incluindo o nome) e o nmero serial do
funcionrio. exatamente este nmero serial que a chave para a navegao nos registros do
banco de dados.
Com isso em mente ns podemos partir para a construo do ltimo cdigo. As explicaes
acompanham o cdigo:
'Fecha a conexo ao BD
cn.Close
'Limpa a conexo da memria
Set cn = Nothing
End Sub
Terminado esta ltima rotina voc est pronto para rodar o seu formulrio. A nossa prxima para
como atualizar o banco de dados utilizando o mesmo modelo.
O nosso banco de dados possui mais campos do que o nosso formulrio possui de controle,
contudo, deixo a adio de novos controles por conta do leitor. Isso forar voc, leitor, a criar
novas possibilidades em cima deste exerccio.
Aqui, utilizaremos o mesmo formulrio com a mesma conexo anterior, mas faremos algumas
pequenas alteraes para podermos efetuar as atualizaes no banco de dados.
Quando falamos em atualizar um banco de dados precisamos distinguir entre inserir um registro
novo e atualizar um registro existente. No caso que estudaremos, abordarei o segundo caso, pois
no primeiro mdulo sobre formulrios toquei no assunto de insero de registro.
Para completar o exerccio, adicione mais um boto ao formulrio como mostra a figura:
Figura 8-1
Sub atualizar()
geral ThisWorkbook.Path & "\BD\bd2.mdb", Val(frmBD.txtIDFunc), True
End Sub
Autor: Robert F Martim Criado em: 01/02/2005
Publicado: www.juliobattisti.com.br ltima edio: 22/3/2005 19:49:00
Contato: rm@faircourt.com
Srie Como Fazer: Formulrios no Excel Utilizando VBA: Multipage e TabStrip 35
Observe que continua chamar pela mesma rotina do tpico anterior. Contudo, esta rotina agora
contm mais um argumento. Este ltimo argumento booleano e recebe os valores True
(verdadeiro) ou False (Falso). Se o valor True, ento, estamos atualizando o banco de dados.
Se o argumento False, ento, estamos apenas lendo o banco de dados.
Ao passarmos este novo argumento estamos reduzindo o volume de cdigo e rotinas necessrias.
O que precisamos fazer agora distinguir o verdadeiro do falso para saber o que deve ser
executado. Como o cdigo baseado no tpico anterior somente as partes novas estaro
comentadas:
End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Se voc utilizar uma verso anterior ao Excel XP a funo Split no cdigo no funcionar.
Observe tambm que a funo utiliza um espao para quebrar o texto em partes, portanto, sem o
espao a separao ser errada. Alm disso, no exemplo, estou assumindo apenas trs partes.
Se o nome for composto por primeiro nome, nome do meio e sobrenome a ltima parte
(sobrenome) ser omitida.
Se voc removeu e adicionou um item ao banco de dados anterior e tentou utilizar o sistema de
navegao voc certamente encontrou um erro. O cdigo anterior assume que no haver
insero ou remoo de registro no cdigo e funcionar muito bem se isso for verdade.
Porm, nesta parte o cdigo anterior no nos serve para muito. As partes comuns sero
reutilizadas, mas somente isso.
Um outro problema que se um campo encontra-se vazio no banco de dados, voc notar que o
valor na caixa de texto permanece o mesmo valor que o funcionrio anterior na hora que
navegamos pelos registros.
O primeiro passo remontar o nosso formulrio. Copie o formulrio do projeto anterior (salve a
pasta de trabalho com um nome diferente). Modifique o formulrio como segue:
Figura 9-1
Corrigir a navegao
Corrigir o problema de texto de outro registro misturado com outros registros durante a
navegao
cmdNovo.Caption = "Novo"
End If
End Sub
End Sub
O boto de atualizar no possui um teste para saber se o usurio realmente deseja atualizar os
dados. Voc pode adaptar esta pequena rotina utilizando o mtodo da rotina de excluso de
registro.
O nosso prximo passo montar o cdigo no mdulo. No novo mdulo inicie pela declarao das
variveis:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim nomeBD As String
Dim IDFunc As Long
Sub carregarInfo()
moverRegistro ThisWorkbook.Path & "\BD\bd3.mdb", IDInicial, True, False
End Sub
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Espaamento. Se voc observar a situao Sql = "DELETE * FROM " & Tabela &
"WHERE IDFunc=" onde "WHERE IDFunc=" no possui um espaamento entre as
aspas e WHERE, haver um erro, pois a palavra WHERE estar colada no nome da
tabela;
Feitas as ressalvas acima, estamos prontos para passar para a segunda parte do problema. Voc
deve ter observado que ao remover um registro do banco de dados o sistema de navegao pelos
registros falha. Ele falha por partir do pressuposto que a numerao serial, contnua, bastando
apenas adicionar/subtrair 1 ao/do nmero serial atual.
Infelizmente, este nem sempre ser o caso e precisamos encontrar um outra soluo para o
nosso problema. Quando criamos o objeto recordset ele nos d vrias propriedades e mtodos.
Portanto, teremos que usar este nmero serial para nos guiar dentro dos registros. Para fazer
isso, utilizaremos um loop para mover os registros at que o nmero serial no banco de dados
seja igual ao nmero serial no formulrio. Este ser o registro atual. A partir da basta mover para
frente ou para trs utilizando os mtodos MoveNext e MovePrevious.
Com os devidos comentrios feitos, podemos partir para o nosso cdigo. Todas as instrues
esto contidas no cdigo:
With rs
'Se a chama a esta rotina foi a inicial, ento
If iniciar = True Then
' Define o tipo de cursor a ser utilizado
.CursorType = adOpenKeyset
' Abre os registro
.Open "Select * FROM " & Tabela, cn
' Se no for o incio do arquivo...
If Not .BOF Then
' ...mover para o primeiro registro
.MoveFirst
End If
' Ir para "Cont" (continuao)
GoTo Cont
End If
End Sub
Existem vrias formas de se levar a cabo tal proposio, porm, aqui farei esta combinao para
demonstrar como o sistema de navegao pode ser utilizado para diversas finalidades.
Esta parte ser bem curta, pois tudo que necessitamos j foi desenvolvido anteriormente. Estarei
apenas mostrando como se colocar em prtica o que foi ensinado.
Figura 10-1
Com esta parte pronto, precisamos apenas construir o nosso formulrio que servir para prova. O
formulrio possui um MultiPage com quatro pginas e deve ter um visual similar a este:
Figura 10-2
3
Incluso no esquema tambm esto o cdigo de verificao de paginao.
Autor: Robert F Martim Criado em: 01/02/2005
Publicado: www.juliobattisti.com.br ltima edio: 22/3/2005 19:49:00
Contato: rm@faircourt.com
48 Srie Como Fazer: Formulrios no Excel Utilizando VBA: Multipage e TabStrip
Sub chkControles()
ndice = pageAssistente.Value
Fim = pageAssistente.Pages.Count - 1
Case Fim
cmdVoltar.Enabled = True
cmdAvanar.Enabled = False
cmdConcluir.Enabled = True
Case Else
cmdVoltar.Enabled = True
cmdAvanar.Enabled = True
cmdConcluir.Enabled = False
End Select
frmAssistente.Caption = "Pgina " & ndice + 1 & " de " & Fim + 1
End Sub
Como sistema de navegao pronto, podemos partir para a soluo dos prximos problemas.
Primeiramente, precisamos nos atentar para a planilha onde colocaremos as respostas que o
usurio der.
A propriedade Visible ser passada para xlSheetVeryHidden para evitar acesso pelo usurio.
Porm, precisamos lembrar que os dados so inseridos nesta planilha, portanto, precisamos de
uma varivel que representa a nossa planilha. Fora de qualquer procedimento dentro do
formulrio entraremos a seguinte linha de cdigo (no topo da janela de cdigo):
Dim ws As Worksheet
A varivel ws refere-se a uma planilha qualquer. O nosso prximo trabalho instanciar esta
varivel como sendo a planilha que contm os dados que utilizaremos e na qual escreveremos as
respostas do usurio:
'checa os controles
chkControles
Cada boto de opo tem um valor prprio que passado para a planilha conforme o clique de
quem est fazendo a prova:
j = 0
'Faz um loop pelas clulas que contm as respostas
For i = 1 To 4
'Se no houver resposta
If ws.Cells(i, 3) = "" Then
'ento, compile as perguntas no respondidas
txt = txt & i & ", "
j = j + 1
End If
Next
'Resultado em percentuais
res = Format(ws.Range("C6"), "Percent")
'Descarrega o formulrio
Unload Me
End Sub
Ao concluir a prova o aluno recebe sua nota final atravs de uma caixa de mensagens:
No meu caso, no fui muito bem na prova, tendo um aproveitamento igual a zero!
o Nome do controle
o Portugus
o Ingls
o Alemo
Um formulrio no Excel
O campo para o nome do controle conter o nome de cada controle que contm um caption em
nosso formulrio. Os nomes entrados neste campo devem ser exatamente iguais aos nomes dos
controles no formulrio.
Ao lado de cada nome conter a traduo do caption do controle como mostra a figura abaixo:
Figura 11-1
No banco de dados que acompanha este mdulo h tambm o campo cdItem, como mostra a
figura acima. Este campo desnecessrio ao nosso exerccio. Eu apenas o acrescento por fora
de hbito, pois chaves-primrias so vitais em bancos de dados.
A construo do layout geral do formulrio fica a critrio do leitor. O formulrio que utilizarei feito
sobre um MultiPage. A primeira pgina do MultiPage contm os idiomas disponveis:
Figura 11-2
Observe que a grande vantagem deste sistema que os recursos so externos. Se voc precisa
inserir mais controles e necessita de mais tradues, no h porque esquentar a cabea. Os
dados inseridos no banco de dados independem de ordem. Tudo que precisamos entrar o nome
Figura 11-3
Com o layout geral pronto, podemos iniciar a escrita do cdigo. Antes de iniciar, porm,
necessrio instalar Microsoft ActiveX Data Object xx Library. Para instala-lo, no VBE,
v at Ferramentas Referncias e da lista que aparecer, procure pela referncia acima e
a instale.
Cdigo no Formulrio
Cdigo no Mdulo
'Cria a conexo
Set conn = New ADODB.Connection
'Fecha a conexo ao BD
conn.Close
'Limpa a conexo da memria
Set conn = Nothing
End Sub
FORMAO ACADMICA:
EXPERINCIA PROFISSIONAL
OUTRAS ESPECIALIZAES
OUTRAS ATIVIDADES
Fornece suporte pro bono em TI entidade de caridade Nigeriana NIDOE (Nigerians in Diaspora
Organisation Europe) desde 2001. Participou ativamente na organizao da conferncia sobre
Boa Governana e Responsabilidade Fiscal promovida pelo ONG em Abuja, Nigria, em
Novembro 2003. Foi um dos principais colaboradores na elaborao do relatrio final sobre a
conferncia entregue a presidncia da Repblica Nigeriana em maio de 2004.
Autor do livro Access e VBA na Modelagem Financeira: Uma abordagem prtica (no
prelo). Editora Axcel Books, 2005.
Colaborador ativo do frum Access Avanado do site www.juliobattisti.com.br, onde divide seu
conhecimento e experincia com outros membros do espao.