Excel - Macro que convierte a TXT

 
Vista:
Imágen de perfil de JOSE LUIS
Val: 121
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Macro que convierte a TXT

Publicado por JOSE LUIS (58 intervenciones) el 27/04/2018 23:15:23
Buenos tardes a los integrantes de este foro, en esta ocasión recurro a Uds, para que me brinde su apoyo y colaboración en comprender o mejorar la macro que se detalla a continuación, dicha macro permite generar los datos aun archivo TXT., y mi duda es la siguiente:

1. Al ejecutar la macro desde la Hoja PLANILLA en el botón AFPNET WEB genera el archivo AFPNET.TXT como error.
2. Pero Cuando me dirijo y ubico en hoja AFPNET y ejecuto la macro EXPORTAR_TXT_ANCHOFIJO, genera el archivo AFPNET.TXT como OK.
3. Ahora bien en el codigo de la macro, indica que debe estar en la hoja10 (Sheets 10) .

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
Sub EXPORTAR_TXT_ANCHOFIJO()
Dim i As Double
'Creamos automáticamente un .txt en blanco que llamamos EJEMPLO
'el archivo se creará en la misma unidad que tenemos el Excel.
Archivo_txt = ThisWorkbook.Path & "\" & "AFPNET.txt"
'si queremos cambiar su ubicación basta con poner Archivo_txt = "E:\EJEMPLO.txt"
Open Archivo_txt For Output As #1
 
With Sheets(10)
fin = Application.CountA(Range("A:A"))
 
 
For i = 2 To fin
'Asignamos a cada Campo la función que necesitamos aplicar
Campo1 = C_Der(.Cells(i, 1), 5)
Campo2 = C_Der(.Cells(i, 2), 12)
Campo3 = C_Der(.Cells(i, 3), 1)
Campo4 = C_Der(.Cells(i, 4), 20)
Campo5 = C_Der(.Cells(i, 5), 20)
Campo6 = C_Der(.Cells(i, 6), 20)
Campo7 = C_Der(.Cells(i, 7), 20)
Campo8 = C_Der(.Cells(i, 8), 1)
Campo9 = C_Der(.Cells(i, 9), 1)
Campo10 = C_Der(.Cells(i, 10), 1)
Campo11 = C_Der(.Cells(i, 11), 1)
Campo12 = C_Der(.Cells(i, 12), 9)
Campo13 = C_Der(.Cells(i, 13), 9)
Campo14 = C_Der(.Cells(i, 13), 9)
Campo15 = C_Der(.Cells(i, 15), 9)
Campo16 = C_Der(.Cells(i, 16), 1)
Campo17 = C_Izq(.Cells(i, 17), 2)
 
Print #1, Campo1 & Campo2 & Campo3 & Campo4 & Campo5 & Campo6 & Campo7 & Campo8 & Campo9 & Campo10 & Campo11 & Campo12 & Campo13 & Campo14 & Campo15 & Campo16 & Campo17
 
Next i
 
Close
End With
End Sub

Desde y agradezco su apoyo y colaboración.
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
Imágen de perfil de Antoni Masana
Val: 4.146
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Macro que convierte a TXT

Publicado por Antoni Masana (1456 intervenciones) el 30/04/2018 07:20:23
El problema esta aqui:

1
2
With Sheets(10)
    fin = Application.CountA(Range("A:A"))
Primero en lugar del numero de hoja es mejor poner el nombre de la hoja.
En segundo lugar la instrucción With Sheets no hace que la hoja sea la activa o seleccionada.
En tercer lugar la instrucción Application.CountA hace referencia a la hoja activa y no al objeto de la línea anterior.


Te he modificado la macro. Ya funciona bien y la he simplificado, no necesita tantas variables de campo. Es más simple y más rápida.

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
Sub EXPORTAR_TXT_ANCHOFIJO()
    Dim i As Double, Archivo_txt As String
    ' --- Creamos automáticamente un .txt en blanco que llamamos EJEMPLO
    '     el archivo se creará en la misma unidad que tenemos el Excel.
    Archivo_txt = ThisWorkbook.Path & "\" & "AFPNET.txt"
    ' --- si queremos cambiar su ubicación basta con poner Archivo_txt = "E:\EJEMPLO.txt"
    Open Archivo_txt For Output As #1
    Sheets("AFPNET").Select
    fin = Application.CountA(Range("A:A"))
    For i = 2 To fin
        ' --- Asignamos a cada Campo la función que necesitamos aplicar
        Print #1, C_Der(Cells(i, 1), 5);
        Print #1, C_Der(Cells(i, 2), 12);
        Print #1, C_Der(Cells(i, 3), 1);
        Print #1, C_Der(Cells(i, 4), 20);
        Print #1, C_Der(Cells(i, 5), 20);
        Print #1, C_Der(Cells(i, 6), 20);
        Print #1, C_Der(Cells(i, 7), 20);
        Print #1, C_Der(Cells(i, 8), 1);
        Print #1, C_Der(Cells(i, 9), 1);
        Print #1, C_Der(Cells(i, 10), 1);
        Print #1, C_Der(Cells(i, 11), 1);
        Print #1, C_Der(Cells(i, 12), 9);
        Print #1, C_Der(Cells(i, 13), 9);
        Print #1, C_Der(Cells(i, 13), 9);
        Print #1, C_Der(Cells(i, 15), 9);
        Print #1, C_Der(Cells(i, 16), 1);
        Print #1, C_Izq(Cells(i, 17), 2)
    Next i
    Close #1
End Sub

Seguro que se puede hacer de otras formas, pero esta es solo una de ellas.

Saludos.
\\//_
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