Excel - Ayuda para macro que pase valores variables de rangos de excel e insertarlos en un template de word

 
Vista:
sin imagen de perfil
Val: 196
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ayuda para macro que pase valores variables de rangos de excel e insertarlos en un template de word

Publicado por Quico (91 intervenciones) el 10/01/2019 01:05:11
He comenzado a desarrollar una macro (tirando de tutoriales) que se me escapa ya de las manos.

Consiste en una macro que relacione los datos importados de un CSV (comas) y un template de word.
De esta manera, y a ser posible sin abrir 'Word' (...o lo más oculto posible), el excel desde una página de trabajo principal, debería hacer la lectura de otra página con el CSV. Leer línea por línea, y extraer una serie de valores por rangos y exportarlos al template de Word.

El Word, generaría así, una serie de distintos informes a partir de las filas del excel.

Los detalles más claros estan anotados en la página principal del excel "JIRA_gestion.xlsm".

Agradecería enormemente ayuda para poner orden a los pasos a seguir y así automatizar estas tareas manuales que me llevan muchas horas de trabajo.
Muchas gracias.
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.072
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ayuda para macro que pase valores variables de rangos de excel e insertarlos en un template de word

Publicado por Antoni Masana (1416 intervenciones) el 10/01/2019 11:52:21
Hay varias cosas que están mal en la macro y no entiendo que es lo que se pretende que haga.

Veras he realizado algunas correcciones pero no acabo de entender que se pretende que haga:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Sub Exportar_Word()
    Dim Contador As Long, PathArch, ObjWord, Document, i, TextoBuscar, fso
 
    ' ---&---  Ocultamos el procedimiento
     Application.ScreenUpdating = False
     Contador = 0
 
    ' ---&---  Le indicamos que los datos han de salir de la página "CSV"
     Sheets("CSV").Select
 
    Dim datos(0 To 1, 0 To 2) As String '(columna,fila)
 
    ' ---&---  Le indicamos el nombre de la plantilla de Word
    PathArch = ThisWorkbook.Path & "\StoryDesignTemplate.dotx"
 
 
    ' ---&---  Pasamos a una variable, la ruta donde se guardaran los documentos de Word
     Ruta = ActiveWorkbook.Path
 
    ' ---&---  Creamos una carpeta dónde se encuentra este excal epara guardar dentro todos los Words y le llamamos "Informes"
     MkDir (Ruta & "\Informes")
 
    ' ---&---  Creamos el Objeto Word que debería ser oculto y sin abrir el programa 'Word'
    Set ObjWord = CreateObject("Word.Application")
    ObjWord.Visible = False
    ObjWord.Documents.Add Template:=PathArch, NewTemplate:=False, DocumentType:=0
 
    ' ---&---  Creamos la orden para generar un "documento" sin abrir Word
    Set Document = word.Documents.Add()    ' <--- Word no existe
    Document.SaveAs (Filename)             ' <--- No tiene contenido Filename
 
    ' ---&---  Indicamos las variables de la plantilla de Word y la correspondencia de rango de la 'Sheet' CSV importada
    ' 
    '          Primero: a este grupo de lineas les faltaban las comillas a las referencias.
    '          Segundo: No se que sentido tiene rellenar 499 lineas con estos textos.
    '          Tercero: cuando se lee el fichero InfoOrigen_CSV.csv
    ' 
    Range("B2:B500") = "[info_StoryID]"
    Range("D2:D500") = "[info_TitleStory]"
    Range("E2:E500") = "[info_Assignee]"
    Range("F2:F500") = "[info_Component]"
    Range("H2:H500") = "[info_Fix_H]"
    Range("I2:I500") = "[info_Fix_I]"
    Range("J2:J500") = "[info_Fix_J]"
    Range("K2:K500") = "[info_Fix_K]"
    Range("L2:L500") = "[info_Fix_L]"
    Range("M2:M500") = "[info_Fix_M]"
    Range("N2:N500") = "[info_Fix_N]"
    Range("O2:O500") = "[info_StoryPoints]"
    Range("P2:P500") = "[info_EpicID]"
    Range("Q2:Q500") = "[info_Sprint_Q]"
    Range("R2:R500") = "[info_Sprint_R]"
    Range("S2:S500") = "[info_Sprint_S]"
    Range("T2:T500") = "[info_Sprint_T]"
    Range("U2:U500") = "[info_Sprint_U]"
 
    For i = 0 To UBound(datos, 2)
        TextoBuscar = datos(0, i)
        ObjWord.Selection.Move 6, -1
        ObjWord.Selection.Find.Execute FindText:=TextoBuscar
 
        While ObjWord.Selection.Find.found = True
            ObjWord.Selection.Text = datos(1, i) 'texto a reemplazar
            ObjWord.Selection.Move 6, -1
            ObjWord.Selection.Find.Execute FindText:=TextoBuscar
        Wend
    Next i
 
    ObjWord.Activate
 
    ' ---&---  Si el fichero no existe, entonces lo creamos
    If Not fso.FolderExists(Ruta & "Informes" & ActiveCell.Value) Then
        fso.CreateFolder (Ruta & "Informes" & ActiveCell.Value)
        Contador = Contador + 1
    End If
 
    ' ---&---  Pasamos a la fila siguiente, y volvemos a recorrer el bucle
     ActiveCell.Offset(1, 0).Select
 
    Loop ' <-- este comando está aquí solo sin ningún sentido
 
    ' ---&---  Limpiamos el objeto
     Set fso = Nothing
 
    ' ---&---  Mostramos el procedimiento
     Application.ScreenUpdating = True
 
    ' ---&---  Mensaje de texto de creación de carpetas
    Respuesta = MsgBox("Se han generado " & Contador & " informes con éxito" & vbCrLf & _
                                                                               vbCrLf & _
                        "Se encuentras dentro de la carpeta 'Informes'", _
                        64, _
                        "Workstreams - Creación de informes a diseñar")
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 196
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ayuda para macro que pase valores variables de rangos de excel e insertarlos en un template de word

Publicado por Quico (91 intervenciones) el 10/01/2019 22:35:46
Hola Antoni.

En primer lugar, muchas gracias por la contestación.
Supongo que no supe explicarme bien, aunque el excel tenía dentro unas instrucciones con fondo anaranjado de lo que trato de hacer, con el título: ¿Que debería hacer el botón "INFORMES INDIVIDUALES"?

Trataré de explicarlo un poco mejor, ya que veo que no ha conseguido entender que pretendo hacer.

1. Lo primero es abrir el excel de macros (que estará vacio) e importar el archivo 'InfoOrigen_CSV.csv' usando el botón-macro "IMPORTAR CSV".
2. Nosotros seguimos en la hoja 'Macro' y si damos al botón-macro "STORIES" se importan 2 rangos que me interesan.
3. Ahora viene la tarea-macro que me permitiria obtener informes individuales en WORD con algunos datos de la hoja 'CSV'.

¿Qué necesito?

4. Quiero obtener a través de una macro, tantos informes en word (usando el template StoryDesignTemplate.dotx) como filas rellenas tenga la página "CSV". Puse en la macro el rango hasta 500 por poner......, en realidad me interesa que baje por el Rango B hasta que encuentre una celda vacía y entonces deduzca que ha de parar de crear informes en word. Por eso ponía en mi macro cosas como lo del 'loop' que me indica usted que no sirve para nada.

Y necesito que sea ese botón-macro "Informes individuales' de la página 'macro', el que extraiga la información de la página 'CSV' ---> Sheets("CSV").Select y así llevarlo al word.

5. En esos informes en WORD, se insertarían en los campos definidos en el template de word *.dotx aquellos datos de las celdas de los rangos de la hoja 'CSV' que he definido en mi macro. Así que se obtendría un informe por cada fila de información. (en este ejemplo serían 9 informes)

Por ejemplo, para el primer informe, la celda B2 tendría la información que se tendría que exportar al Word en la variable del *.dotx llamada:[info_StoryID]
....y así con el resto de información en cada rango para el mismo 'Informe nº1'.

6. Cada informe individual, se llamaría una vez creado con la sintaxis del la variable Range("B2:B500") - variable Range("D2:D500"). Y se guardarían en una carpeta llamada "Informes" y generada por la propia macro: MkDir (Ruta & "\Informes")
Ejemplo de nombre para el informe de la fila 2: "LFPWS-10421-[Roomba] Esto seria un titulo 9"

7. Sería ideal que estos informes se generaran de forma invisible. No se si se pueden crear en 'Word' sin abrir el word. O en caso de que se tenga que abrir el 'Word', que no se tenga que guardar cada 'informe' de forma manual. Osea, que por lo menos el Word fuera capaz de hacer un 'Salvar como...' automatizado y con el nombre indicado.

nota: La otra posibilidad de generar informes, pero entiendo que es más complicada, sería en relación al botón-macro "Crear carpetas". Si lo ejecuta, podrá ver que se generan carpetas a partir de los nombres del rango B.

¿Seria posible que una misma macro combinara la función de la macro "Crear carpetas+Informes individuales"?

Es decir, y todo siempre a partir de la info en hoja 'CSV':
a) Primero me genera una carpeta con el nombre LFPWS-10421
b) Con los valores de las filas y rangos necesarios de la página de excel 'CSV', rellena el template de word *.dotx
c) El word generado le da el nombre "LFPWS-10421-[Roomba] Esto seria un titulo 9" y es capaz de guardarlo en su carpeta LFPWS-10421

No se si me he explicado mejor. ¡Lo he intentado!
Posiblemente, muchas cosas de mi macro son incoherntes porque no tengo nociones de programación. Busco por intenet en foros, y trato de adaptarlos a mis necesidades.
Gracias por su ayuda, Antoni. :-)
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: 196
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Ayuda para macro que pase valores variables de rangos de excel e insertarlos en un template de word

Publicado por Quico (91 intervenciones) el 13/01/2019 23:05:14
He descubierto que el proceso existe y se conoce como "Combinar correspondencia", con datos de excel a word.
Trato de ver como hacer para pasar las filas de datos de la hoja 'CSV' a el template de word (*.dtx) y que se guarden documentos por separado.
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