Introducción del año en un campo fecha sea optativa

Tengo una tabla con un campo Fecha/Hora formato Fecha Corta. En un formulario tengo un control con origen en dicho campo. Utilizo una mascara de entrada 00/00/0000;;_ y como formato para visualizar dd" de "mmmm" de "aaaa

Por lo tanto si introduzco 10/02/2021 y se visualiza 21 de febrero de 2021, hasta ahí todo correcto, pero la fecha es un cumpleaños, y hay veces que solo conozco el día y el mes, pero estoy obligado a introducir un año, he intentado en la mascara de entrada cambiar los "0" del año por "9" del año, pero no me funciona.

Desearía si es posible que la introducción del año fuese optativa.

1 Respuesta

Respuesta
2

Angel, ningún ordenador del mundo, ninguno, trabaja con fechas. Trabaja con números. Al día 31/12/1899 se le asignó el cero, al día 01/01/1900 el 2 y así. Cuando tu escribes una fecha, por ejemplo, la que ves en la imagen

Realmente, lo que está escribiendo( aunque no lo creas) es

Por tanto, cuando a un campo le dices que va a tener formato fecha corta, el sistema entiende que te vas a referir a días, meses y años. Si no le escribes el año todo se viene abajo.

Es lo mismo que cuando escribes una macro. Tu seleccionas, por ejemplo, Ir a siguiente registro y eso es lo que ves, pero en realidad le estás diciendo

Docmd. Gotorecord,, acnext

Dicho esto, un cumpleaños se distingue por el día y el mes, nunca por el año y hay 2000 ( sin exagerar) formas de hacerlo, usando, por ejemplo, la función Day([fechanac]) y Month([fechanac])

Hola Julián. Muchas Gracias. Entiendo lo que me explicas. 

Mi pregunta ahora sería, si el campo de la tabla en lugar de Fecha/Hora sería Texto Corto, con la posibilidad de poder introducir en el campo del formulario 10021970 o 1002, que sería como se guardaría en la tabla, pero en el formulario se visualizaría según el caso como 10 de febrero de 1970 o 10 de febrero. Ya que es un campo que solo lo utilizaré como información, no haré ninguna operación con ese campo.

Anjel 

Te he dicho que hay muchas formas de hacerlo. Por ejemplo, si tengo el formulario

Puedes ver que el cursor todavía está en el control MesN. Cuando pulso Enter( aunque podría ser en cualquier otro evento)

Me pone el nombre del mes correspondiente al valor 10 aunque el control MesN es texto. Como puedes ver no hay puesto año, Si pulso el botón(digo lo mismo sobre que podría ser en cualquier evento)

No me rellena la fecha con año, pero sí Fecha sin año. Vamos a suponer que si le pongo año

Cuando pulso el botón, como en este caso, si tiene año

Me rellena la fecha, en formato Fechacorta ( también se le podría decir que rellenara el control Fecha sin año. El código del botón es

Private Sub Comando8_Click()
MesL = MonthName([MesN])
If IsNull([AñoN]) Then
FechaSinAño = DiaN & " de " & MesL
Else
FechaConAño = CDate(DiaN & "/" & MesN & "/" & AñoN)
End If
End Sub

En el caso que citas. Si tengo la tabla Clientes con fechaNac como en la imagen

Cuando estoy en un registro del formulario y FechaNac tiene los 8 dígitos rellenos

Cuando estoy en un registro que no tiene año

no me puede rellenar EnFecha, ya que no hay año.

En este caso, en el evento Al activar el registro le tengo puesto

Private Sub Form_Current()
If Len([FechaNac]) = 4 Then
EnLetra = Left([FechaNac], 2) & " de " & MonthName(Right([FechaNac], 2))
ENFECHA = Null
ElseIf Len([FechaNac]) = 8 Then
EnLetra = Left([FechaNac], 2) & " de " & MonthName(Mid([FechaNac], 3, 2)) & " de " & Right([FechaNac], 4)
ENFECHA = CDate(Left([FechaNac], 2) & "/" & Mid([FechaNac], 3, 2) & "/" & Right([FechaNac], 4))
End If
End Sub

es decir, divido la cadena FechaNac en grupos

Hola Julián. Muchas gracias por responder, me estas sirviendo de mucha ayuda en la construcción de esta base da datos, lo explicas claramente. Pero me parece que lo que yo intentaba conseguir, à la vista de tus explicaciones, me parece que es del todo imposible.

Basándome en tu último ejemplo, lo que yo quería conseguir era que una vez que introduzca tanto 4 como 8 dígitos en FechaNac , en el mismo control apareciera escrito como aparece en tu ejemplo EN LETRA

Supongo que tendría que operar con el formato, y además no sé si en la tabla FechaNac tendía que ser Texto Corto, Número o Fecha/Hora

Saludos

Anjel

Claro que se puede. Para eso están los eventos. Si tengo un formulario con un cuadro de texto FechaNac( no necesita ni formato ni máscara de entrada)

Y escribo eso. Puedes ver que el cursor aún está en el control. Si pulso Enter

Por el contrario, si escribo

Cuando pulso Enter

El código es el mismo que puse

Private Sub FechaNac_AfterUpdate()
If Len([FechaNaC]) = 4 Then
FechaNaC = Left([FechaNaC], 2) & " de " & MonthName(Right([FechaNaC], 2))
ElseIf Len([FechaNaC]) = 8 Then
FechaNaC = CDate(Left([FechaNaC], 2) & "/" & Mid([FechaNaC], 3, 2) & "/" & Right([FechaNaC], 4))
End If
End Sub

Pero como puedes ver está en el evento Después de actualizar del cuadro de texto FechaNac.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas