¿Cuántas veces has querido importar un TXT pero por una u otra razón tiene algún valor “raro” o delimitador no funcional? ¿ninguna? bueno a mí me paso, y es por lo que en esta ocasión les comparto una sencilla pero útil macro que nos ayudara a modificar un TXT antes de hacer la importación a Excel.
Cabe destacar que no puedo atribuirme todo el logro, hay muchas partes modificadas por mí, por lo que internet es amplio y lleno de misterios así que toma lo que necesites =)
Sub modificar_txt()
Dim TextFile As Integer ‘< – – Archivo txt vació
Dim Filename, NewFile, FileContent As String ‘< – – Variables para crear el nuevo txt
Dim GetFile As Variant ‘< – – Información del explorador de Windows
‘delimitando parámetros de sistema (opcional)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
‘Abre el explorador de Windows para buscar el txt
GetFile = Application.GetOpenFilename(FileFilter:=»Text Files(*.txt),*txt», Title:=»Seleccionar TXT a modificar», MultiSelect:=False)
‘Si el usuario no selecciona ningún archivo y oprime cancelar termina la macro
If TypeName(GetFile) = «Boolean» Then
MsgBox «No se seleccionó ningún archivo», vbOKOnly
Exit Sub
‘Si selecciona un txt, lo deposita en una variable
Else
Filename = GetFile
End If
‘————— MODIFICANDO LA INFORMACION DEL TXT ————————–
‘Crea un archive vacío
TextFile = FreeFile
‘Abre el txt original en modo de solo lectura
Open Filename For Input As TextFile
‘Guarda la información del TXT en una variable
FileContent = Input(LOF(TextFile), TextFile)
‘Cierra el txt original
Close TextFile
‘Buscar y reemplazar las partes a modificar
‘ Este paso se puede repetir tanto como sea necesario
FileContent = Replace(FileContent, «<«, «|») ‘< – – Modificar esto por lo que se quiera reemplazar
‘Crear un nuevo TXT donde se guardará la información modificada
TextFile = FreeFile
‘Pregunta por el nombre del nuevo archivo con terminación .txt
NewFile = InputBox(«¿Cuál será el nombre del nuevo archivo?», , «example.txt»)
‘Abre el txt en modo de escritura
Open «C:\Users…\» & NewFile For Output As TextFile ‘< – – Modificar aquí la ruta de guardado
‘Escribe aquí los nuevos datos del txt nuevo
Print #TextFile, FileContent
‘Cierra el nuevo txt
Close TextFile
‘delimitando parámetros de sistema (opcional)
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Hola, estupendo, gracias por el aporte, solo tengo una duda, si quisiera modificar muchos archivos al mismo tiempo, ¿como seria?
Hola mi estimado!
En el código que publico, tengo una opción llamada MultiSelect:=False, si tu la cambias a True podras dejar al usuario seleccionar varios documentos ya que tu variable se vuelve un array.
En el caso que el usuario seleccione varios documentos, todo lo que tienes que hacer es activar un ciclo for o un loop para pasar por cada documento y extraer la información.
Aquí mas detalles https://docs.microsoft.com/en-us/office/vba/api/excel.application.getopenfilename
estuvo de fabula, si tambien llego el dia en que tuve tu misma duda, gracias colega
Todos los caminos de Excel llevan al mismo lado 😀
Gracias a ti Wilson!