Importar txt excel con ruta y nombre

He creado una mini-macro que importa el texto de un txt a excel dividiendo por columnas ya que es así como me interesa hacerlo, pero me surge un problema.
Únicamente funciona para la carpeta donde se ha creado y para el nombre del archivo de txt. La idea sería poder poner en alguna casilla del excel la ruta y en otra el nombre.txt y que la macro lo leyese de dichas casillas.

2 Respuestas

Respuesta
2
Las ref a carpetas y libros pueden guardarse como una cadena en alguna variable.
Ej:
ruta = Activesheet.range("C2")
nbrelibro = Activesheet.range("C3")
En una instrucción Open sería:
Workbooks.Open ruta & "\" & nbrelibro & ".txt"
Nota: Si la ruta en celda C2 termina con una barra, no será necesario agregarlo en la cadena. Lo mismo si el nbre del libro ya cuenta con la extensión.
Sdos. Si todo se comprendió no olvides finalizar la consulta
Buenas Elsa:
He intentado modificar el código introduciendo los comandos que mencionas pero debido a mi desconocimiento sobre el tema no doy con ello.
Te introduzco el código de la macro:
' Obt_03 Macro
'
'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\IMPORTAR\01.txt", _
        Destination:=Range("$A$6"))
        .Name = "01_4"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileFixedColumnWidths = Array(10, 8, 3, 12, 3, 10, 13, 8, 7, 7, 7, 7)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Lo que he intentado es lo siguiente:
' Obt_03 Macro
'
ruta = ActiveSheet.Range("H2")
nbrelibro = ActiveSheet.Range("H3")
'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;ruta & "\" & nbrelibro & ".txt", _
        Destination:=Range("$A$6"))

...
Pero no hay manera.
Te agradecería me indicases donde introducir los comandos que mencionas.
Muchas gracias
Ajústala así:
Voy a usar otra variable para que se vea mejor:
rutaynbre= ruta & "\" & nbrelibro & ".txt"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & rutaynbre  & """, _
        Destination:=Range("$A$6"))"
Es decir, la parte fija entre comillas & la parte variable & el resto de la parte fija entre comillas
Como al final solo hay 1 comilla la encierro también.
Sdos
Elsa
Buenas:
Este sería el código que he intentado hacer funcionar:
Sub Obt_04()
'
' Obt_04 Macro
'
ruta = ActiveSheet.Range("H2")
nbrelibro = ActiveSheet.Range("H3")
rutaynbre = ruta & "\" & nbrelibro & ".lst"
'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & rutaynbre  & """, _
        Destination:=Range("$A$6"))"

...
He cambiado la extensión del archivo para ver si con otro tipo de archivo me dejaba, pero no hay forma.
Mi conocimiento en macros y visual basic es escasa, no sé si estaré metiendo la pata en algo más gordo pero no logro que funcione.
Gracias de nuevo.
Asegurate que la macro funcione cuando incluís los datos en la misma instrucción.
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\IMPORTAR\01.txt", _
        Destination:=Range("$A$6"))
Ahora asegurate que la celda H2 tenga este valor: C:\IMPORTAR
Y que la celda H3 tenga este valor (sin espacioes en ninguna de las 2): 01 COMO TEXTO
Es probable que al ser 01 la celda lo tenga como nro...
Y también que la extensión sea la correcta. También asegurate que estés ejecutando la macro desde la hoja que tiene las celdas H2 y H3 y que el libro exista en la carpeta mencionada.
Si todo esto está correcto, avisame que reviso el tema de las comillas con mi ejemplo,
Sdos
Elsa
Buenas:
He cambiado el nombre del archivo a A1.txt y le he dado formato de texto por si acaso.
Colocando:
With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\IMPORTAR\A1.txt", _
        Destination:=Range("$A$6"))

La cosa funciona correctamente. También he comprobado la extensión, la carpeta y las celdas donde escribo y todo está correcto, pero no logro que funcione.
Muchas Gracias.
Si, hay unas comillas demás. Así debiera quedar la instrucción:
ruta = ActiveSheet.Range("H2")
nbrelibro = ActiveSheet.Range("H3")
rutaynbre = ruta & "\" & nbrelibro & ".txt"
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & rutaynbre, Destination:=Range("$A$6"))
La variable rutaynbre solo está a fines de verla más clara, podes omitir las otras (ruta y nbrelibro) dejando 1 sola cadena.
Sdos
Elsa
Respuesta

Muchísimas gracias me ayudo muchísimo los datos de esta publicación

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas