Excel - Macro para crear archivos de txt por cada hoja del excel

 
Vista:
sin imagen de perfil

Macro para crear archivos de txt por cada hoja del excel

Publicado por Akire (3 intervenciones) el 08/07/2015 21:29:11
Buenas tardes,

Tengo un archivo de excel con varias pestañas y necesito guardar cada pestaña con un nombre especifico, éste nombre debe alimentarse del nombre del archivo más un identificador que tengo en la Hoja-1(Indice) los archivos deben guardarse en .txt y con enconding UTF-8. =( no se nada de macros pero me han dicho que así podría resolverlo.

El resultado que espero es algo así:

Nombre del archivo: B_001_ABCD_020515_Camp

En la Hoja Indice tengo lo siguiente (Columna-B):
_Expertos (B2)
_Principiantes (B3)
_Obsoletos (B4)
_etc... (B5...)

El resultado sería la creación de un archivo txt por cada hoja, donde la información de la hoja-2 se asocie con el nombre del archivo y el indice, algo así:

Hoja1= Indice
Hoja2 = Nombredelarchivo+CeldaB2 = B_001_ABCD_020515_Camp_Expertos.txt // enconding UTF-8
Hoja3 = Nombredelarchivo+CeldaB3 = B_001_ABCD_020515_Camp_Principiantes.txt // enconding UTF-8
etc.

De antemano les ofrezco una disculpa si la información no es lo suficientemente clara y les agradezco su tiempo por leer mi duda.

Espero puedan ayudarme.
Saludos.
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: 2
Ha aumentado su posición en 10 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para crear archivos de txt por cada hoja del excel

Publicado por Rafael (38 intervenciones) el 09/07/2015 09:34:27
Seria mas facil ayudarte si pusieras una copia de tu archivo...

Pero bueno puedes crear una macro que haga algo asi
1
2
3
4
5
6
7
Dim fsT As Object
Set fsT = CreateObject("ADODB.Stream")
fsT.Type = 2 'Especifica el tipo de dato a guardar el 2 para guardar TEXTO
fsT.Charset = "utf-8" 'Con esto le especificas la codificación que en tu caso es UTF-8
fsT.Open 'Abres el buffer del fichero para escribir
fsT.WriteText "Caracteres especiales: äöüß" 'Seguramente esto tendra que estar en bucle para ir vaciando el contenido de las hojas.
fsT.SaveToFile sFileName, 2 'Guardas el archivo a disco, el nombre eslo que has ido tomando anteriormente.

Ya nos contaras como te ha ido...
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
sin imagen de perfil

Macro para crear archivos de txt por cada hoja del excel

Publicado por erika (3 intervenciones) el 09/07/2015 16:50:46
Muchas gracias Rafael, agradezco mucho tu respuesta y tus sugerencias.
Adjunto mi archivo y te platico que implemente la macro pero me marcaba error, quizá estoy haciendo algo mal
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: 2
Ha aumentado su posición en 10 puestos en Excel (en relación al último mes)
Gráfica de Excel

Macro para crear archivos de txt por cada hoja del excel

Publicado por Rafael (38 intervenciones) el 10/07/2015 09:34:01
Hola:

He dudado para saber si contestar o no ... pero creo mis principios y educación pueden mas que mis viceras...

A ver el archivo que me envías no esta habilitado para macros, luego es que no trae el intento que has hecho y te marca error...

podría solo contestar hasta aqui y decirte que mandes lo que llevas, ya que la idea del foro NO es que sea un sitio para que otros hagan las tareas o trabajo por mi...
si no que me ayuden cuando tengo un problema...

En fin... que siento me han engañado no obstante...

He modificado la pagina Indice agregando una columna que le diga a la macro en cada hoja cuantas columnas debe contemplar...

Esto no lo has pedido pero lo hice por que en la hoja 3 tiene mas datos que el resto
Columnas

La macro se ejecutaria asi...
Macros

Te envio el archivo excel habilitado para macros (*.xlsm) asi como los archivos que genera, estos por defecto los dejara en la carpeta "Mis Documentos" a menos que le incluyas en el nombre la ruta donde quieres que los deje...

el codigo de la Macro:
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
43
44
45
46
47
48
49
50
Public Sub GeneraTXTs()
    Dim doLoop, doSubLoop         As Boolean
    Dim rowAct, rowSubAct, colsTo, iCol As Integer
    Dim sheetTo, fileName, line, concat As String
    Dim fsT                       As Object
 
    doLoop = True
    rowAct = 2
    Do While doLoop
        'Reposiciono a la Hoja de Control
        Sheets("Indice").Select
        'Controlo que haya datos por procesar
        If Range("D" & rowAct).Value <> "" And Range("E" & rowAct).Value <> "" Then
            sheetTo = Range("D" & rowAct).Value
            fileName = Range("E" & rowAct).Value
            colsTo = Range("F" & rowAct).Value
 
            'Reposiciono a la Hoja que sera exportada
            Sheets(sheetTo).Select
            doSubLoop = True
            rowSubAct = 1
 
            Set fsT = CreateObject("ADODB.Stream")
            fsT.Type = 2 'Especifica el tipo de dato a guardar el 2 para guardar TEXTO
            fsT.Charset = "utf-8" 'Con esto le especificas la codificación que en tu caso es UTF-8
            fsT.Open 'Abres el buffer del fichero para escribir
            Do While doSubLoop
                'Valido que exista dato cuando menos en la primer columna...
                'Aqui habria que ver si requiere mas validaciones
                If Range("A" & rowSubAct).Value <> "" Then
                    'Loop para recuperar columnas
                    concat = ""
                    line = ""
                    For iCol = 1 To colsTo
                        line = line & concat & Range(Chr(64 + iCol) & rowSubAct).Value
                        concat = ";"
                    Next iCol
                    fsT.WriteText line & vbCrLf
                Else
                    doSubLoop = False
                End If
                rowSubAct = rowSubAct + 1
            Loop
            fsT.SaveToFile fileName, 2 'Guardas el archivo a disco, el nombre eslo que has ido tomando anteriormente.
        Else
            doLoop = False
        End If
        rowAct = rowAct + 1
    Loop
End Sub
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

Macro para crear archivos de txt por cada hoja del excel

Publicado por Akire (3 intervenciones) el 10/07/2015 16:10:52
Hola Rafael, agradezco tus comentarios y de antemano una disculpa si cause molestias en el foro, no sé mucho de esto y tus comentarios me sirven de mucho pues me ayudan a tener cuidado para la próxima vez.

Nuevamente gracias por tu tiempo, tu apoyo y tus comentarios, me has ayudado a resolver mi problema, todo funciona perfecto.

Buen día.
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