Usando formulários com classe – parte 2: formulário
No artigo anterior vimos a primeira parte do projeto de
criar um formulário com uma classe. Deixamos a classe "praticamente"
pronta, fazendo as funcionalidades planejadas (entre aspas, veremos o motivo mais
adiante). Neste artigo iremos fazer o formulário e usar a classe criada para
escrever na planilha. Desenhei o seguinte formulário:
Vemos aqui todas as propriedades do funcionário que temos na
planilha: Registro, Nome do funcionário, Data de nascimento, CPF, Cargo e Salário. Temos
cinco botões: Cadastrar, Alterar, Desligar, Sair e Pesquisar nome, que é o
botão pequeno ao lado do campo Nome do funcionário. Há um botão Recontratar oculto embaixo do Desligar. Temos ainda duas caixas de
listagem: Nome do funcionário e Cargo. Aqui tem o formulário para baixar, caso não queira desenhar um novo. Há dois arquivos dentro, um .frm e um .frx. Importe o .frm pelo editor de VBA, o .frx deve estar na mesma pasta, senão acontece um erro e não importa.
O formulário deve se comunicar exclusivamente com a classe,
que por sua vez irá fazer a comunicação com a planilha. Desta forma, sabemos
que precisaremos criar mais duas funções na classe: uma para efetuar a pesquisa
pelo nome, retornando verdadeiro
quando encontrado (e os dados para a classe) e falso quando não encontrado, outra para gerar uma lista com os
nomes dos funcionários para popular a caixa de listagem de funcionários.
Vamos fazer uma rotina para carregar esses dados no
formulário? Sem chances, vamos usar classe, que é o foco deste projeto. Vamos
criar funções na classe clsFuncionario
para isso? De jeito nenhum, a classe clsFuncionario
serve apenas para tratar de dados relacionados a um funcionário, não deve ser
usada para outras finalidades. Devemos criar uma nova classe para lidar com
listas e chamaremos de clsCargo. Como
essas listas serão de uma complexidade maior, vamos deixá-las por último.
1) O bloco com a mensagem será removido quando não houver
mensagem (o formulário será mais curto). Quando houver mensagem, o formulário
será estendido para exibir a mensagem. Quando for uma mensagem
simples (como "Funcionário cadastrado"), o texto deverá ser preto,
quando for um alerta (como uma inconsistência na entrada), o texto deverá ser
vermelho;
2) Os botões Alterar
e Desligar só estarão ativos quando
um funcionário existente for carregado via pesquisa, desativando o botão Cadastrar nesta situação;
3) Após o cadastro ou a alteração de um funcionário o
formulário deve ser limpo;
4) Os campos Registro,
Data de nascimento, CPF e Salário só devem permitir a entrada de números, bloqueando a
digitação de quaisquer outros caracteres;
5) O botão Recontratar
deve aparecer somente quando um funcionário já desligado for carregado no
formulário, sendo que neste caso o botão Desligar
deve ficar invisível;
6) As caixas de listagem permitirão tanto a seleção de item
da lista como a escrita para poder adicionar.
Vamos começar pela mensagem de texto na parte
debaixo do formulário. O meu tem altura de 180 com a mensagem e ficará com 155
sem a mensagem. Podemos definir esses valores como constantes no topo do módulo
do formulário, permitindo que esses números fiquem em apenas um lugar no
código, facilitando futuras manutenções:
Option Explicit
Private Const FormularioNormal As Integer = 155
Private Const FormularioEstendido As Integer = 180
Agora vamos pensar na sub-rotina. Como vamos definir os
parâmetros? Sabemos que terá uma mensagem e que ela pode ser comum ou de
alerta. Vamos definir um como Mensagem
no formato string e o outro como Alerta, com um valor booleano, sendo
alerta como verdadeiro e mensagem
comum como falso. Podemos inclusive
definir este parâmetro como opcional, deixando falso
como padrão. Se a mensagem vier em branco, significa que a mensagem deve ser apagada
e o formulário reduzido, caso contrário a mensagem deve aparecer e o formulário
deve ser estendido. Compreendido o funcionamento, segue o código:
Private Sub Mensagem(Mensagem As String, Optional Alerta As Boolean =
False)
If Mensagem =
"" Then
Me.lblMensagem =
""
Me.Height =
FormularioNormal
Else
Me.lblMensagem =
Mensagem
Me.Height =
FormularioEstendido
End If
If Alerta = True Then
Me.lblMensagem.ForeColor
= vbRed
Else
Me.lblMensagem.ForeColor = vbBlack
End If
End Sub
O uso do Me aqui
serve para referenciar o próprio formulário, garantindo que os nomes das
propriedades sejam dele próprio. Isto é útil quando você possui vários
formulários e de repente confunde um nome e coloca um objeto de outro formulário. Não vai
acusar erro e vai levar algum tempo para descobrir onde está o problema. Poderia usar frmFuncionarios, mas Me é bem mais curto.
Para saber se essa sub-rotina está funcionando
perfeitamente, vamos editar o evento UserForm_Initialize
e colocar uma das seguintes linhas de cada vez, para testar cada uma das
situações:
Mensagem ""
Mensagem "Teste de mensagem"
Mensagem "Teste de alerta", True
A primeira deve abrir o formulário sem a área da mensagem, a
segunda deve trazer uma mensagem em preto e a terceira uma mensagem em
vermelho. Como pode ver, algo que parecia um problema complexo foi resolvido
com uma rotina simples com dois parâmetros e dois IFs. Habitue-se a pensar em parâmetros quando estiver desenvolvendo
suas rotinas e funções, eles facilitam o código e evitam ter de criar variáveis
de módulo ou mesmo globais.
Vamos ao segundo requisito. Os botões Alterar e Desligar só
estarão disponíveis quando algum funcionário for carregado via pesquisa e o
botão Recontratar deve permanecer
invisível (só aparecerá quando for carregado um funcionário desligado). Como
ainda não desenvolvemos o código da pesquisa, o máximo que podemos fazer por
enquanto é desabilitá-los na inicialização. Vamos editar o evento UserForm_Initialize, definindo o valor padrão da altura do formulário
como FormularioNormal e o status
inicial de cada botão. Podemos aproveitar e definir o evento do botão Sair, que é bem simples:
Private Sub UserForm_Initialize()
Me.Height =
FormularioNormal
Me.btnCadastrar.Enabled
= True
Me.btnAlterar.Enabled
= False
Me.btnDesligar.Enabled
= False
Me.btnRecontratar.Visible
= False
End Sub
Private Sub btnSair_Click()
Unload Me
End Sub
Seguindo adiante, temos um botão para Limpar o formulário. Como também precisamos limpar após o cadastro
ou a alteração de um funcionário, talvez seja mais fácil nesses casos emular o
clique nesse botão. Mas tem um porém: o botão Limpar também removerá a mensagem, chamando a sub-rotina mensagem
com texto em branco. Como os botões Adicionar,
Alterar, Desligar e Recontratar deverão exibir mensagens de confirmação, então é melhor
evitar executar a sub-rotina Mensagem
duas vezes. Assim, é melhor separar parte da limpeza em uma nova sub-rotina e
fazer todos os botões chamarem essa rotina, para depois chamar Mensagem da forma apropriada para cada
caso.
Essa limpeza também deve deixar os botões nas mesmas condições do início
do formulário, ou seja, garantir que o botão Cadastrar esteja habilitado e os botões Alterar e Desligar
estejam desabilitados. Não podemos esquecer de manter o botão Desligar visível e o botão Recontratar invisível, já prevendo esta
situação acontecer. Também podemos definir que o cursor vá para o campo Registro. Vamos ao código desse botão:
Private Sub LimparFormulario()
Me.txtRegistro.Text =
""
Me.cmbNome.Text =
""
Me.txtDataNascimento.Text = ""
Me.txtCPF.Text =
""
Me.cmbCargo.Text =
""
Me.txtSalario.Text =
""
Me.btnCadastrar.Enabled = True
Me.btnAlterar.Enabled
= False
Me.btnDesligar.Enabled
= False
Me.btnDesligar.Visible
= True
Me.btnRecontratar.Visible
= False
Me.txtRegistro.SetFocus
End Sub
Private Sub btnLimpar_Click()
LimparFormulario
Mensagem ""
End Sub
Vamos ao quarto item. Um ponto importante é restringir a
quantidade de caracteres que cada um desses campos irá receber. Se não houver
restrição, o campo Registro, por
exemplo, pode receber um número muito grande e causar estouro na variável.
Podemos definir um limite de 6 dígitos para esse campo. A data pode receber
automaticamente as barras, o CPF pode receber os pontos e o traço, enquanto o
salário pode receber o sinal de moeda e vírgula. Assim, a
data terá um limite de 10 dígitos (incluindo as barras), o CPF terá 14 dígitos
(inclui os pontos e o traço) e o salário terá um limite de 13 dígitos
(incluindo moeda, separadores de milhar e vírgula). Podemos definir as propriedades MaxLength de cada campo no próprio
formulário, mas também podemos definir no código, ficando mais fácil de
consultar no futuro quando for fazer alguma manutenção. O melhor lugar é na
inicialização do formulário. Inclua as linhas abaixo em UserForm_Initialize:
Me.txtRegistro.MaxLength = 6
Me.txtDataNascimento.MaxLength = 10
Me.txtCPF.MaxLength = 14
Me.txtSalario.MaxLength = 13
Se você leu meu artigo sobre tratamento
de entradas de formulário deve saber fazer as restrições de entrada para
alguns campos. O evento KeyPress
intercepta a digitação no campo, permitindo que a gente permita só alguns
caracteres, além de formatar o campo conforme vai digitando. O campo Registro só precisará de restringir a
valores numéricos, os demais precisarão de formatação. Você pode tentar fazer
os códigos desses eventos como exercício usando o artigo citado acima como
referência antes de usar o código abaixo:
Private Sub txtRegistro_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Select Case KeyAscii
Case
Asc("0") To Asc("9")
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub txtDataNascimento_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Select Case KeyAscii
Case
Asc("0") To Asc("9")
If Me.txtDataNascimento.SelStart
= 2 Or Me.txtDataNascimento.SelStart = 5 _
Then
Me.txtDataNascimento.SelText =
"/"
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub txtCPF_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Select Case KeyAscii
Case
Asc("0") To Asc("9")
If Me.txtCPF.SelStart
= 3 Or Me.txtCPF.SelStart = 7 _
Then
Me.txtCPF.SelText
= "."
ElseIf Me.txtCPF.SelStart
= 11 Then
Me.txtCPF.SelText
= "-"
End If
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub txtSalario_KeyPress(ByVal KeyAscii As
MSForms.ReturnInteger)
Select Case KeyAscii
Case
Asc("0") To Asc("9")
If Me.txtSalario.SelStart
= 0 Then
Me.txtSalario.SelText
= "R$ "
End If
Case
Asc(",")
If InStr(1,
Me.txtSalario.Text, ",") Then
KeyAscii =
0
End If
Case Else
KeyAscii = 0
End Select
End Sub
Já o evento Exit ocorre
quando sai do campo. É aqui que vamos levar o valor à propriedade da classe
para fazer a validação do dado. Portanto, vamos criar a classe antes. Na área
de declarações do módulo do formulário, junto com as constantes declaradas, defina a classe:
Private Funcionario As clsFuncionario
Desta forma o objeto está disponível para o módulo todo, ou
seja, existirá enquanto o formulário estiver aberto. Na inicialização do
formulário (em UserForm_Initialize), crie
o objeto Funcionario:
Set Funcionario = New clsFuncionario
Isto criará o objeto junto com o formulário. Por fim, no
final da rotina de limpeza do formulário (LimparFormulario),
vamos destruir o objeto e criá-lo novamente:
Set Funcionario = Nothing
Set Funcionario = New clsFuncionario
Poderíamos limpar propriedade por propriedade, mas esta
forma é mais prática. Isto serve para eliminarmos quaisquer dados existentes no
objeto que possam ser usados indevidamente em um outro funcionário.
Vamos então ao evento Exit
do campo Registro. Nada mais prático
para o usuário do que efetuar a pesquisa pelo número logo que sair do campo,
certo? Então devemos utilizar aqui a função Pesquisar
do objeto Funcionario. Lembre-se de como
foi criada? Se o número for localizado retornará verdadeiro e os dados serão carregados, se não for encontrado
retornará falso. Portanto, se o
número existir teremos os dados, bastando exibi-los no formulário, desabilitar
o botão Cadastrar e habilitar os
botões Alterar e Desligar. Podemos também exibir mensagem informando se encontrou ou
não e também se o funcionário está desligado da empresa. Segue o código:
Private Sub txtRegistro_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
If Me.txtRegistro.Text
<> "" And IsNumeric(Me.txtRegistro.Text) Then
If Funcionario.Pesquisar(CLng(Me.txtRegistro.Text)) = True Then
Else
Mensagem "Funcionário " & Funcionario.Registro & " não cadastrado"
End If
End Sub
Private Sub PreencherFormulario
Me.cmbNome.Text = Funcionario.Nome
Private Sub PreencherFormulario
Me.txtRegistro.Text = Funcionario.Registro
Me.txtDataNascimento.Text = Funcionario.DataNascimento
Me.txtCPF.Text = Left$(Funcionario.CPF, 3) & "." & Mid$(Funcionario.CPF, 4, 3) & _
"." & Mid$(Funcionario.CPF, 7, 3) & "-" & Right$(Funcionario.CPF, 2)
"." & Mid$(Funcionario.CPF, 7, 3) & "-" & Right$(Funcionario.CPF, 2)
Me.cmbCargo.Text = Funcionario.Cargo
Me.txtSalario.Text = Format(Funcionario.Salario, "R$ ###,##0.00")
Me.btnCadastrar.Enabled = False
Me.btnAlterar.Enabled = True
Me.btnDesligar.Enabled = True
If Funcionario.Ativo = True Then
Mensagem "Funcionário " & Funcionario.Registro & " localizado"
Else
Me.btnDesligar.Visible = False
Me.btnRecontratar.Visible = True
Mensagem "Funcionário " & Funcionario.Registro & " foi desligado"
End If
End Sub
Se você cadastrou alguns funcionários quando testou a
classe, pode usar alguns números para testar esse evento. Se não tem ninguém
cadastrado, coloque alguns na planilha e teste. Veja como os dados aparecem no
formulário logo após sair do campo Registro.
Os botões Desligar
e Recontratar têm um funcionamento
simples. Eles disparam funções do objeto Funcionario
(Desativar e Ativar, respectivamente) e exibem a mensagem. Como desligamento e recontratação
são situações críticas, é melhor enviar uma mensagem de alerta para o usuário
antes, para garantir que o clique não foi sem querer. Segue o código:
Private Sub btnDesligar_Click()
Dim Resposta As
Integer
Resposta =
MsgBox("Esta ação marcará o funcionário " & Funcionario.Nome
& _
" como desligado da empresa." & vbCrLf & "Tem certeza?", vbExclamation
+ _
vbYesNo, "Atenção!
Demissão de funcionário")
If Resposta = vbYes
Then
Funcionario.Desativar
Mensagem
"Funcionario " & Funcionario.Registro & "
desligado"
LimparFormulario
End If
End Sub
Private Sub btnRecontratar_Click()
Dim Resposta As
Integer
Resposta =
MsgBox("Esta ação reativará o funcionário " & Funcionario.Nome
& _
" no quadro de
funcionários." & vbCrLf & "Tem certeza?", vbExclamation + _
vbYesNo, "Atenção!
Recontratação de funcionário")
If Resposta = vbYes
Then
Funcionario.Ativar
Mensagem
"Funcionario " & Funcionario.Registro & "
recontratado"
LimparFormulario
End If
End Sub
Você pode testar esses botões, desligando e recontratando os
funcionários diversas vezes. Clique no botão Não para ver que nada acontece e os dados permanecem no formulário.
No momento falta validar os dados dos campos Data de nascimento, CPF e Salário. É preciso
lembrar que ao inserir os dados é aplicada uma máscara, ou seja, acrescenta
barras, pontos, traço e representação de moeda. Precisamos certificar de que a
máscara está correta, ou seja, o usuário não removeu nenhum número após o
surgimento da máscara. Além disso, precisamos checar se o dado é válido,
emitindo a mensagem de alerta. Também é uma boa ideia alterar o fundo do campo
para deixar sinalizado que o valor não é válido. Inclusive isso facilitará a
codificação dos botões Cadastrar e Alterar, pois bastará checar se os
campos não estão vazios e que a cor deles sinaliza que o dado é válido. Vamos
ao evento para o campo Data de nascimento:
Private Sub txtDataNascimento_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
Dim DataNumero As
String
DataNumero =
Replace(txtDataNascimento.Text, "/", "")
If DataNumero =
"" Then
Me.txtDataNascimento.Text = ""
Mensagem
""
Exit Sub
End If
If Len(DataNumero) = 8
Then
Me.txtDataNascimento.Text = Left$(DataNumero, 2) & "/"
& Mid$(DataNumero, 3, 2) _
& "/"
& Right$(DataNumero, 4)
End If
If
IsDate(Me.txtDataNascimento.Text) And Len(DataNumero) = 8 Then
Funcionario.DataNascimento = CDate(Me.txtDataNascimento.Text)
Me.txtDataNascimento.BackColor = vbWindowBackground
Mensagem
""
Else
Me.txtDataNascimento.BackColor = RGB(255, 153, 102)
Mensagem
"Data de nascimento informada inválida", True
End If
End Sub
Aqui foi criada uma variável DataNumero, que recebe o conteúdo do campo e remove as barras. Em
seguida é verificado se o valor está em branco, neste caso define o valor do
campo como vazio (caso o usuário apague os números e só deixe as barras),
elimina uma eventual mensagem que esteja sendo exibida, garante a cor de fundo
original e sai da sub-rotina. Em seguida, verifica se o resultado tem 8 dígitos
e reconstrói a data. Por fim, verifica se a data é válida e novalmente verifica
se DataNumero tem 8 dígitos. Se ambas
as condições forem verdadeiras, armazena a data no objeto Funcionario e garante a cor de fundo original, para mostrar que o
dado é válido e elimina a mensagem, se houver. Se alguma das condições não for
verdadeira, o fundo do campo é alterado para uma tonalidade avermelhada,
sinalizando que o dado é inválido e uma mensagem de alerta é exibida.
Para os campos CPF
e Salário, há algumas diferenças sutis.
O CPF pode ter menos de 11 dígitos
(14 com os pontos e traço) e o usuário sair do campo. Neste caso deve
acrescentar zeros à esquerda e reconstruir a máscara. O valor numérico com 11
dígitos então será enviado para o objeto Funcionario.
Lembrando como a classe foi projetada: se o CPF for válido, o valor é
armazenado normalmente e a propriedade Inconsistente
permanecerá com valor falso; se o CPF
for inválido (o DAC não conferir), o valor não é armazenado e Inconsistente se torna verdadeiro. Vejamos o código:
Private Sub txtCPF_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim CPFNumero As
String
CPFNumero =
Replace(Replace(txtCPF.Text, ".", ""), "-",
"")
If CPFNumero =
"" Then
Me.txtCPF.Text = ""
Exit Sub
End If
If Len(CPFNumero) <
11 Then
CPFNumero =
String(11 - Len(CPFNumero), "0") & CPFNumero
End If
Me.txtCPF.Text =
Left$(CPFNumero, 3) & "." & Mid$(CPFNumero, 4, 3) &
"." & _
Mid$(CPFNumero, 7,
3) & "-" & Right$(CPFNumero, 2)
Funcionario.CPF =
CPFNumero
If
Funcionario.Inconsistencia = False Then
Me.txtCPF.BackColor = vbWindowBackground
Mensagem
""
Else
Me.txtCPF.BackColor = RGB(255, 153, 102)
Mensagem "CPF
informado inválido", True
End If
End Sub
O campo Salário só
permite a entrada de números e uma única vírgula. É preciso lembrar que a
propriedade Salario no objeto Funcionario está em formato moeda, ou
seja, permite até 4 casas decimais. É preciso remover eventuais casas decimais
além do permitido. O código abaixo faz todo o tratamento necessário:
Private Sub txtSalario_Exit(ByVal Cancel As
MSForms.ReturnBoolean)
Dim SalarioNumero As
String
Dim PosicaoVirgula As
Integer
Dim CasasDecimais As
Integer
SalarioNumero =
Trim(Replace(Replace(Me.txtSalario.Text, "R$ ", ""),
".", ""))
If SalarioNumero =
"" Then
Me.txtSalario.BackColor
= vbWindowBackground
Mensagem
""
Exit Sub
End If
PosicaoVirgula =
InStr(1, SalarioNumero, ",")
If PosicaoVirgula >
1 Then
CasasDecimais =
Len(SalarioNumero) - PosicaoVirgula
If CasasDecimais
> 2 Then
SalarioNumero
= Left$(SalarioNumero, Len(SalarioNumero) - _
(CasasDecimais - 2))
End If
End If
If SalarioNumero
<> "" And IsNumeric(SalarioNumero) Then
Me.txtSalario.Text
= Format(SalarioNumero, "R$ ###,##0.00")
Funcionario.Salario = CCur(SalarioNumero)
If
Funcionario.Inconsistencia = False Then
Me.txtSalario.BackColor = vbWindowBackground
Mensagem
""
Else
Me.txtSalario.BackColor = RGB(255, 153, 102)
Mensagem
"Salário informado inválido", True
End If
Else
Me.txtSalario.BackColor = RGB(255, 153, 102)
Mensagem
"Salário informado inválido", True
End If
End Sub
Vamos então aos botões Cadastrar e Alterar. Antes
de efetivar qualquer alteração na base é preciso certificar que os dados estão
corretos e consistentes. A inconsistência pode ser verificada se o campo está
com cor diferente de vbWindowBackground
(cor branca padrão do fundo da caixa de texto). Fora isso precisamos verificar
se há dado, ou seja, se o campo não está vazio. Como essas validações são
necessárias tanto para Cadastrar como
para Alterar, podemos fazer uma
função booleana que devolverá verdadeiro
quando os dados estão em ordem e falso
se houver algum campo em branco ou inconsistente:
Private Function ValidarDados() As Boolean
If Me.txtRegistro.Text
= "" Or Me.txtRegistro.BackColor <> vbWindowBackground Then
Me.txtRegistro.SetFocus
ValidarDados =
False
Exit Function
End If
If Me.cmbNome.Text =
"" Or Me.cmbNome.BackColor <> vbWindowBackground Then
Me.cmbNome.SetFocus
ValidarDados =
False
Exit Function
End If
If
Me.txtDataNascimento.Text = "" Or Me.txtDataNascimento.BackColor
<> _
vbWindowBackground
Then
Me.txtDataNascimento.SetFocus
ValidarDados = False
Exit Function
End If
If Me.txtCPF.Text =
"" Or Me.txtCPF.BackColor <> vbWindowBackground Then
Me.txtCPF.SetFocus
ValidarDados =
False
Exit Function
End If
If Me.cmbCargo.Text =
"" Or Me.cmbCargo.BackColor <> vbWindowBackground Then
Me.cmbCargo.SetFocus
ValidarDados =
False
Exit Function
End If
If Me.txtSalario.Text
= "" Or Me.txtSalario.BackColor <> vbWindowBackground Then
Me.txtSalario.SetFocus
ValidarDados =
False
Exit Function
End If
ValidarDados = True
End Function
Feito isso, os botões Cadastrar
e Alterar devem checar se ValidarDados retorna verdadeiro, executando então os métodos Adicionar e Alterar, respectivamente, exibir a mensagem informando do fato e
limpar o formulário. Se retornar falso,
nada acontecerá. O código é bem simples:
Private Sub btnCadastrar_Click()
If ValidarDados = True
Then
Funcionario.Adicionar
Mensagem
"Funcionário " & Funcionario.Registro & "
cadastrado"
LimparFormulario
End If
End Sub
Private Sub btnAlterar_Click()
If ValidarDados = True
Then
Funcionario.Alterar
Mensagem
"Funcionário " & Funcionario.Registro & " alterado"
LimparFormulario
End If
End Sub
Está faltando o tratamento das caixas de listagem Nome do funcionário e Cargo, bem como as rotinas de geração
das listas e o botão Pesquisar nome.
Como este artigo está bem extenso, vamos deixar para o próximo.
Caso tenha dúvidas sobre o artigo ou queira fazer
comentários e sugestões, utilize a seção de comentários abaixo. Até o próximo
artigo!
Pedro, muito legal esse artigo sobre formulários com CLASSES. Num segundo momento, gostaria que vc mostrasse como utilizar uma classe de persistência com o ACCESS no contexto desse projeto. Abços PITTER ARRUDA
ResponderExcluirPitter, a persistência da classe vai depender das necessidades. Perceba que a declaração do objeto Funcionario está na área de declarações do formulário. Isto significa que o objeto "existe" enquanto o formulário estiver aberto.
ExcluirApós pressionar qualquer um dos botões (exceto o de pesquisar nome, que está no próximo artigo, e o de sair, que fecha o formulário), o objeto será "recriado". Esta maneira é mais prática de limpar os dados do que redefinir cada uma das propriedades. Se eu acrescentar 5 novas propriedades não preciso limpar nenhuma delas, já que o objeto é "destruído" (= nothing) e "recriado" (= new clsFuncionario) novamente. Se eu redefinisse cada propriedade a um valor default teria de acrescentar as cinco novas propriedades ali.
Quanto ao Access, não tenho usado, logo não posso ajudar muito nesse ponto. Mas muito do que coloco nos artigos de Excel valem para qualquer outro programa que use VBA. Este modelo de usar uma classe com formulário pode servir muito bem no Access. A interface entre o formulário e a classe seria praticamente a mesma coisa, o que precisaria entender é como o Access lida com os registros (criação, leitura, alteração e exclusão) para então adaptar o modelo da classe ao Access.