Ahora veremos una macro para generar archivo txt en excel, esto te puede ayudar a generar carga batch para timbrar nomina , aunque excel trae una opción para guardar un archivo como texto separado por tabulaciones, usando una macro tenemos mayor versatilidad ya que se puede decidir con cual caracter se van a separar los datos, por comas, pipes, tabulaciones etc.
Además, evidentemente en una macro podremos programar otras cosas, en este caso particular, es posible que en tu base de datos haya información que no quieres que se incluya en el txt, así que se puede programar para que filtre la información y solo registre en el txt aquella información que cumpla con ciertos criterios.
Lo anterior es solo por poner un ejemplo de las ventajas de usar una macro para generar el txt e lugar de la opción guardar como de excel, en realidad las posibilidades son enormes, un ejemplo claro de de eso es nuestra aplicación de nomina en excel que genera txt para carga batch.
1.- La base de datos a procesar.
Esa es una base de datos básica que puede ser procesada por una macro para generar el txt, es sumamente importante que tenga esa estructura simple, las bases de datos complicadas, me refiero a las que tienen celdas combinadas en la sección donde los datos son registrados, son pésimas para procesar, de hecho no sirven, así que tienes que resistir la tentación de pretender agrupar información combinando celdas dentro de los registros.
2.- El resultado deseado.
En esa imagen se puede ver el resultado que se desea obtener al ejecutar la macro, básicamente se trata de almacenar cada registro de la base de datos en un archivo de texto, esto separando los datos de cada columna con algún caracter, en este caso se ve que esta separado por pipes, pero puede ser por comas, tabulaciones o cualquier otro caracter.
3.- Filtrar información que se registra en el txt.
En esta otra imagen vemos que no se registra toda la información, aquí lo que sucede es que en la macro se ha programado una condición para que solo registre a los empleados de la sucursal Culiacan.
Ese es un claro ejemplo de la ventaja de hacer esto desde una macro.
En el siguiente vídeo te explico una buena forma de generar un archivo txt usando una macro.
Descargar Macro para generar txt
Esta es solo una forma de generar un txt con una macro, hay otras que también son buenas, en este caso me parece que esta opción es excelente ya que no toma toda la información y la mete en el txt, sino que tienes la posibilidad de recorrer cada registro y filtrar los que cumplan con ciertos criterios, esto es especialmente importante cuando se tiene una gran cantidad de datos y se requiere obtener solo ciertos registros, cosa que no se puede hacer con la opción de guardar como texto que trae excel.
Espero que les sea de mucha ayuda y nos veremos en el siguiente post.
Jose Angeles dice
Al crear el TXT, como podemos hacer que se genere un archivo por cada linea de información pero adicional que a cada linea la acompañe el titulo de cada columna ?
Si pueden darme una ayuda, gracias !
Sergio dice
Nolberto, esto funciona perfectamente bien, pero necesitaría agregarle además, la primer fila que contiene datos de un encabezado y tiene una cantidad de columnas diferente al resto del excel.
Para ser mas claro, necesito exportar el contenido de la fila 2 y de la 4 en adelante.
Me podrás ayudar con esto?
Muchas gracias.
Cesar Hidalgo dice
Hola buenas tardes excelente video pero quisiera saber como para que mi archivo quede de la siguiente manera
“06”,”0601017″,”477505.000000000″,”0.00″
“06”,”0601685″,”634499.733333330″,”0.00″
al inicio me coloque las ” comillas, los separadores “,” y al final termine con las ”
al igual que si tengo un valor que es 0 cero igual me lo coloque
Atento a sus comentarios
RICARDO ROJAS dice
hola amigo buen video, pero me genera un error cuando declaro la var obj, me dice no se ha definido el tido definido por el usuario y en las opciones del editor no me desprende esta opcion
me ayudarías un monton
gracias
Renée González dice
Excelente video hermano, felicidades, sólo tengo una pregunta, cómo hago para que el archivo txt generado conserve el mismo orden de espacios que tenía en las columnas de excel. Osea cada fila de una columna (todas) cubran el mismo espacio horizontal, obviamente donde tengan que existir los espacios en blanco deben aparecer
Germán Barrientos dice
Para qué quieres el espacio fijo, si es un archivo separado por un caracter (pipe)? Si fuera de longitud fija, entonces, no se separan los campos mediante un caracter
cesar muñiz dice
Hola como podria hacer para que las lineas generadas en el txt tengan una longitud de 100 aunque solo este escrito por ejemplo 45?
Jesus eduardo bizarro dice
Buen dia
Mi duda es como cambiar el orden con el que se exportan las fechas y como cambiar el formato de la hora porque cuando se crea el txt en lugar de una hora te lo toma como un numero con decimal, quisiera saber como resolver estos problemas
Omar Machuca dice
como hago cuando en el archivo de excel necesito que queden espacion en blanco, pero que al generar el archivo plano ese espacio en blanco aparezca entre comas
Armando dice
Nolberto buenas noches: Intente descagar el archivo Macro Excel para Generar TXT, no l0 pude descargar, le agradeceria si me ayuda por favor, gracias, aprovecho para preguntar si quiero guardar un archivo con extension csv solo es cambiar la Txt por cvs.
Nolberto Lopez dice
Saludos Armando.
Le falto indicar que problema se le presento durante la descarga.
Respecto al csv, solo cambien txt por csv
Martin dice
Buenas y en caso yo desee separarlo por la cantidad de tabulaciones que desee en vez de por el pipe se puede ?
Pablo Poveda dice
Hola, permíteme felicitarte. Que gran aporte, muchas gracias. Tengo un problema nada más. En la línea de código siguiente: “tx.Write Ht.Cells(i+1,j).Value” me genera el siguiente error: “Se ha producido el error ’13’ en tiempo de ejecución: No coinciden los tipos.” ¿Qué puedo hacer? Gracias por su gentil colaboración. Saludos cordiales.
Juan Carlos Quintana dice
Buen día, tengo una duda, en caso de que quisiera agregar el símbolo “|” en el inicio de todo mi texto, ¿Cómo podría hacerlo?, esto debido a que lo estoy importando a una base de datos en SQL pero se come mi primer caracter
Resultado obtenido:
1|JUAN|11/12/2012/Culiacan|CONTADOR|20829
Resultado deseado:
|1|JUAN|11/12/2012/Culiacan|CONTADOR|20829
Nolberto Lopez dice
Saludos Juan Carlos.
En ese caso el ciclo for puede quedar de la siguiente manera.
For i = 2 To nfilas
For j = 1 To ncolumnas
tx.Write CStr("|" & Ht.Cells(i, j).Value)
If j < ncolumnas Then tx.Write vbTab Next j tx.WriteLine Next i
Juan Carlos Quintana dice
Gracias
orlando.inonan@gmail.com dice
En el caso que desee guardar todos los archivos de texto que genere el macros que se tendría que agregar
Nolberto Lopez dice
En ese caso es necesario hacer que el nombre de archivo cambie de manera dinámica, una opción sencilla es agregar la fecha y hora.
La linea que genera el nombre del archivo queda de la siguiente manera.
NombreArchivo = "Batch " & Format(Date, "dd-mm-yy") & Format(Time, " hhmmss")
orlando.inonan@gmail.com dice
excelente!!!
dany oblitas dice
Excelente explicación. Gracias mil!!!!
Aldo dice
Hola, es un excelente video y una gran aportación por lo que te agradezco.
Al implementarlo en un formulario que estoy haciendo me las variables declaradas me manda un error de compilación no se ha definido el tipo definido por el usuario.
Me podrás ayudar con el tema u orientarme al respecto.
Gracias y saludos
Horace Sanderson dice
Hola, dentro de VBA entra a Herramientas / Referencias… en las referencias disponibles debes tener “Microsoft Scripting Runtime”. En caso de que no lo veas, da clic en el botín “Examinar…” y ve a la ruta C:\Windows\SysWOW64 y busca el archivo “SCRRUN.DLL”. Lo agregas y listo.
Meyelin dice
como puedo hacer para un archivo de varias columnas genere un txt solo de la primera columna mas la segunda columna y luego la primera columna mas la tercera columna
ejemplo
pss monto1 monto2
rita 500 300
txt deberia ser
rita|500
rita|300
Martin dice
Hola! pudiste lograrlo ? Por favor estoy buscando algo muy parecido. Gracias!
Oscar Arias dice
Que buen vídeo, fácil de entender con el paso a paso. Gracias
Víctor López dice
Le comentó que en el archivo txt, incluye el número de columnas que cuenta la macro, como puedo solucionar eso?
Pedro Rojas dice
Buenasoooo!!!!!!!!!!
Carlos Garcia dice
Buenas Tardes, tremendo aporte, es posible gener este archivo con otra extensión? que no sea .txt que mas bien sea .pcr o .bch ? si es asi como lo seria?
Muchas Gracias
Constantino Araya dice
Hola, muy buena macro, es lo que necesitaba, aunque me encuentro con una dificultad. Dentro de los datos que estoy pasando al archivo txt, está uno que es de tipo DateTime, ejemplo hora “21:47:21” Así se encuentra el dato en la hoja de excel y al pasarlo al txt, le da otro formato como: “0.907881944444444”
¿Como hago para que pase al txt con éste formato 21:47:21?
jose ramon dice
muy bien explicado gracias fue de mucha ayuda
Karla Rito dice
Excelente tutorial amigo, una consulta, como puedo exportar el archivo en .csv y que muestre el Layout de las columnas c y d, ya que solo esos campos son los que necesito que se exporten al archivo. Agradezco tu ayuda. Saludos
Cristian dice
Gracias por tu aporte, pero me dice lo siguiente ” Se ha producido el error 1004 en tiempo de ejecución”.
Error definido por la aplicación o el objeto.
Como lo puedo corregir.
SLDOS.
Susan dice
Gracias por su excelente trabajo
Leo dice
Hola muy buena macro! Muchas gracias por compartir! Tengo un problema cuando la ejecuto me da “Error de compilación: No se ha definido el tipo definido por el usuario” en las siguientes líneas 1) Dim tx As Scripting.TextStream y 2) Dim Ht As Worksheet.
Estoy trabajando con MS Oficce 2013 y en las Referencias de VBA tengo activadas las siguientes:
Visual Basic for App
MS Excel 15.0 Obj Library
OLE Automation
MS Oficce 15.0 Obj library
Agradezco si me pueden ayudar! Saludos!!
Nolberto Lopez dice
Saludos Leo.
En el vídeo se indica cual es la referencia que debe agregar en VBA para que esto funcione.
Alex Perez dice
Buen día, muy buena explicación, quisiera saber como seria el código para que te de la opción de “guardar como” el archivo de TXT, para lograr guardarlo con el nombre y la ubicación que queramos.
Gracias
JONATHAN dice
Cuando se genera el txt con un solo dato en la fila? me genera un monto de palotes?
como solucionaste esto
Paul Maza Barraez dice
Buen dia.
Excelente pagina y muy bueno el video. Yo necesito que las fechas aparezcan sin separadores, como puedo lograr esto?, es decir, si aparece 25/07/2018 debe verse 25072018. Gracias
Juan dice
como puedo cambiar el nombre del archivo si ya existe ejemplo el archivo que genero se llama ventas quiero que cuando ya exista el nuevo archivo se llame ventas 1 y si genero otro se llame ventas 2. cual seria la formula.
carlos dice
buen dia,
al generar el txt quiero que el rango de la fecha salga primero (yyyy/mm/dd), como lo puedo hacer.
Gracias
Gerardo Castro dice
Una pregunta, como puedo generar el txt para que cada dato de cada columna quede alineado en el txt para tener una vision mas presentable
Darwin Balaguera dice
Hola qué tal? Excelente tutorial, tengo un problema con el formato de la fecha y los decimales en los montos, vi en las respuesta que hay solución para los decimales pero no para el formato de la fecha pues necesito que sea yyyy-mm-dd si me pudieran ayudar se lo agradecería
Ricky Martin dice
Grande Nolberto!!!! crack!!
oscar dice
Buenas Tardes
he seguido todos los pasos y el Archivo se genera bien, como podria hacer ya que tengo columnas que son solamente por ejemplo once ceros, u otras que se completan con cero automaticamente, ya que el formato asi lo indica, cuando se genera el txt no me respeta los ceros como se podrian hacer
Muchas Gracias
Saludos
Marcial dice
Excelente aporte felicidades !!
si quiero que el nombre del archivo tenga un nombre especifico a través de un TexBox, como lo incrustaría ?
Gracias.
Alvaro Carreño dice
Cordial saludo, excelente video, me puedes colaborar indicando cómo puedo generar 3 archivos txt diferentes de la misma hoja. ejemplo( celda A hasta la N, O hasta AE, y AF hasta AV) muy amable por su colaboracion.
Yanina dice
Hola Buenas tardes, yo necesito pasar un archivo sencillo con retenciones para poder importarlas en SIAP ganancias personas fisicias.
No lo hago desde la página porque las retenciones son de un fideicomiso
Agradezco su aydua
Arnold dice
Buenísimo (y)
GUILLERMO LEAL dice
Hola la verdad es que es un excelente video una excelente explicacion no se si sea posible agregar una macro o una validacion a esta me refiero a que antes de escribrir el acrchivo.txt valide si existe ya en la ruta y en caso de existir me arroje un mensaje que si deseo modificarlo al darle modificar me aparezca tal cual esta en guardado pero me permita modificarlo y de no existir continuar no se si me explique pero agradezco enormemente la auyuda
Ameth Silva dice
hola!!!
muy buen tutorial y me es de mucha ayuda,
puedes ayudarme en una modificación, lo que quiero es que respete el formato como cuando se guarda directamente desde excel como (delimitado por tabulaciones) , ya que cuando pongo en alguna celda una cantidad en enteros no lo guarda con .00
otro problemita que pasa es que cuando se guarda desde excel como (delimitado por tabulaciones) cuando en un nombre o razon social lleva puntos y coma en el archivo de txt aparece entre comillas
saludos.
espero tu respuesta pronto.
Nolberto Lopez dice
Saludos Ameth.
Para que se imprima la cantidad con decimales, solo debe cambiar la linea
tx.Write Ht.Cells(i + 1, j).Value
Por esto:
If j = 6 Then
tx.Write Format(Ht.Cells(i + 1, j).Value, "#0.00")
Else
tx.Write Ht.Cells(i + 1, j).Value
End If
El 6 indica el numero de columna donde están las cantidades
Respecto los casos donde el texto tiene puntos y comas, he realizado pruebas y no se me presenta el problema indicado, quizá viendo el archivo o la macro.
En el código, también puede cambiar la linea
If j < nColumnas Then tx.Write " "
por
If j < nColumnas Then tx.Write vbTab
Jonathan dice
Hola estimado, primero que todo excelente trabajo….consulta, he visto tu video completo en reiteradas oportunidades, he hecho todo lo que aparece ahi, pero al momento de ejecutar la macro me arroja error de “depuración” en la linea
Set tx = obj.CreateTextFile(RutaArchivo)
no tengo la menor idea que pueda ser, agradecería me pudieras ayudar por favor.
no se si es la versión del excel, yo tengo la 2010.
Gracias
Nolberto Lopez dice
Saludos Jonathan.
En el minuto 2:20 esta la solución.
Básicamente es hacer referencia la una librería “Microsoft Scripting Runtime”
Octavio Matias Arenas dice
Buen dia cuando se compila marca error en las siguientes lineas:
Dim Obj As FileSystemObject
Dim tx As Scripting.TextStream
Existe alguna libreria que tenga que añadir?-…..
Gracias y Saludos !!!
Nolberto Lopez dice
Saludos Octavio.
A partir del minuto 2:20 del vídeo se explica como hacer referencia a la librería “Microsoft Scripting Runtime”
Denis Castro dice
Hola gracias por tan importante aporte, quería saber si usted tiene un macro que me ayude a imprimir un recibo que se encuentra en la mitad de una hoja A4 y que en el momento de imprimir se genere original y copia en la misma hoja A4, con otro video ya me estoy guiando para generar el txt. Agradezco la ayuda que me pueda prestar.
Jefferson dice
Excelente tutorial, pero tengo una duda al generar el txt me cambia el formato de fecha como puedo hacer para solucionarlo, mediante un macro ya que el formato que tengo en excel es yyyy-mm-dd pero el que me arroja el txt es dd/mm/yyyy
Giancarlo Luigui dice
Buena aporte, me salio muy bien pero me gustaría saber que modificaciones se puede hacer con relación al ejemplo que distes del filtro Culiacan me gustaría saber si se puede filtrar mas datos por ejemplo culiacan y tijuana se podra?
Gerardo Oliva dice
Disculpa tengo una duda acerca de dicha configuración, anteriormente me sirvió mucho, pero ahora tengo un rango de 5,000 formulas hacia abajo las cuales son decisiones por lo tanto no en todo el rango existe información, por lo que me generó la duda de ver si puedo cortar el rango hasta donde hay información ya que actualmente los espacios se quedan en blanco en el Txt y me gustaría ver solamente la información visible, muchas gracias espero y me puedan ayudar, Saludos!
Franco Saavedra dice
Gracias fue de gran ayuda para mi!!!!!
NOLBERTO SOCORRO dice
GRACIAS….AHORA NECESITO QUE ME CONSIDERE OTRAS COLUMNAS YA QUE SOLO ME TOMA 8 Y SON 10
ricardo taico dice
Nolberto;
muy bueno tu video me ayudo mucho, yo no soy programador pero me gustaria que me ayudaras, tengo un rango de A1 a C25 que quiero enviar como txt vía outlook a una dirección, es posible hacer eso…
Tania dice
Hola Nolberto muy buenas tardes me encanto tu video sera que me puedes ayudar, con una pequeña modificacion, quiero modificar el filtro, es decir que este sea flexible que yo pueda introducir el valor de la celda con la que decidira que si es igual imprime lo que sigue
estaba pensando en algo asi
celda_selec = Application.InputBox(prompt:=”Seleccione un Sitio”, Type:=8)
If Ht.Cells(i, 9).Value = “celda_selec” Then
________________________________________________________________________________
Sub CreaTXT()
Dim NombreArchivo, RutaArchivo As String
Dim obj As FileSystemObject
Dim tx As Scripting.TextStream
Dim Mt As Worksheet
Dim i, j, nFilas, nColumnas As Integer
NombreArchivo = “Batch”
RutaArchivo = ActiveWorkbook.Path & “\” & NombreArchivo & “.txt”
Set Ht = Worksheets(“Sheet4″)
Set obj = New FileSystemObject
Set tx = obj.CreateTextFile(RutaArchivo)
Set celda_selec = Application.InputBox(prompt:=”Seleccione un Sitio”, Type:=8)
nFilas = Ht.Range(“A1”, Ht.Range(“A1”).End(xlDown)).Cells.Count
nColumnas = Ht.Range(“A1”, Ht.Range(“A1″).End(xlToRight)).Cells.Count
celda_selec = Application.InputBox(prompt:=”Seleccione un Sitio”, Type:=8)
For i = 1 To nFilas
If Ht.Cells(i, 9).Value = “celda_selec” Then
For j = 1 To nColumnas
tx.Write Ht.Cells(i, j).Value
If j < nColumnas Then tx.Write "|"
Next j
tx.WriteLine
End If
Next i
tx.Close
Set obj = Nothing
End Sub
Saludos y gracias
daniel dice
Hola, ya tengo una macro que me genera el archivo en .txt respetando las celdas pero quisiera extraer solo las que cumplan con la londitud de 200, el codigo es el siguiente:
Sub exportar()
‘Exporta un rango de celdas resultando col de datos
Dim FileSysObj As Object
Dim ArchivoTxt As Object
Dim AreaTexto
AreaTexto = ActiveSheet.Range(“M59:M119”).Value
Set FileSysObj = CreateObject(“Scripting.FileSystemobject”)
Set ArchivoTxt = FileSysObj.CreateTextFile(“C:\Users\danielsa\Documents\VW, Chr, Diamler & Ford\CHR\ECC\RTS.txt”, True)
‘Recorre el rango a copiar
Dim celda
For Each celda In AreaTexto
ArchivoTxt.WriteLine celda
Next
ArchivoTxt.Close
End Sub
Alberto dice
Hola Nolberto, he seguido todos los pasos pero no se ejecuta la macros, me sale una ventana donde indica ERROR DE COPILACION
Te envio la descripcion de la macro. Espero que pronto puedas ayudarme.
mil gracias
Sub creTXT()
Dim nombrearchivo, rutaarchivo As String
Dim obj As FileSystemObject
Dim tx As Scripting.TextStream
Dim ht As Worksheet
Dim i, j, nfilas, ncolumnas As Integer
nombrearchivo = “Batch”
rutaarchivo = ActiveWorkbook.Path & “\” & nombrearchivo & “.txt”
Set obj = New FileSystemObject
Set tx = obj.CreateTextFile(rutaarchivo)
Set ht = Worksheet(“Datos”)
nfilas = ht.Range(“a2”, ht.Range(“a2”).End(xlDown)).Cells.Count
ncolumnas = ht.Range(“a1”, ht.Range(“a1”).End(xlDown)).Cells.Count
For i = 1 To nfilas
For j = 1 To ncolumnas
tx.Write ht.Cells(i + 1, j)
tx.Write “|”
Next j
tx.WriteLine
Next i
End Sub
Nolberto Lopez dice
Saludos Alberto.
En el video se explica claramente que es necesario hacer referencia a una librería en el proyecto vba para que el código funcione.
jaime dice
hice la referencia a la libreria y aun asi manda el error de compilacion :
no se ha definido Sub o Function.
y señala Worksheet.
¿que me falta hacer?
Arturo dice
Hola Nolberto
Una duda, utilice tu macro para poder realizar un TXT de cifras en porcentaje, de estas necesito que este limitadas a cierto numero de dígitos, es decir en el caso de que tubiera una cifra como0.9023456785 solo me guarde los primeros 5 digitos osea 0.90234 ya que en algunos casos me pone 3.1268E3. habria alguna forma de limitar el nuemero de digitos en la Macro
sistemas Jaca dice
a ver si funciona
Sebastian Soche dice
Buenos Días,
Cuando compilo me genera un error en las siguientes lineas:
Dim Obj As FileSystemObject
Dim tx As Scripting.TextStream
Error:
no se ha definido el tipo definido por el usuario
Buscando un poco del error, encontre que debia asignar una referencia DAO para mitigar el error, pero este me sigue saliendo. Por favor su ayuda para solucionar y poder hacer que funcione la macro,
Muchas Gracias
pablo alvarez dice
como podria hacer que cada celda se gener un txt de excel
lug barry dice
hola, tengo un archivo excel ,esta programado con editor visual, formulas, etc..
pero no logro guardar los datos digitados de una hoja q los copie en otras hojas o lo genere en un archivo de txt y lo guarde en la pc..
el problema es q estos datos digitados una ves impresos son borrados para volver a digitar otros datos,, es como una especie de formato medico..
y el otro problema es q se llama con la funcion buscarv de otra tabla un dato q corresponde al nombre de un paciente, enla hoja donde se digita los datos q se borran…
nota:
norberto me dirigiste a esta pagina desde la web del programdor donde respondiste mi comentario
gracias..
Nolberto Lopez dice
Saludos Lug.
Precisamente en este post se explica como generar un txt con los datos de una tabla de datos y guardarlo en el PC.
No me queda claro cual es su problema con el uso de la funcion Busacarv, en la siguiente pagina hay un ejemplo de esa funcion
danilo efren dice
Excelente.
Magnifico tutoríal
Saludos.
Danilo
Francisco Gonzalez dice
Hola, buen día.
Ejecuto la macro pero no sé donde me lo guarda ni con que nombre, Gracias.
Nolberto Lopez dice
Saludos Francisco.
En el vídeo se explica como ponerle nombre al archivo y tambien donde queda el mismo cuando se genera.
El archivo se llama Batch, y queda guardado en el mismo directorio donde esta el archivo excel.