Bienvenido a la mayor comunidad de usuarios EXCEL

Regístrate ahora y podrás: / 💪 Hacer preguntas a los expertos / ⬇️ Descargar ejemplos y plantillas / 🏅 Acceder a contenidos premium

Regístrate gratis

Macro Fecha convertir en texto

Amigos

nuevamente solicito su ayuda y conocimiento, necesito que a medida que vaya ingresando fechas desde el formulario, y cuando guarde, esta fecha en la columna determinada se escriba, es decir 12/08/1975 que en la columna I se escriba 12 de agosto de 1975

1614118239256.png
Adjunto archivo, para mejor entendimiento a mi solicitud de ayuda, gracias
 

Adjuntos

  • Base Datos Sol (1).xlsm
    84,8 KB · Visitas: 9

novirus

New member
Buenas,
Bajo mi humildes conocimientos, lo tenias bastante bien, lo único es que fallaba una cosa a mi parecer.

Lo primero es cambiar el código de SUB HASTA_1000 para que se vean los resultados.
De Private Sub HASTA_1000(ByVal CIFRA As Long, MILES As Boolean)
a Function HASTA_1000(ByVal CIFRA As Long, MILES As Boolean) As String
De esta manera devolvemos el valor de L
Los Array solo los tienes declarados MACROLETRAS por eso también deben estar en HASTA_1000 o bien los haces públicos.

Luego simplemente es modificar la llamada a MACROLETRAS en la subrutina Guardar,
quedando algo así:

NuevaFila.Cells(9).Value = MACROLETRAS(Day(FrmADIP.TextBox10.Text))

Evidentemente deberás añadir el Mes y Año, pero eso es fácil.

Por otro lado te aconsejo que pongas las funciones de Guardar, Editar, con Application.EnableEvents = False
y luego cuando termines a Application.EnableEvents = True porque sino están llamando constantemente al evento
Worksheet_Change de la hoja principal y eso veras que a la larga te dará problemas y además de ralentizar
el fichero.
Te adjunto el fichero pero modificado para que le eches un vistazo.
Espero haberte ayudado.
Un saludo.
 

Adjuntos

  • Base Datos Sol (2).xlsm
    89,1 KB · Visitas: 4
Buenas,
Bajo mi humildes conocimientos, lo tenias bastante bien, lo único es que fallaba una cosa a mi parecer.

Lo primero es cambiar el código de SUB HASTA_1000 para que se vean los resultados.
De Private Sub HASTA_1000(ByVal CIFRA As Long, MILES As Boolean)
a Function HASTA_1000(ByVal CIFRA As Long, MILES As Boolean) As String
De esta manera devolvemos el valor de L
Los Array solo los tienes declarados MACROLETRAS por eso también deben estar en HASTA_1000 o bien los haces públicos.

Luego simplemente es modificar la llamada a MACROLETRAS en la subrutina Guardar,
quedando algo así:

NuevaFila.Cells(9).Value = MACROLETRAS(Day(FrmADIP.TextBox10.Text))

Evidentemente deberás añadir el Mes y Año, pero eso es fácil.

Por otro lado te aconsejo que pongas las funciones de Guardar, Editar, con Application.EnableEvents = False
y luego cuando termines a Application.EnableEvents = True porque sino están llamando constantemente al evento
Worksheet_Change de la hoja principal y eso veras que a la larga te dará problemas y además de ralentizar
el fichero.
Te adjunto el fichero pero modificado para que le eches un vistazo.
Espero haberte ayudado.
Un saludo.
Gracias Novirus
es cerca a lo que necesito, la fecha que se escriba de esta manera 18 de junio de 1984, extraer el día como numero "18", concateno "de", el mes escrito "junio" concateno "de", y el año en numero "1984.

Lo del día y el año como los extraigo, para poder concatenarlos con los "de"

ayer con el archivo que me enviaste trate pero me resulto así:

1614176339124.png
 

Adjuntos

  • Base Datos Sol (2) (1).xlsm
    89,2 KB · Visitas: 7

rodricasas

New member
Buenas Christian, cómo estás?

Capaz te sirva una función como esta:

Código:
Function FechaLetras(Fecha As String)
   
    Separador = "/"
    Cadena = Fecha
   
    'Determino día
    Dia = Left(Cadena, InStr(1, Cadena, Separador) - 1)
    Cadena = Mid(Cadena, InStr(1, Cadena, Separador) + 1)
   
    'Determino mes y año
    Mes = Left(Cadena, InStr(1, Cadena, Separador) - 1)
    Año = Mid(Cadena, InStr(1, Cadena, Separador) + 1)
    
    Select Case (Mes * 1)
        Case 1:
            MesLetras = "Enero"
        Case 2:
            MesLetras = "Febrero"
        Case 3:
            MesLetras = "Marzo"
        Case 4:
            MesLetras = "Abril"
        Case 5:
            MesLetras = "Mayo"
        Case 6:
            MesLetras = "Junio"
        Case 7:
            MesLetras = "Julio"
        Case 8:
            MesLetras = "Agosto"
        Case 9:
            MesLetras = "Septiembre"
        Case 10:
            MesLetras = "Octubre"
        Case 11:
            MesLetras = "Noviembre"
        Case 12:
            MesLetras = "Diciembre"
    End Select
            
    FechaLetras = (Dia * 1) & " de " & LCase(MesLetras) & " de " & Año
   
End Function


Luego llamas a la función pasandole como argumento el string de la fecha:
Código:
FechaLetras("18/09/1969")
y te devolverá: 18 de septiembre de 1969

Espero te sirva!
Saludos,

Rodrigo.
 
Buenas Christian, cómo estás?

Capaz te sirva una función como esta:

Código:
Function FechaLetras(Fecha As String)
  
    Separador = "/"
    Cadena = Fecha
  
    'Determino día
    Dia = Left(Cadena, InStr(1, Cadena, Separador) - 1)
    Cadena = Mid(Cadena, InStr(1, Cadena, Separador) + 1)
  
    'Determino mes y año
    Mes = Left(Cadena, InStr(1, Cadena, Separador) - 1)
    Año = Mid(Cadena, InStr(1, Cadena, Separador) + 1)
   
    Select Case (Mes * 1)
        Case 1:
            MesLetras = "Enero"
        Case 2:
            MesLetras = "Febrero"
        Case 3:
            MesLetras = "Marzo"
        Case 4:
            MesLetras = "Abril"
        Case 5:
            MesLetras = "Mayo"
        Case 6:
            MesLetras = "Junio"
        Case 7:
            MesLetras = "Julio"
        Case 8:
            MesLetras = "Agosto"
        Case 9:
            MesLetras = "Septiembre"
        Case 10:
            MesLetras = "Octubre"
        Case 11:
            MesLetras = "Noviembre"
        Case 12:
            MesLetras = "Diciembre"
    End Select
           
    FechaLetras = (Dia * 1) & " de " & LCase(MesLetras) & " de " & Año
  
End Function


Luego llamas a la función pasandole como argumento el string de la fecha:
Código:
FechaLetras("18/09/1969")
y te devolverá: 18 de septiembre de 1969

1614190883181.png

en el formulario le cambie el codigo y la fecha

NuevaFila.Cells(8).Value = FrmADIP.TextBox10.Text 'Fecha nacimiento
NuevaFila.Cells(9).Value = FechaLetras("18/09/1969") 'Fecha Nacimiento en Texto

Algo hice mal? de antemano muchas gracias.


Espero te sirva!
Saludos,

Rodrigo.
Rodricasas, esta perfecto, pero cuando al formulario le cambio la fecha, me escribe me sigue escribiendo 18 de septiembre de 1969
 

novirus

New member
Buenos dias,

Has probado a realizar lo siguiente:

Código:
Dim t_Dia as string
Dim t_Mes as string
Dim t_Any as string

Dim t_Fecha as string

t_Dia = FechaLetras(Day(FrmADIP.TextBox10.Text))
t_Mes = FechaLetras(Month(FrmADIP.TextBox10.Text))
t_Any = FechaLetras(Year(FrmADIP.TextBox10.Text))

If Len(t_Dia)>0 and Len(t_Mes)>0 And Len(t_Any)>0 then
     t_Fecha = t_Dia & " " & t_Mes & " " & t_Any
     NuevaFila.Cells(9).Value = t_Fecha
end if


Evidentemente las variables declararas arriba.

Un saludo.
 

rodricasas

New member
Ver archivo adjunto 65438

en el formulario le cambie el codigo y la fecha

NuevaFila.Cells(8).Value = FrmADIP.TextBox10.Text 'Fecha nacimiento
NuevaFila.Cells(9).Value = FechaLetras("18/09/1969") 'Fecha Nacimiento en Texto

Algo hice mal? de antemano muchas gracias.



Rodricasas, esta perfecto, pero cuando al formulario le cambio la fecha, me escribe me sigue escribiendo 18 de septiembre de 1969

Hola Christian, es que deberías pasarle como parámetro la fecha que necesitas, creo que deberías reemplazar esa línea por la siguiente:

Código:
NuevaFila.Cells(9).Value = FechaLetras(FrmADIP.TextBox10.Text) 'Fecha Nacimiento en Texto


Es decir, pasando como parámetro a la función, el contenido de la fecha que querés pasar a letras!
Saludos!

Rodrigo.
 

Temas similares

Arriba