H o l a:
Te anexo una macro para que la pruebes.
Sub ImportarTxt()
'Por.Dante Amor
ruta = "C:\trabajo\"
arch = "archivo 1"
hoja = "Hoja3"
On Error Resume Next
ActiveWorkbook.Connections(arch).Delete
On Error GoTo 0
'
With Sheets(hoja).QueryTables.Add(Connection:= _
"TEXT;" & ruta & arch & ".txt", Destination:=Sheets(hoja).Range("$A$1"))
.Name = "ImportarTxt"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 5
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(2, 1, 3)
.TextFileDecimalSeparator = "."
.TextFileThousandsSeparator = ","
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Lo que tienes que ajustar en la macro:
1. La carpeta en la siguiente línea:
ruta = "C:\trabajo\"
2. El nombre del archivo sin extensión en la siguiente línea:
arch = "archivo 1"
3. El nombre de la hoja en donde quieres escribir los datos:
hoja = "Hoja3"
4. El tiempo de actualización, si quieres que se ejecute cada 10 minutos, en la siguiente línea, cambia el 5 por el 10:
.RefreshPeriod = 5
5. El número de columnas que vienen en el archivo, de la siguiente forma:
.TextFileColumnDataTypes = Array(2, 1, 3)
En la instrucción anterior, tengo esto Array(2, 1, 3)
El 2 significa tipo Texto, el 1 tipo General, el 3 tipo Fecha (MDA)
En mi ejemplo, mi archivo tiene 3 columnas.
La primer columna es tipo texto, la segunda es general y la tercera es una fecha, pero con formato (MDA).
Lo que tienes que agregar son números 1, 2 o 3 por cada columna que tienes, por ejemplo, si tienes 7 columnas, de esta forma
Columna Tipo
1 Texto
2 General
3 Texto
4 Fecha
5 General
6 General
7 Fecha
Entonces tienes que poner así la línea:
.TextFileColumnDataTypes = Array(2, 1, 2, 3, 1, 1, 3)
6. Los tipos General son importes, entonces todos quedarán con este formato:
.TextFileDecimalSeparator = "."
. TextFileThousandsSeparator = ","
Prueba con los separadores, si no te funcionan, entonces cambia a esto:
.TextFileDecimalSeparator = ","
. TextFileThousandsSeparator = "."
Avísame si necesitas apoyo para los cambios en la macro.