Formato de fecha para informe

Necesito saber si es posible introducir en un informe access un campo o etiqueta de texto el cual devuelva la fecha actual pero de la siguiente forma... Dado a los veintidós días del mes de diciembre de 2022.

3 respuestas

Respuesta

Necesitas unas funciones que transformen el número de día en letra. En el diseño del informe le pongo una etiqueta que se llama Saludo y

En mi caso particular, en el evento Al dar formato de la sección Encabezado del informe, donde está la etiqueta le tengo puesto

Private Sub EncabezadoDelInforme_Format(Cancel As Integer, FormatCount As Integer)
Select Case Len(Day(Date))
Case Is = 1
Saludo.Caption = UCase("Dado a los " & Unidades(Day(Date)) & " días del mes de " & Format(Date, "mmmm") & " de " & Year(Date))
Case Else
Saludo.Caption = UCase("Dado a los " & Decenas(Day(Date)) & " días del mes de " & Format(Date, "mmmm") & " de " & Year(Date))
End Select
End Sub
Public Function Unidades(valor As Long) As String
Dim u As String
Select Case Left(Day(Date), 1)
Case Is = 1
u = "uno"
Case Is = 2
u = "dos"
Case Is = 3
u = "tres"
Case Is = 4
u = "cuatro"
Case Is = 5
u = "cinco"
Case Is = 6
u = "seis"
Case Is = 7
u = "siete"
Case Is = 8
u = "ocho"
Case Is = 9
u = "nueve"
End Select
Unidades = "" & u & ""
End Function
Public Function Decenas(valor As Long) As String
Dim d As String
Select Case Left(Day(Date), 2)
Case Is = 10
d = "Diez"
Case Is = 11
d = "once"
Case Is = 12
d = "doce"
Case Is = 13
d = "trece"
Case Is = 14
d = "catorce"
Case Is = 15
d = "quince"
Case 16 To 19
d = "dieci" & "" & Unidades(Day(Date))
Case Is = 20
d = "veinte"
Case 21 To 29
d = "veinti" & "" & Unidades(Day(Date))
Case Is = 30
d = "treinta"
Case 31
d = "treinta" & " y " & Unidades(Day(Date))
End Select
Decenas = "" & d & ""
End Function
Respuesta

Lo único que se ha de convertir es el numero de día a letra, el resto lo puede hacer Access con su funciones básicas de fecha.

Una forma limpia y sencilla para la conversión numérica a letra que se adapta como un guante, es la función CHOOSE:

XXX = Choose( Day(Date), "uno", "dos", "tres" ... "treinta", "treinta y uno")

Respuesta

Guarde esta función en un modulo

Public Function nombre_dia(Optional mfecha As Date, Optional intForma As Byte)
   If CLng(mfecha) = 0 Then
     mfecha = Date
   End If
    nombre_dia = "Dado a los " & Choose(Day(mfecha), "Un", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete", "Ocho", "Nueve", "Diez", _
    "Once", "Doce", "Trece", "Catorce", "Quince", "Dieciséis", "Diecisiete", "Dieciocho", "Diecinueve", "Veinte", _
    "Veitiun", "Veintidós", "Veintitrés", "Veinticuatro", "Veinticinco", "Veintisis", "Veintisiete", "Veitiocho", _
    "Veintinueve", "Treinta", "Treinta y un") & " días del mes de " & Format(mfecha, "mmmm") & " de " & Year(mfecha)
    If intForma = 1 Then
      nombre_dia = StrConv(nombre_dia, 1)
    ElseIf intForma = 2 Then
      nombre_dia = StrConv(nombre_dia, 2)
    ElseIf intForma = 3 Then
      nombre_dia = StrConv(nombre_dia, 3)
    End If
    

Esta función le permite obtener el nombre del mes y demás información, en mayúsculas, minúsculas o nombre propio. Ejemplo de llamada en la ventana de inmediato

1. Sin el segundo parámetro. Si omite la fecha tomará la fecha del sistema

?nombre_dia("22/12/2022")
Dado a los Veintidós días del mes de diciembre de 2022

2. En mayúsculas

?nombre_dia("22/12/2022",1)
Dado a los veintidós días del mes de diciembre de 2022

3. En minúsculas

?nombre_dia("22/12/2022",2)
Dado a los veintidós días del mes de diciembre de 2022

4. En nombre propio (Primera letra en mayúscula)

?nombre_dia("22/12/2022",3)
Dado A Los Veintidós Días Del Mes De Diciembre De 2022

Ejemplo en un informe

Diseño del informe

Resultado del informe

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas