A través de un comentario realizado en este blog, un lector solicitaba ayuda para poder realizar un copiado y pegado desde un rango de celdas en Excel a un documento de Word:
La idea es desarrollar un código de VBA que permite copiar y pegar una tabla desde Excel a Word, además le daremos la propiedad especial de estar vinculados.
Lo más importante antes de comenzar con el desarrollo de nuestra macro es seleccionar una biblioteca de objetos adecuado para nuestro proposito. Después de establecer una referencia a una biblioteca de objetos activando la casilla de verificación situada junto a su nombre, podremos buscar un objeto específico y sus métodos y propiedades en el Examinador de objetos.
Para activar esta referencias deberemos ejecutar el editor de VBA, presionando Alt+F11, y navegando por el menú Herramientas > Referencias seleccionaremos aquellas referencias que sean de utilidad, en nuestro caso Microsoft Word 12.0 Object Library:
La versión 12.0 es válida para trabajar con Excel 2007 y anteriores
Para implantar en nuestros códigos de VBA en Excel estos objetos será necesario incluir las siguientes líneas, que en términos generales para cualquiera de las aplicaciones de Office serían:
Dim otraApp As Otra.Application
Dim otroDoc As Otra.DocTipo
Dim otroObjeto As Otro.ObjetoEspecifico
En concreto para el caso que nos atañe:
Dim WorDApp As Word.Application
Dim WordDoc As Word.Document
Veamos entonces el código a incluir en el Editor de VBA (Alt+F11), dentro de un Módulo del explorador de proyectos es:
El resultado es que se abre un nuevo documento de Word y en él se pega, con vínculos, el rango seleccionado en nuestra Hoja de cálculo, guardando además todos los formatos existentes en nuestras celdas.
... Como hago para pasar unas columnas de una Hoja de Excel para Una Hoja de Word.Ejemp. Nombre del Plan de estudio:/Columna de Excel/ Codigo de la Mencion:/Columna de Excel/ Nombre y Apellido:/Columna de Excel/ Cedula de Identidad:/Columna de Excel/ Dia:/Columna de Excel/ Mes;/Columna de Excel/ Año;/Columna de Excel/... |
La idea es desarrollar un código de VBA que permite copiar y pegar una tabla desde Excel a Word, además le daremos la propiedad especial de estar vinculados.
Lo más importante antes de comenzar con el desarrollo de nuestra macro es seleccionar una biblioteca de objetos adecuado para nuestro proposito. Después de establecer una referencia a una biblioteca de objetos activando la casilla de verificación situada junto a su nombre, podremos buscar un objeto específico y sus métodos y propiedades en el Examinador de objetos.
Para activar esta referencias deberemos ejecutar el editor de VBA, presionando Alt+F11, y navegando por el menú Herramientas > Referencias seleccionaremos aquellas referencias que sean de utilidad, en nuestro caso Microsoft Word 12.0 Object Library:
La versión 12.0 es válida para trabajar con Excel 2007 y anteriores
Para implantar en nuestros códigos de VBA en Excel estos objetos será necesario incluir las siguientes líneas, que en términos generales para cualquiera de las aplicaciones de Office serían:
Dim otraApp As Otra.Application
Dim otroDoc As Otra.DocTipo
Dim otroObjeto As Otro.ObjetoEspecifico
En concreto para el caso que nos atañe:
Dim WorDApp As Word.Application
Dim WordDoc As Word.Document
Veamos entonces el código a incluir en el Editor de VBA (Alt+F11), dentro de un Módulo del explorador de proyectos es:
Sub Tabla_de_Excel_a_Word() 'Copia el rango de Excel seleccionado en un nuevo documento Word 'copiar rango selecionado Selection.Copy 'Crea nueva aplicación Word Dim swMSWord As Word.Application Set swMSWord = New Word.Application With swMSWord .Visible = True .Activate End With 'Abre nuevo documento Word swMSWord.Documents.Add 'Pegado con vínculo de las celdas Excel swMSWord.Selection.PasteSpecial link:=True 'Libera el objeto Word Set swMSWord = Nothing End Sub |
El resultado es que se abre un nuevo documento de Word y en él se pega, con vínculos, el rango seleccionado en nuestra Hoja de cálculo, guardando además todos los formatos existentes en nuestras celdas.
Hermano super bien, era lo que quería.
ResponderEliminarGracias
Buenos dias quisiera saber como seria posible mediante algun script de vba copiar un grafico o informacion de un documento de excel hacia una columna o fila especifica en word esto corriendo el codigo desde excel mediante una macro. Por ejemplo quisiera copiar un grafia en la columna 2 y fila 3 de una table de word mediante el macro hecho en excel.
ResponderEliminarHola, no creo sea posible desde Excel,
Eliminarpero parece más probable hacerlo desde un código en Word.
El problema desde Excel es que no podríamos indicarle, con la precisión que quieres, donde incluir la información de Excel... tan sólo hacia el documento concreto de Word.
Yo al menos no tengo conocimiento de lo contrario.
Suerte!!!
Excelente!!! me facilitaste el código correcto que necesitaba, gracias, si funciona y perfecto, solo quisiera le añadas que NO abra una nueva hoja word, sino active una existente y abierta y pegue al final de la misma.
ResponderEliminarHola Andy,
Eliminarcambia
swMSWord.Documents.Add
por
swMSWord.Documents.Open("ruta_del_archivo_Word")
debería funcionarte.
Saludos
Saludos:
ResponderEliminarLogré de hacer de otra forma el copiado y pegado de contenido de celdas de Excel a una plantilla de Word, pero no logro migrar los formatos. Me gustaría saber cómo hago llegar mi código y ver la posible solución al problema.
Muchas gracias, saludos desde Temuco - Chile.
Hola Armando,
Eliminarpuedes enviármelo a
excelforo@gmail.com
Slds
Estimado Ismael llevo mucho buscando una forma de poder copiar una celda o un grupo de celdas a word, el cual quede hipervinculado y sin formato, pero la idea es que sea como control C y control V
ResponderEliminarHola,
Eliminarel detalle de este mismo post explica como realizar un copiado-pegado en word y que mantenga el link...
El tema del formato siempre es más delicado entre diferentes aplicaciones
:(
Saludos
Estimado Ismael , he tratado de pasar un texto (nombre) de excel a word y que asuma el formato de destino, me puedes ayudar. CASTRETE73@GMAIL.COM
ResponderEliminarA traves de macros obviamente
ResponderEliminarHola Nelson,
Eliminaruna macro de este estilo debería funcionar...
Sub EscribeWord()
Dim objWord
Dim objDoc
Dim objSelection
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents.Add
objWord.Visible = True
Set objSelection = objWord.Selection
objSelection.TypeText ("aqui incluyes el texto, mediante variable, tomando datos de la celda de Excel")
End Sub
Saludos
Saludos Ismael:
ResponderEliminarTengo un codigo para abrir una hoja de Word en blanco en horizontal + margenes establecidos por mi. Luego pasa una table de Excel con Rango variable a este documento. No todo el tiempo me esta funcionando, la pega pero no bajo mis condiciones de landscape y margenes. Tambien estoy teniendo problemas para que la table se ajuste automaticamente a los margenes establecidos. Te copio el codigo por si me pueden ayudar gracias.
Att
WCHR
Sub Summary_To_Word(ByVal control As IRibbonControl) 'Transfiere la Tabla del Summary a Documento en Word (WCHR).
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range
Set sht = Worksheets("SUMMARY")
Set StartCell = Range("A1")
Worksheets("SUMMARY").UsedRange
LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'Find Last Row
sht.Range("A1:J" & LastRow).Select 'Select Range
Selection.Copy
With wordApp
.Visible = True 'Con este codigo se abrira Word y se creara un documento nuevo
.Activate
.Documents.Add
End With
wordApp.Selection.PasteSpecial link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine, DisplayAsIcon:=False
Set wordApp = Nothing
With ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = wdOrientLandscape
.TopMargin = InchesToPoints(0.2)
.BottomMargin = InchesToPoints(0.2)
.LeftMargin = InchesToPoints(0.2)
.RightMargin = InchesToPoints(0.2)
End With
Application.ScreenUpdating = False
End Sub
Hola,
Eliminarten presente que las propiedades de la tabla son independientes de las de la hoja (del documento)... entiendo que, y aquí un experto en Word te dará más pistas que yo, tendrías que ajustar las propiedades de la Tabla pegada...
Siento no poder decirte mucho más.
Saludos