Crear txt con macro, concatenar y darle formato a cada dato con ceros a izquierda, en varias lineas.

Busco la forma de crear un txt con una macro que me concatene los datos
Y al mismo tiempo le de formato a cada uno con ceros a la izquierda para un informe bancario.
Las lineas deben quedar de la siguiente forma: 0155555555550000000000000201308020001
Nota: esto lo debo hacer en varias lineas al tiempo cada linea con sus respectivos formatos.
Este es el código en el que e estado trabajando...

Public Sub crear txt()
Dim i As Long, Nro1 As String, Nro2 As String, Nro3 As String, Nro4 As String, Nro5 As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("c:\archivo2.txt", True)
Nro1 = Format(Hoja1.Range("C" & i), "00")
Nro2 = Format(Hoja1.Range("D" & i), "0000000000")
Nro3 = Format(Hoja1.Range("E" & i), "0000000000")
Nro4 = Format(Hoja1.Range("F" & i), "000")
Nro5 = Format(Hoja1.Range("G" & i), "00")
i.WriteLine ("Dim i As Long, Nro1 As String, Nro2 As String, Nro3 As String, Nro4 As String, Nro5 As String")
i.Close
End Sub

Y este es el código modificado por el experto SANTIAGOFM el cual me genera perfectamente la linea como la quiero, (fue de gran ayuda), pero necesito ajustarlo para que me genere varias lineas al tiempo, les agradezco si pueden ayudarme

Sub crearTxt() = MODIFICADO POR SANTIAGOFM

Dm i As Long
Dim Nro1 As String
Dim Nro2 As String
Dim Nro3 As String
Dim Nro4 As String
Dim Nro5 As String
Dim nf As Integer
nf = FreeFile
Open "c:\archivo2.txt" For Output As nf
For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Nro1 = Format(Hoja1.Range("C" & i), "00")
Nro2 = Format(Hoja1.Range("D" & i), "0000000000")
Nro3 = Format(Hoja1.Range("E" & i), "0000000000")
Nro4 = Format(Hoja1.Range("F" & i), "000")
Nro5 = Format(Hoja1.Range("G" & i), "00")
Print #nf, Nro1 & Nro2 & Nro3 & Nro4 & Nro5
Next i
Close nf
End Sub

Gracias por la ayuda.

1 respuesta

Respuesta
1

¿A qué te refieres con 'varias líneas al tiempo'? ¿Tienen distinto formato las líneas? ¿Cómo sabes que formato aplicar a cada línea?

Si en alguna columna marcas el formato que lleva, supongamos 1, 2 y 3, puedes llamar a una función que formatee cada linea como corresponda e imprimir el resultado.

Me sorprendió que cerraste la pregunta después de preguntarme lo de los 'formatos varios' y con la pregunta cerrada no sé cómo contactar contigo.

Hola, ofrezco mis disculpas, soy nuevo en este foro y por error finalice la pregunta y cuando quise hacerte la pregunta de nuevo, me salia que no estabas disponible, por eso la hice abierta a todos.

con varias lineas al tiempo quiero decir que debo imprimir de esta manera:

0155555555550000000000000201308020001 - primera linea

0577777777770000001000000000000000 - segunda linea

Y así... sucesivamente con varias lineas en el archivo, como puedes ver en la segunda linea esta con diferente formato en cada dato, es decir, diferente cantidad de ceros a la izquierda

Sé que formato aplicarle debido a que tengo especificaciones concretas de cuantos ceros debo poner en cada dato de la linea.

El código que muy amablemente me ayudaste a construir me sirve para imprimir una sola linea, requiero imprimir varias lineas al tiempo.

Espero haber sido lo suficientemente claro, estoy atento a cualquier otra pregunta.

Agradezco mucho tu colaboración.

Un saludo

Una posibilidad (con formatos inventados para las lineas siguientes a la 1) podría ser:

Option Explicit
Sub crearTxt()
Dim i As Long
Dim aux As String
Dim txtRango As String
Dim nf As Integer
nf = FreeFile
Open "c:\archivo2.txt" For Output As nf
For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
' Supongamos que tienes 4 tipos de línea. Podríamos hacerlo así:
Select Case i Mod 4
Case 1:
txtRango = "C" & Format$(i) & ":G" & Format$(i)
aux = formatoLinea1(Hoja1.Range(txtRango))
Case 2:
' Supongamos que la linea 2 sólo usamos las columnas "C" y "D"
txtRango = "C" & Format$(i) & ":D" & Format$(i)
aux = formatoLinea2(Hoja1.Range(txtRango))
Case 3:
' Como no sé los formatos... pues lo pongo como el anterior
txtRango = "C" & Format$(i) & ":D" & Format$(i)
aux = formatoLinea3(Hoja1.Range(txtRango))
Case 4:
' Como no sé los formatos... pues lo pongo como el anterior
txtRango = "C" & Format$(i) & ":D" & Format$(i)
aux = formatoLinea4(Hoja1.Range(txtRango))
End Select
Print #nf, aux
Next i
Close nf
End Sub
Function formatoLinea1(ByRef r As Range) As String
formatoLinea1 = Format(r.Cells(1, 1), "00") & _
Format(r.Cells(1, 2), "0000000000") & _
Format(r.Cells(1, 3), "0000000000") & _
Format(r.Cells(1, 4), "000") & _
Format(r.Cells(1, 5), "00")
End Function
Function formatoLinea2(ByRef r As Range) As String
formatoLinea2 = Format(r.Cells(1, 1), "000000.00") & _
Format(r.Cells(1, 2), "0000000") ' El formato que sea
End Function
Function formatoLinea3(ByRef r As Range) As String
formatoLinea3 = Format(r.Cells(1, 1), "000000.00") & _
Format(r.Cells(1, 2), "0000000") ' El formato que sea
End Function
Function formatoLinea4(ByRef r As Range) As String
formatoLinea4 = Format(r.Cells(1, 1), "000000.00") & _
Format(r.Cells(1, 2), "0000000") ' El formato que sea
End Function

Hola santiago, muchísimas gracias por tu ayuda.

De verdad es muy alentador que hayan personas que estén dispuestas a ayudar desinteresadamente.

El código funciona perfecto.

Quisiera hacerte una ultima pregunta para cerrarla definitivamente.

existe la posibilidad de imprimir las lineas que yo desee?, es decir...

has de cuenta que tengo una hoja de excel con 10 lineas y deseo imprimir la linea 5, la linea 7, la linea 9 y así sin tener que imprimir todo lo que hay en la hoja de excel sino solo lo que yo elija o designe en el código.

De nuevo muchísimas gracias!!!! tu ayuda me a servido muchisimo!!!

Un saludo.

Lo que planteas, así por las buenas... dudo que se pueda hacer. No lo sé, pero me parecería muy raro.

De todas formas se me ocurre una manera de que no se vean esas líneas: esconder las filas que no quieras imprimir.

Podrías hacer algo así:

Rows("1:4").Hidden = True ' Esconde las 4 primeras líneas
Rows(6).Hidden = True ' Esconde la línea 6
Rows(8).Hidden = True ' Y la 8
ThisWorkbook.PrintOut ' Imprimimos la hoja
Rows.Hidden = False ' Presenta todas las líneas

Supongo que funcionará.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas