Jump to content
xabiliza

importar ficheros .txt a hojas

Recommended Posts

Antes que nada agradecer de antemano toda la ayuda que me deis en este asunto. Soy bastante novato en VBA y no consigo crear una macro que me importe todos los archivos txt del mismo directorio donde tengo el libro excel y se copien en diferentes hojas.

estoy trabajando en una macro para automatizar varias tareas pero antes de nada me gustaría importar  los txt para luego poder seguir trabajando con la macro. La cuestion es que creamos unos 15 registros txt llamados "00517_16_Thermal_roughness_schedule_1_1_10_11-1-17_5-01-04 AM.txt", "00517_16_Thermal_roughness_schedule_2_1_10_11-1-17_5-01-04 AM.txt",.. y así sucesivamente y me gustaría importarlos en diferentes hojas con sus respectivos nombres.

00517_16_Thermal_roughness_schedule_1_1_10_11-1-17_5-01-04 AM.txt

Share this post


Link to post
Share on other sites

Qué tal @xabiliza ,

Te dejo una solución. Debes tener en cuenta:

  • En el código está la ruta que yo he usado para pruebas. La tienes que cambiar por la tuya, dónde tengas los TXT
  • El largo máximo del nombre de hoja es de 31 caracteres, así que no se puede poner todo el nombre del archivo como nombre de hoja. Lo he cambiado por todas las fechas (comprueba el archivo al ejecutar la macro)

 

Importar_TXT.xlsm

Share this post


Link to post
Share on other sites

gracias  Haplox por el aporte!!!!

he acortado los nombres de los archivos txt : 00517_16_Thermal_roug_1_1_.txt,00517_16_Thermal_roug_2_1_.txt y 00517_16_Thermal_roug_3_1_.txt como ejemplo.

me sale un error 9 en tiempo de ejecucion:  subindice fuera de intervalo

y se me queda en la linea de errores: 

If IsError(Sheets(i).Name) Then

la cuestion es que ha importado los 2 primeros archivos pero no el último: 00517_16_Thermal_roug_3_1_.txt´ alguna idea de como solucionarlo?

gracias de antemano

Share this post


Link to post
Share on other sites

@xabiliza , esa línea es para ir añadiendo Hojas si no hay más. Coméntala (pon delante de ella la palabra Rem) y prueba, pero es raro que importando los 2 primeros no lo haga con el 3º. Ese error indica que no lo encuentra :huh:... cuando tenga un rato lo miraré

Share this post


Link to post
Share on other sites
Guest Cacho R
Hace 6 horas, xabiliza dijo:

he acortado los nombres de los archivos txt

Hola! xabiliza (y Haplox).

A partir de tu corrección, quizás también pueda serte de utilidad lo siguiente:

Sub para_Importar()
Dim mPath, iFile$, ws As Worksheet

mPath = Application.GetOpenFilename("Archivos de texto (*.txt),*.txt)")
If VarType(mPath) = vbBoolean Then Exit Sub
Application.ScreenUpdating = False
mPath = Left(mPath, InStrRev(mPath, "\"))
iFile = Dir(mPath & "*.txt")
Set ws = Workbooks.Add(xlWBATWorksheet).Sheets(1)

Do Until iFile = ""
  ws.Parent.Worksheets.Add after:=ws.Parent.Worksheets(ws.Parent.Worksheets.Count)
  ActiveSheet.Name = iFile
  
  With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & _
    mPath & iFile, Destination:=ActiveSheet.Range("$A$1"))
    .AdjustColumnWidth = True: .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = True: .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False: .TextFileSpaceDelimiter = False
    .TextFileDecimalSeparator = ".": .TextFileThousandsSeparator = ","
    .Refresh BackgroundQuery:=False
  End With
  
  With ActiveSheet.Range("a1", ActiveSheet.[a3].CurrentRegion)
    .Cells(2, 1).Select: ActiveWindow.FreezePanes = True
    .RowHeight = 14: .Font.Size = 8: .Columns.AutoFit
  End With
  iFile = Dir
Loop

Application.DisplayAlerts = False
  ActiveWorkbook.Sheets(1).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

¿Comentarías?...

Share this post


Link to post
Share on other sites

Hola @Haplox,

se agradece.!!!

lo he probado y funciona bastante bien pero me da un error de automatización y se queda en la linea: .Refresh BackgroundQuery:=False 

dentro del with.

en realidad sí que ha añadido los txt pero también añade el propio archivo excel con la macro: Copia de Importar_TXT-2.xlsm y añade otra hoja final en blanco.

con la aportación de los códigos que me habéis pasado intentaré mejorarlos a ver si lo consigo. Si me funciona ya lo compartiré en este hilo. mientras tanto cualquier aportación será bienvenida.

Gracias

Share this post


Link to post
Share on other sites

@xabiliza , Ejecuta el fichero desde fuera del directorio donde tengas los TXT. A mi me ha funcionado perfecto con 3 ficheros con los nombres cambiados por los nuevos que has puesto.

Lo de que ponga también en excel, es porque busca TODOS los ficheros en el directorio. Si quisieras tener el excel en el mismo directorio, habría que añadir alguna línea de código.

Comenta y actuamos en consecuencia ;)

Share this post


Link to post
Share on other sites

Tienes razón. Me sirve de esta forma. Muchas gracias @Haplox

he usado tu código en un nuevo botón dentro de mi formulario pero me da un error de compilación: No se ha definido el tipo definido por el usuario y menciona el Dim FSO As New FileSystemObject.

hay que activar algo en referencias? lo raro es que no tengo problemas al usarlo en tu archivo.

Share this post


Link to post
Share on other sites
Hace 8 minutos , xabiliza dijo:

hay que activar algo en referencias? lo raro es que no tengo problemas al usarlo en tu archivo.

Estoooo... sí :rolleyes:

En EVBA-->Herramientas-->Referencias-->marcar "Microsoft Scripting Runtime"

Esto de las referencias me mata :angry:

Share this post


Link to post
Share on other sites
Guest Cacho R
Hace 6 horas, xabiliza dijo:

¿como podría crear/copiar esas misma hojas en el libro activo?

Obviamente: ¡No es que no se pueda hacer!...

______________________________

Sin embargo tengo la sensación que lo que has pedido no te será útil a posteriori. Me explico:

- Al cabo del proceso obtienes tantas hojas como archivos procesados.

- Además te quedan distribuidos los datos en 16 columnas por hoja.

______________________________

A partir de lo anterior me preguntaba: ¿No te sería más útil tener TODA la info en una sola hoja agregándole una "columna 17" con el nombre del archivo, precisamente?...

A partir de lo anterior podrías:

- Efectuar análisis globales de los datos (porque YA los tendrías agrupados).

- Aplicar filtros (autofiltro o filtro avanzado).

- Aplicar tablas dinámicas.

- Etc. etc. etc.

______________________________

Evalúa lo que te menciono y comenta: ¿Sí?...

Saludos, Cacho R.

Share this post


Link to post
Share on other sites
En 29/11/2017 at 14:44 , Cacho R dijo:

Sin embargo tengo la sensación que lo que has pedido no te será útil a posteriori. Me explico:

- Al cabo del proceso obtienes tantas hojas como archivos procesados.

- Además te quedan distribuidos los datos en 16 columnas por hoja.

 

La idea que tengo es seguir trabajando con cada hoja ya que tengo que extraer bastante información a una tabla para graficarla después. teniendo todas las hojas con la misma estructura puedo realizar mucho trabajos repetitivos mediante bucles para cada hoja,

Share this post


Link to post
Share on other sites
Guest Cacho R
Hace 3 horas, xabiliza dijo:

La idea que tengo es seguir trabajando con cada hoja ya que tengo que extraer bastante información a una tabla para graficarla después. teniendo todas las hojas con la misma estructura puedo realizar mucho trabajos repetitivos mediante bucles para cada hoja,

En tal caso te dejo las dos versiones para que elijas:

Importar_2.xlsm

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

INFORMACIÓN BÁSICA SOBRE PROTECCIÓN DE DATOS

Responsable: Sergio Andrés Celemín

Finalidad: Moderar y responder comentarios de usuarios. Recuerda que la información que facilites es pública, y los datos que incluyas los leerá cualquier visitante de esta web, así como el avatar que poseas.

Legitimación: Consentimiento del interesado.

Destinatarios: Hetzner Online GmbH.

Derechos: Puedes ejercitar en cualquier momento tus derechos de acceso,
rectificación, supresión, oposición y demás derechos legalmente establecidos a
través del email sergio@ayudaexcel.com.

Información adicional: Encontrarás más información en la política de privacidad.




×
×
  • Create New...

Important Information

Privacy Policy


CTA Templates.png