Formato fecha

Tengo un problema con el campo que manejo para la fecha
Tiene una mascara de entrada, ##/##/####, bueno todo funciona bien,
solo que cuando se pone la fecha, digamos 01/02/20__ y falta los 2 ultimos digitos igual acepta o cualquier otro campo digamos 01/__/2007, etc...
Eso hace que al momento de grabar a la BD, me sale un error porque los tipos no coinicden, y es lógico, como puedo
hacer para cuando quieras cambiar eser campo si no esta llenos todos los campo no salga
Estoy intentando con:
Private Sub TXFECH_lostFocus()
If TXFECH <> "##/##/####" Then
MsgBox "No coincide la fecha con el formato.", vbOKOnly, "Se Requiere Datos"
TXFECH.SetFocus
Exit Sub
End If
End Sub
¿Pero nada, alguna idea?

1 respuesta

Respuesta
1
Desde Chile...
Lo que debemos hacer en tu caso es una validación de las fechas que los usuarios ingresen, para esto usaremos una función que yo te daré..
Primero, en el form que tienes la fecha debes crear una variable, por ejemplo yo la llamaré "formatofecha" y será del tipo variant, es decir:
Public formatofecha as variant
Luego, colocaremos una validación que se dirija a la función que te daré en el instante en que la fecha pierda el foco, así evitas llegar a la grabación y encotrarte con el problema, haremos algo así.
Private Sub txtfecha_LostFocus()
If txtfecha.Text <> "__/__/____" Then formatofecha = gValidaFecha(txtfecha)
End Sub
Como vez, la función a la cual direcciono se llama gvalidafecha y un detalle importante, es que cuando haces referencia a ella incluyes solo el nombre del campo donde va la fecha, es decir, txtfecha.
Luego, insertas una hoja de módulo y copias el siguiente código de la función. (Tomalo, cópialo y pégalo directamente, pues va listo)
Public Function gValidaFecha(fecha As Control) As Boolean
' Función que permite validar una fecha, si la validación
' resulta negativa pone el campo en blanco, esta
' validación retorna true cuando el campo viene en blanco
'***************************************************************
Dim Bisiesto As Integer, Fecha1 As Long, anho2 As Long
If fecha.Text <> "__/__/____" Then
Static mes(13)
If Trim(fecha.Text) = "" Then
fecha.Text = "__/__/____"
gValidaFecha = True
Exit Function
End If
If Len(fecha.Text) < 8 Or Len(fecha.Text) > 10 Then
Beep
MsgBox "La fecha que ha ingresado no es válida para el sistema", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
gValidaFecha = False
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
If fecha.Visible = True Then
fecha.SetFocus
End If
Exit Function
End If
On Error Resume Next
mese$ = Month(fecha.Text)
dias$ = Day(fecha.Text)
If Err.Number = 13 Then
Beep
MsgBox "La fecha que ha registrado no es válida para el sistema.", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
gValidaFecha = False
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
fecha.SetFocus
Exit Function
End If
On Error GoTo 0
mes(1) = 31: mes(2) = 28: mes(3) = 31: mes(4) = 30
mes(5) = 31: mes(6) = 30: mes(7) = 31: mes(8) = 31
mes(9) = 30: mes(10) = 31: mes(11) = 30: mes(12) = 31
mes(13) = 29
anho$ = Trim(Mid$(fecha.Text, 7, 4))
mese$ = Mid$(fecha.Text, 4, 2)
dias$ = Mid$(fecha.Text, 1, 2)
If Val(mese$) < 1 Then
Beep
MsgBox "El mes que ha ingresado no es válido.", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
gValidaFecha = False
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
If fecha.Visible Then
fecha.SetFocus
End If
Exit Function
ElseIf Val(mese$) > 12 Then
Beep
MsgBox "Rectifique Mes, no corresponde..." + Chr$(13) + Chr$(10) + "[ Mes <= 12]...", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
If fecha.Visible = True Then
fecha.SetFocus
End If
gValidaFecha = False
Exit Function
Else
VDia = mes(Val(mese$))
If Val(dias$) < 1 Then
Beep
MsgBox "El día que ha ingresado no es válido.", 1
fecha.Text = "__/__/____"
gValidaFecha = False
If fecha.Visible Then
fecha.SetFocus
End If
Exit Function
ElseIf Val(dias$) > VDia And Val(mese$) <> 2 Then
Beep
MsgBox "Rectifique Día, no corresponde..." + Chr$(13) + Chr$(10) + " [ Día <=" + Str$(VDia) + " ]...", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
If fecha.Visible Then
fecha.SetFocus
End If
gValidaFecha = False
Exit Function
ElseIf Val(mese$) = 2 Then
If Val(anho$) < 0 Then
Beep
MsgBox "El año que ha ingresado no es válido.", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
If fecha.Visible Then
fecha.SetFocus
End If
gValidaFecha = False
Exit Function
Else
Bise = Val(anho$) Mod 4
If (Bise <> 0 And Val(dias$) = 29) Or (Bise = 0 And Val(dias$) > 29) Or (Bise <> 0 And Val(dias$) > 28) Then
Beep
MsgBox "Rectifique Día, no corresponde...", vbCritical, "Módulo de Seguridad"
fecha.Text = "__/__/____"
fecha.SelStart = 0
fecha.SelLength = Len(fecha.Text)
If fecha.Visible Then
fecha.SetFocus
End If
gValidaFecha = False
Exit Function
End If
End If
End If
End If
fecha.Text = Format(fecha.Text, "dd/mm/yyyy")
gValidaFecha = True
End If
End Function
Es un poco largo, pero funciona que es lo importante, entonces, para cada fecha que tengas en tu sistema, debes hacer su correspondiente validación para cuando el objeto haya perdido el foco.
Un cordial saludo desde Chile.
Vega O'Brien.
PD: No olvides finalizar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas