Enter en un .txt

Hola que tal, espero se encuentren bien...
Tengo un problema con una macro que cree en VBA de Excel. Esta macro crea varios archivos ".txt" dependiendo del número de filas que el archivo tenga, sin embargo al final de cada archivo me genera un enter y no sé como decirle que no lo haga.
El punto es que cada archivo de texto debe contener 30 registros, la ventaja que tenemos es que la información siempre se encuentra en una sola columna que es la "A". Ahora lo primero que se hace es saber la última fila, y dos ciclos para que copie dato por dato en el archivo. Dentro un ciclo se crea cada libro, y se copia, guarda y cierra el archivo.
Gracias por su apoyo!
El código que manejo es el siguiente:
Range("A1").Select
Selection.End(xlDown).Select
fila = Selection.Row
libros = fila / 30
If Val(libros) > Format(Val(libros), "#") Then libros = Format(libros + 1, "#")
If Val(libros) < Format(Val(libros), "#") Then libros = Format(libros, "#")
Range("A1").Select
tramo = 0
For i = 1 To libros
tramo = tramo + 30
Open "Ruta" & i & ".txt" For Output As #i
For j = Selection.Row To tramo
Range("a" & j).Select
Print #i, Trim(ActiveCell)
'If j = 29 Then Stop
Next j
tramo = Selection.Row
Range("a" & j).Select
Close #i
Next i

1 respuesta

Respuesta
1
Como estas.
Tu problema se encuentra en la instrucción Print, que genera un espacio en blanco al final del archivo.
Para entenderlo te copio la ayuda de vba, presta atención a donde dice que si omites
Un argumento te generara el espacio en blanco, tal vez añadiento el argumento con spc(0) podría funcionar, o más sencillo, antes de cerrar el archivo simular la presión de la tecla de retroceso o backdelete con la instrucción chr() . ahora mismo no recuerdo el código de la tecla de retroceso, la de intro es chr(13)
Print # (Instrucción)
Vea también Ejemplo Detalles
Escribe en un archivo secuencial los datos con formato de presentación.
Sintaxis
Print #númeroarchivo, [listasalida]
La sintaxis de la instrucción Print # consta las siguientes partes:
Parte Descripción númeroarchivo Requerido. Cualquier número de archivo válido. Listasalida Opcional. Expresión o lista de expresiones para imprimir.
Valor
El argumento listasalida tiene los valores siguientes:
[{Spc(n) | Tab[(n)]}][expresión][posicióncarácter]
Parte Descripción Spc(n) Se utiliza para insertar caracteres de espacio en la salida, donde n es el número de caracteres de espacio para insertar. Tab(n) Se utiliza para colocar el punto de inserción en una número de columna absoluta, donde n es el número de columna. Utilice Tab sin argumentos para colocar el punto de inserción al comienzo de la siguiente zona de impresión. Expresión Expresión numérica o expresión de cadena que se va a imprimir. Posicióncarácter Especifica el punto de inserción del carácter siguiente. Se utiliza un punto y coma (;) para especificar que el punto de inserción debe estar inmediatamente después del último carácter mostrado. Utilice Tab(n) para colocar el punto de inserción en un número de columna absoluta. Utilice Tab sin argumentos para colocar el punto de inserción al comienzo de la siguiente zona de impresión. Si se omite posicióncarácter, el siguiente carácter se imprime en la línea siguiente.
Comentarios
Los datos que se escriben en un archivo con Print # se leen normalmente con Line Input # o Input.
Si omite listasalida y sólo incluye un separador de listas después de númeroarchivo, se imprime una línea en blanco en el archivo. Se pueden separar varias expresiones por medio de un espacio en blanco o de un punto y coma.
En el caso de datos de tipo Boolean se imprime True o False. Las palabras clave True y False no se traducen, cualquiera que sea la configuración regional.
Los datos de tipo Date se escriben en el archivo utilizando el formato corto de fecha estándar reconocido por el sistema. Cuando no se pone el componente correspondiente a la fecha o a la hora, o éste es igual a cero, sólo se escribe en el archivo la parte suministrada.
No se escribe nada en el archivo si los datos de listasalida son de tipo Empty. Sin embargo, si listasalida es Null, Null se escribe en el archivo.
Para datos de Error, la salida aparece como Error códigoerror. La palabra clave Error no se traducen, cualquiera que sea la configuración regional.
Todos los datos que se escriben en el archivo con Print # se adaptan regionalmente; es decir, se da formato al dato usando el separador decimal adecuado.
Puesto que Print # escribe una imagen de los datos en el archivo, debe delimitar los datos para que se impriman correctamente. Si utiliza Tab sin argumentos para mover la posición de impresión a la siguiente zona de impresión, Print # también escribe en el archivo los espacios entre campos de impresión.
Nota Si en el futuro desea leer datos de un archivo por medio de la instrucción Input #, utilice la instrucción Write # en vez de la instrucción Print # para escribir los datos en el archivo. La utilización de Write # asegura la integridad de cada campo de datos separado, al delimitarlo adecuadamente, de modo que se pueda leer otra vez utilizando Input #. La utilización de Write # asegura también que los datos se puedan leer correctamente en cualquier configuración regional.
Hola primero que nada muchas gracias por tu ayuda...
Probé lo que mencionas sin embargo, a pesar de que coloco los parámetros de la función Print para que no coloque el espacio al final, sigue colocando ese enter. Al parecer porque spc se refiere a la cantidad de espacios que dejarás antes de imprimir otra línea de texto, y en este caso el problema no es con espacios sino con un Enter, eso creo...
La función para retroceso es chr(10) y aunque lo coloqué antes de cerrar el libro el código hace caso omiso de esta función, no sé porque.
¿Alguna otra idea?...
Mmm, prueba haber sino te da error:
Print #i, Trim(ActiveCell);
(asi, con el ; añadido)
O también, igual de simular el backdelete deberías de simular la presión de la tecla &quot;arriba&quot; del teclado, para que vaya una linea más arriba, no se si funcionara, pero por dar ideas...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas