domingo, 1 de junho de 2014

Evitar erro no preenchimento de um campo no formato data


Supondo que o nome da TextBox que receberá a data é txt_vencimento temos o seguinte código:
      
- O Procedimento KeyPress formatará o campo para que ao digitar sejam colocada as barras e o campo tenha o tamanho correto... se for adaptar ao seu código não esqueça de trocar todos os nomes de objetos txt_vencimento que aparece no código pelo nome da sua TextBox.

Private Sub txt_vencimento_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
txt_vencimento.MaxLength = 10 '10/10/2014
 Select Case KeyAscii
      Case 8       'Aceita o BACK SPACE
      Case 13: SendKeys "{TAB}"    'Emula o TAB
      Case 48 To 57
        If txt_vencimento.SelStart = 2 Then txt_vencimento.SelText = "/"

         If txt_vencimento.SelStart = 5 Then txt_vencimento.SelText = "/"
      Case Else: KeyAscii = 0     'Ignora os outros caracteres
   End Select

End Sub

- No procedimento AfterUpdate será feito o teste para verificar se o valor do dia esta entre 1 e 31, se o valor do mês esta entre 1 e 12 e também se a data digitada não é menor que a data atual, pois como se trata de um campo de vencimento não podemos ter uma data anterior.


Private Sub txt_vencimento_AfterUpdate()

Dim data As Date
data = Me.txt_vencimento

If Left(Me.txt_vencimento, 2) > 31 Then
   MsgBox "Data preenchida de forma incorreta, dia inválido", vbExclamation, "Erro Data"
   Me.txt_vencimento = ""
ElseIf Right(Left(Me.txt_vencimento, 5), 2) > 12 Then
   MsgBox "Data preenchida de forma incorreta, mês inválido", vbExclamation, "Erro Data"
   Me.txt_vencimento = ""
ElseIf data < Now Then
   MsgBox "A data deve ser maior que hoje, cadastro não permitido", vbExclamation, "Erro Data"
   Me.txt_vencimento = ""
End If
End Sub

* Entendendo o código ( Left e Right)
   Right(Left(Me.txt_vencimento, 5), 2)

 Supondo que tenha sido digitado a data 25/12/2014
 O comando Right irá retornar os 2 caracteres da direita para esquerda que estiver contido dentro dele...
 Como dentro do Right temos um Left... vamos descobrir o que o Left retorna para entender o código.
 Left(Me.txt_vencimento, 5) esta retornando os 5 primeiros caracteres ou valores do conteúdo da caixa de texto txt_vencimento, ou seja 25/12.
Dessa forma o Right estará retornando o valore 12, pois retorna os 2 caracteres da direita para esquerda.


* Entendendo o código ( SelStart e SelText)
  If txt_vencimento.SelStart = 2 Then txt_vencimento.SelText = "/"

 Significa que quando digitar o segundo caractere será inserido a /

Nenhum comentário:

Postar um comentário