Excel - COMBINAR CORRESPONDENCIA EN EXCEL Y GUARDAR DOC

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

COMBINAR CORRESPONDENCIA EN EXCEL Y GUARDAR DOC

Publicado por Quico (106 intervenciones) el 14/01/2019 22:50:04
Tengo entre manos una macro para realizar un "Combinar correspondencia" dentro de un mismo excel con una hoja 'plantilla', y tratando de generar documentos individuales de WORD.

Pero tengo varios problemas y no se como solucionarlos, ya que mis conocimientos son muy limitados.

El primer problema es que los 'informes a word' salen de un CSV que importo y que tiene un nombres definidos en la cabezera. Pero esas cabezeras tienen palabras con espacio ((ej: Issue Type), o un nombre largo y encima con paréntesis como ej:Custom field (Epic Link), o el mayor problema, que es la repetición de un mismo nombre para algunas columnas, como sucede con los términos: Fix Version/s o Sprint
Para que funcione, tengo que editar esas cabezeras....pero es una perdida de tiempo.
Las tengo definidas como esto: Issue_Key = Sheets("CSV").Cells(i, 2), pero no es muy útil....

1. ¿Existe alguna manera de indicarle a la macro el rango por las letras de sus columnas (A, B, etc....)? De esta manera no sería un problema ni las repeticiones de palabras, palabras con separaciones o el resto.

2. Cuando le doy al botón de la macro ('Informes individuales'), me genera los informes en PDF, y los necesito en Word para luego poder escribrir en ellos. No consigo que me exporte a word. He hecho alguna prueba, pero me da errores.

Pongo la 'macro que estoy usando' y también archivos para que se ve más claro lo que hace. Gracias



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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
Sub COMBINAR_CORRESPONDENCIA()
 
'Ocultamos el procedimiento
 Application.ScreenUpdating = False
 Contador = 0 ' <---me faltaria saber contar el Nº de informes que genera
 
Dim i As Double
Dim ruta As String
 
Application.ScreenUpdating = False
 
'Activamos nuestro libro
ThisWorkbook.Activate
Sheets(4).Name = "GENERAR"
 
'seleccionamos hoja "GENERAR"
Sheets("GENERAR").Select
 
'Contamos el número de casos
fin = Application.CountA(Sheets("CSV").Range("A:A"))
 
'Elegimos la carpeta donde queremos guardar los archivos
On Error Resume Next
        With CreateObject("shell.application")
        ruta = .browseforfolder(0, Titulo, 0).Items.Item.Path
End With: On Error GoTo 0
 
'Si no elegimos la carpeta de destino, la macro se para
If ruta = Empty Then
        MsgBox "DEBES SELECCIONAR UNA CARPETA DE DESTINO, PULSA DE NUEVO EL BOTÓN GENERAR", vbExclamation
        Exit Sub
End If
 
'Recorremos toda la columna, hasta que encuentre una fila vacía. <---No se si es correcto
' Do While Not IsEmpty(ActiveCell)
 
'Si el fichero no existe, entonces lo creamos <---Esto falla y por eso lo comento
' If Not fso.FolderExists(ruta & "\" & ActiveCell.Value) Then
' fso.CreateFolder (ruta & "\" & ActiveCell.Value)
' Contador = Contador + 1  <------------ No se como hacer para que 'contador' me de el total de informes que hace
' End If
 
'Pasamos a la fila siguiente, y volvemos a recorrer el bucle
' ActiveCell.Offset(1, 0).Select
 
' Loop
 
'Iniciamos un for
For i = 2 To fin
'Creamos variables para cada uno de los datos variables a incorporar en la hoja "GENERAR"
 
Issue_Key = Sheets("CSV").Cells(i, 2)
Summary = Sheets("CSV").Cells(i, 4)
Assignee = Sheets("CSV").Cells(i, 5)
Component = Sheets("CSV").Cells(i, 6)
Component = Sheets("CSV").Cells(i, 7)
Fix_Version = Sheets("CSV").Cells(i, 8)
Fix_Version = Sheets("CSV").Cells(i, 9)
Fix_Version = Sheets("CSV").Cells(i, 10)
Fix_Version = Sheets("CSV").Cells(i, 11)
Fix_Version = Sheets("CSV").Cells(i, 12)
Fix_Version = Sheets("CSV").Cells(i, 13)
Fix_Version = Sheets("CSV").Cells(i, 14)
Story_Points = Sheets("CSV").Cells(i, 15)
Epic_Link = Sheets("CSV").Cells(i, 16)
Sprint = Sheets("CSV").Cells(i, 17)
Sprint = Sheets("CSV").Cells(i, 18)
Sprint = Sheets("CSV").Cells(i, 19)
Sprint = Sheets("CSV").Cells(i, 20)
Sprint = Sheets("CSV").Cells(i, 21)
 
 
'Llamamos a la macro Actualiza
Call ACTUALIZA
 
'Damos nombre a la hoja activa, que es GENERAR
ActiveSheet.Name = Sheets("CSV").Cells(i, 1) & " " & Sheets("CSV").Cells(i, 2)
With ActiveSheet
 
'Reemplazamos los datos variables en los marcadores que hemos creado en Plantilla
    Cells.Replace What:="<Issue_key>", Replacement:=Issue_Key, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Summary>", Replacement:=Summary, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Assignee>", Replacement:=Assignee, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Component>", Replacement:=Component, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Fix_Version>", Replacement:=Fix_Version, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Story_Points>", Replacement:=Story_Points, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Epic_Link>", Replacement:=Epic_Link, LookAt:=xlPart, SearchOrder:=xlByRows
    Cells.Replace What:="<Sprint>", Replacement:=Sprint, LookAt:=xlPart, SearchOrder:=xlByRows
 
End With
'Mi intención en publicar eb word cada informe, y no en PDF. Y que el título sea la combinación de 'Issue key'-'Summary'
'Publicamos en PDF, sin propiedades en el documento y sin abrir cada vez que se genere el PDF
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        ruta & "\" & ActiveSheet.Name, Quality:=xlQualityStandard, _
        IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:=False
 
'Volvemos a renombrar la hoja4 como "GENERAR"
 
Sheets(4).Name = "GENERAR"
 
Next
 
 'Mensaje de texto de creación de carpetas
Respuesta = MsgBox("Se han generado " & Contador & " informes.", 64, "Workstreams - Generación de informes")
' Aqui falla el contador que no me indica el total de informes
 
 
End Sub
Sub ACTUALIZA()
 
Dim Shape As Excel.Shape
 'Limpiamos contenidos en hoja "GENERAR"
 Sheets("GENERAR").Select
        Columns("A:Z").ClearContents
 'Eliminamos imagenes en la hoja Generar
 For Each Shape In Sheets("GENERAR").Shapes
    Shape.Delete
 Next
 
 
'Copiamos la plantilla base desde la hoja "PLANTILLA" a "GENERAR"
'Seleccionamos el rango de FILAS hasta donde tenemos texto o un rango superior
 Sheets("PLANTILLA").Select
  Rows("1:50").Select
    Selection.Copy
        Sheets("GENERAR").Select
            Rows("1:50").Select
                ActiveSheet.Paste
   ' <-----No consigo que el excel se quede en la página "Macro".
   ' Me gustaría que así fuera, y la información de 'GENERAR' se quedara ya limpia.
 
End Sub
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