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

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

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")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas