Saltar al contenido
PROGRAMAR EN VBA MACROS DE EXCEL

Como copiar un Grafico de Excel a Word conectando Excel con Word


.

El ejemplo de macro que se presenta a continuación se enseña como copiar un Gráfico de Excel a Word, esta macro nos permite conectar Excel con Word, pudiendo desde Excel manejar o manipular Word, es muy común que si se deben presentar informes de ventas u otro tipo relacionados con datos numéricos, se necesite presentar un gráfico para una comprensión más facil del tema tratado.
En el link que sigue muestro como determinar y cambiar el nombre de los gráficos para poder insertar en Word el nombre del gráfico que se requiere insertar.

Si los informes son repetitivos, es decir tienen el mismo esquema variando los datos, lo cual se debe hacer en forma repetitiva, quizás mensual,  semanal, diaria o en el mas tedioso de los casos cada hora, esta macro permite copiar gráficos de Excel a Word y ayudará a confeccionar dicho informe.

Antes de seguir recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  
El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mailconectar Excel con Access y muchos ejemplos más.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

   
El archivo de ejemplo, como sucede en esta web, se podrá descargar en forma gratuita desde el link del final del post, su uso es libre pudiendo ser adaptado a las necesidades de cada uno.

Al descargar el archivo comprimido, se podrán observar dentro de éste dos archivos uno con la macro y otro archivo de Excel que es la plantilla o informe en el cual se copiarán los gráficos, al abrir el archivo de Excel, existe un botón del cual se ejecutará la macro y se observan varios gráficos que son los que se copiarán a Word.

IMPORTANTE: para que la macro funcione sin problemas, de debe descomprimir el archivo ZIP, guardando en el mismo directorio el archivo Excel con la macro y Word con la plantilla, no importa el directorio lo que si se debe respetar es que estén juntos, la explicación es que la macro buscará en el mismo directorio donde está el archivo con la macro el archivo de Word que utiliza para pegar los gráficos copiados en Excel.

La macro en un primer momento crea el nombre del archivo con que guardará el documento de Word con los gráficos, de esta manera deja intacta la plantilla, el nombre esta compuesto por el nombre de la plantilla más la fecha actual, lo mencionado se hace con el código que se muestra a continuación.

nom = ActiveWorkbook.Name
pto = InStr(nom, «.»)
nomarch = Left(nom, pto – 1)
ruta = ThisWorkbook.Path & «» & nomarch & «.docx»
El nombre del fichero nuevo se determina con estos códigos:

nomfic = nomarch & » » & Format(Date, «dd-mm-yyyy»)
rutainf = ThisWorkbook.Path & «» & nomfic & «.docx»

Posteriormente se abre el archivo de Word que utilizamos de plantilla, por eso es importante que el archivo de la macro y de Word se encuentren en el mismo directorio, ya que buscará ahí el fichero con la plantilla.


Luego la macro realiza un bucle recorriendo desde el primer al último gráfico que se encuentra en la hoja de Excel, dando un nombre igual al identificador o campo que está previamente establecido en Word, por cada gráfico buscará donde se encuentra el respectivo identificador en Word y ahí pegará el gráfico copiado en Excel, la siguiente codificación realiza lo mencionado.

For x = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(x).CopyPicture
xx = Selection.Name

ts = «[ID» & x & «]»
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
While objWord.Selection.Find.Found = True
objWord.Selection.Paste ‘ False, True, False
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
can = can + 1
Wend
Next x

Por último la macro guardará el archivo de Word con el nuevo nombre creado y que está compuesto por el nombre de la plantilla más la fecha actual, saliendo un mensaje al final de la macro avisando su finalización; para ello se usa este código.

wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument
MsgBox («Se copiaron » & can & » gráficos de Excel a Word»), vbInformation, «AVISO»

Si es preciso se puede cerrar el archivo de Word y la instancia de Word, con los siguientes códigos, el primero cierra el archivo de Word y el segundo la Instancia d Word.

wdDoc.Close

wdDoc.Quit

En el ejemplo los códigos anteriores aparecen comentados, es decir están con un apostrofe al inicio lo que le indica a la macro que no lo debe tomar como código; la macro no se cierra el archivo a los fines prácticos para poder mostrar como quedan copiados los gráficos en Word cuando finaliza la macro, pero si es preciso ustedes pueden hacer que la macro directamente cierre Word, no viendo absolutamente nada del proceso que realiza la macro, para ello se debe solamente quitar el apostrofe del código mencionado.

Sugiero descargar el fichero y ejecutar paso a paso la macro para que sea más fácil entender la programación del formulario, ejemplo de macro que se ha denominado como copiar un Gráfico de Excel a Word conectando Excel co Word

En el caso que puedas considera aportar para sostener el sitio y según incorporando nuevos ejemplos que podrás descargar en forma gratuita, en caso que no puedas solicitó compartas el conocimiento con tus amigos en redes sociales. 



Código que se inserta en un módulo

Sub CopiaGraficoAWord()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim objWord As Word.Application, wdDoc As Word.Document
On Error Resume Next
Set a = Sheets(ActiveSheet.Name)
nom = ActiveWorkbook.Name
pto = InStr(nom, «.»)
nomarch = Left(nom, pto – 1)
ruta = ThisWorkbook.Path & «» & nomarch & «.docx»
Set objWord = CreateObject(«Word.Application»)
objWord.DisplayAlerts = wdAlertsNone
objWord.Visible = True
Set wdDoc = objWord.Documents.Open(ruta)
nomfic = nomarch & » » & Format(Date, «dd-mm-yyyy»)
rutainf = ThisWorkbook.Path & «» & nomfic & «.docx»

For x = 1 To ActiveSheet.ChartObjects.Count
ActiveSheet.ChartObjects(x).CopyPicture
xx = Selection.Name

ts = «[ID» & x & «]»
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
While objWord.Selection.Find.Found = True
objWord.Selection.Paste ‘ False, True, False
objWord.Selection.Move 6, -1
objWord.Selection.Find.Execute FindText:=ts
can = can + 1
Wend
Next x

wdDoc.SaveAs Filename:=rutainf, FileFormat:=wdFormatXMLDocument
‘wdDoc.Close
MsgBox («Se copiaron » & can & » gráficos de Excel a Word»), vbInformation, «AVISO»
‘wdDoc.Quit
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


.

If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.

Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends