Visual Basic - Crear un informe en Txt con datos repetitivos

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 12 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Crear un informe en Txt con datos repetitivos

Publicado por JUAN (11 intervenciones) el 12/09/2015 17:31:52
Buenos días estimados amigos una consulta, quisiese me apoyen en la creación de una macro para generar TXT según el adjunto.

la forma como debe quedar el Txt generado debe ser asi:

01|0322|122252|50|50|
01|0322|122252|62|62|
01|0322|122252|100|100|
01|0323|122253|51|51|
01|0323|122253|63|63|
01|0323|122253|101|101|
01|0324|122254|52|52|
01|0324|122254|64|64|
01|0324|122254|102|102|
01|0325|122255|53|53|
01|0325|122255|65|65|
01|0325|122255|103|103|
01|0326|122256|54|54|
01|0332|122256|57|57|
01|0334|122256|57|57|
01|0335|122256|57|57|
01|0326|122256|66|66|
01|0332|122256|67|67|
01|0334|122256|67|67|
01|0335|122256|67|67|
01|0326|122256|104|104|
01|0332|122256|107|107|
01|0334|122256|107|107|
01|0335|122256|107|107|
01|0327|122257|55|55|
01|0327|122257|67|67|
01|0327|122257|105|105|
01|0328|122258|56|56|
01|0328|122258|68|68|
01|0328|122258|106|106|
01|0329|122259|57|57|
01|0329|122259|69|69|
01|0329|122259|107|107|

Y estoy tratando implementarlo con esta macro, existe una forma adicional, es utilizando una formula de concatenar directamente los datos de la hoja Excel, pero el sentido es realizar una macro directamente de la hoja de calculo sin utilizar formulas.

En el adjunto indico el archivo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 21
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Crear un informe en Txt con datos repetitivos

Publicado por Rafael (68 intervenciones) el 15/09/2015 14:56:59
Hola:

Con esto a mi me sale un resultado parecido a tu listado... NO IGUAL
Por que los datos en el EXCEL no coinciden...

Tampoco igual por que no explicas en ningun sitio como vas a mezclar los datos, lo que viene es un ejemplo que no saca los datos
Este primeo intuyo que lo deberia de hacer desde la hoja DATOS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Private Sub Genera_Documento()
    Dim FileNum As Long
    Dim iChoice As Integer
 
    FileNum = FreeFile()
 
    '¿Que pasa si necesitas ponerlo en otro directorio o necesitas otro nombre?
    'Lo sano aqui es que permitas seleccionarlo todo
    'ruta = ThisWorkbook.Path & "\"
    'En todo caso se lo dejaremos propuesto como el default
    fichero = Application.GetSaveAsFilename(FileFilter:= _
        "Archivos de Texto (*.txt), *.txt", _
        Title:="Guardar Archivo", _
        InitialFileName:=ThisWorkbook.Path)
    If fichero = False Then
        Exit Sub
    End If
 
    Open fichero For Output As #FileNum
    Sheets("DATOS").Select
 
    'No me gusta mucho el método pero es valido con esto ya sabes cuantos renglones procesaras.
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
        'Algo que no explicas en tu pregunta, es como vas a concatenar las columnas solo pones el ejemplo
        'Es un poco dificil ayudar asi pero en esencia con esto puedes conseguir el fichero que has puesto
        dato = ""
        concat = ""
        For j = 1 To 3
            dato = dato & concat & Cells(i, j)
            concat = "|"
        Next
        For k = 4 To 6
            car = Cells(i, k)
            If IsNumeric(car) And car <> "" Then
                renglon = dato & "|" & car & "|" & car & "|" & vbCrLf
                Print #FileNum, renglon;
            End If
        Next
    Next
    Close #FileNum
    MsgBox "El TXT fue guardado en la ruta: " & ruta
End Sub

Con este otro lo saco de la Hoja Resultados....
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Private Sub Genera_Documento_2()
    Dim FileNum As Long
    Dim iChoice As Integer
 
    FileNum = FreeFile()
 
    '¿Que pasa si necesitas ponerlo en otro directorio o necesitas otro nombre?
    'Lo sano aqui es que permitas seleccionarlo todo
    'ruta = ThisWorkbook.Path & "\"
    'En todo caso se lo dejaremos propuesto como el default
    fichero = Application.GetSaveAsFilename(FileFilter:= _
        "Archivos de Texto (*.txt), *.txt", _
        Title:="Guardar Archivo", _
        InitialFileName:=ThisWorkbook.Path)
    If fichero = False Then
        Exit Sub
    End If
 
    Open fichero For Output As #FileNum
    Sheets("RESULTADO").Select
 
    'No me gusta mucho el método pero es valido con esto ya sabes cuantos renglones procesaras.
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        'Algo que no explicas en tu pregunta, es como vas a concatenar las columnas solo pones el ejemplo
        'Es un poco dificil ayudar asi pero en esencia con esto puedes conseguir el fichero que has puesto
        dato = ""
        concat = ""
        For j = 1 To 5
            dato = dato & concat & Cells(i, j)
            concat = "|"
        Next
        renglon = dato & "|" & vbCrLf
        Print #FileNum, renglon;
    Next
    Close #FileNum
    MsgBox "El TXT fue guardado en la ruta: " & ruta
End Sub

Te anexo el fichero

Como sea pues lo pruebas y nos cuentas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 12 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Crear un informe en Txt con datos repetitivos

Publicado por JUAN (11 intervenciones) el 15/09/2015 16:24:28
Es justo lo que estaba buscando, sobre la hoja datos que es lo que se desea procesar y obtener el resultado, lo detallo en la hoja 2 "resultado" de como debe quedar el reporte luego de aplicar las macros.

El numero de filas es variado y el numero de columnas podría aproximar hasta los 20, lo implementare en todo el aplicativo y te comentare como me fue.

Gracias estimado Rafael.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 12 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Crear un informe en Txt con datos repetitivos

Publicado por JUAN (11 intervenciones) el 15/09/2015 20:58:13
Estimado Rafael buenas tardes, del archivo indicado funciona bien, pero justo lo estoy probando en una nueva secuencia de información y no he tenido el mismo resultado, según el adjunto, como podrás darte cuenta esta vez individualizo el código con su importe en el mismo color, los códigos de relación están en rangos distintos, el resultado como debería quedar lo adjunto en un txt a parte, podrás darme una mano con ello.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Crear un informe en Txt con datos repetitivos

Publicado por Rafael (68 intervenciones) el 16/09/2015 09:13:27
Claro que no vas a obtener el mismo resultado por que haces cosas diferentes y el codigo que te envie solo sirve bajo el supuesto inicial.

Aqui tienes el nuevo código, en funcion al nuevo requerimiento.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 6
Ha aumentado su posición en 12 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Crear un informe en Txt con datos repetitivos

Publicado por JUAN (11 intervenciones) el 17/09/2015 16:21:44
Estimado Rafael, el código indicado en el ultimo mensaje se adapta bien a lo planteado en el segundo requerimiento, replica los datos con exactitud, te agradezco el apoyo.

Una ultima consulta tienes algún proyecto elaborado de Inventario y gestión de Activo fijo. podría adquirírtelo.

Gracias

Juan
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar