Importar Fechas de un archivo .txt sin interacción del usuario

Ando teniendo un problema con unos archivos que quiero importar a mi base de datos de excel, debido a que cuando importo el archivo, me cambia las fechas y me coloca "mm/dd/aaaa", no es siempre pero ciertas fechas lo hace, el problema surge al abrir el archivo, siguiendo la macro paso por paso, al abrir el archivo en la nueva ventana de excel el archivo ya aparece con las fechas cambiadas.

¿No sabrías de alguna forma de importar el archivo correctamente?! Si queres me avisas y te mando el archivo txt.

Es urgente y se que sos el mas capacitado...

1 Respuesta

Respuesta
1

. 27.04.17 #VBA fechas invertidas

Hola, Marcelo

Te respondo yo por tu urgencia, pero no sé a quién está dirigida tu pregunta porque no figura a quién le consultas.

Eso que mencionás pasa todo el tiempo, porque MS Excel puede interpretar una fecha como dia/mes/año o mes/dia/año excepto cuando el valor supera el 12 que sólo puede ser un dia (no un mes).

Entonces, si supieras que las fechas a convertir estuvieren siempre invertidas, la siguiente fórmula traduciría esa fecha al formato latinoamericano.

=FECHA(AÑO(B1);DIA(B1);MES(B1))

Pero, lo sé, no siempre es posible.

Por eso, te paso una rutina para cuando, a priori, no se puede saber si la fecha está invertida o no:

Sub CorrFecha()
MesAnA = 4 ' Sirve para ayudar a determinar qué mes debe considerar
'  
            Do While Not IsEmpty(ActiveCell)
            Set LaCelda = ActiveCell
                    LaCelda.ClearFormats
                    LaFecha = LaCelda.Value
                        If IsNumeric(LaFecha) Then
                            If Month(LaFecha) <> MesAnA Then
                                LaFecha = CDate(Month(LaFecha) & "-" & Day(LaFecha) & "-" & Year(LaFecha))
                                Colorin = 38
                            End If
                        Else
                            LaFecha = CDate(Mid(LaFecha, 1, 2) & "-" & Mid(LaFecha, 4, 2) & "-" & Right(LaFecha, 2))
                            Colorin = 37
                        End If
                    LaCelda.Value = LaFecha
                    LaCelda.NumberFormat = "dd-mmm-yy"
                    LaCelda.Interior.ColorIndex = Colorin
            LaCelda.Offset(1).Select
            Loop
            Set LaCelda = Nothing
End Sub

En cualquier caso, estas soluciones funcionan sobre el archivo donde hayas traido el txt.

Espero que te haya sido de ayuda.

Un abrazo

Fernando

(Buenos Aires)

Hola fejoal , le había preguntado a Dante Amor , pero siempre es bienvenida tu colaboración.

Esa macro, ya me la habías enviado anteriormente, y en principio funciono, pero resulta que al abrir el txt, excel cambia el mes por el día y por ejemplo 03/01/2017 me lo toma como 01/03/2017 y el código que planteas, toma como mes al mes "03" entonces arregla, pero arregla como marzo...por eso, el problema se da al abrir el txt.

.

Ok, Marcelo

Disculpame por haber contestado, pero no ví en ninguna parte a quién se la mandaste y sí que lo necesitabas con urgencia.

Igual, puede contestarte él.

En aquella solución había que indicarle un mes en particular para darle un criterio de decisión.

Alternativamente puedes probar esta que se basa en el hecho de que las fechas imposibles se muestran como un texto:

Sub CorrFecha()
'
            Do While Not IsEmpty(ActiveCell)
            Set LaCelda = ActiveCell
                    LaCelda.ClearFormats
                    LaFecha = LaCelda.Value
                        If IsNumeric(LaFecha) Then
                                LaFecha = CDate(Month(LaFecha) & "-" & Day(LaFecha) & "-" & Year(LaFecha))
                                Colorin = 38
                        Else
                            LaFecha = CDate(Mid(LaFecha, 1, 2) & "-" & Mid(LaFecha, 4, 2) & "-" & Right(LaFecha, 2))
                            Colorin = 37
                        End If
                    LaCelda.Value = LaFecha
                    LaCelda.NumberFormat = "dd-mmm-yy"
                    LaCelda.Interior.ColorIndex = Colorin
            LaCelda.Offset(1).Select
            Loop
            Set LaCelda = Nothing
End Sub

Si esta otra solución tampoco te funcionara, probá al abrir el archivo de texto estos pasos:

Busca la columna con la fecha y definele cual es el formato dia mes año que debe mostrar.

Tal vez eso te funcione.

Saludos

Fer

.

Fer, solucione extrayendo los datos directamente del archivo txt. con esta macro

Open archivo For Input As #1  'leer un archivo de texto por el canal #1
    While Not EOF(1) 'la función EOF regresa verdadero al llegar al final del archivo
        Line Input #1, texto  'lee cada una de las líneas del archivo y las almacena en la variable texto
    Wend
Close #1

Como lo que debo extraer son solamente 3 datos (CUIT, Fecha1 y Fecha2) hice que identifica y extraiga directamente esos datos y me funciono.

Te consulto otro tema, tengo un userform, donde tengo un par de labels que forman un submenu y tengo unos listbox que muestran la info, pero los labels no se sobreponen a los ListBox, sabrias de alguna forma de hacer que se sobrepongan?te muestro una imagen

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas