Macro de Excel a Word - Consejos de Excel

Tabla de contenido

Gracias a Jake, quien proporcionó la pregunta de Excel de esta semana:

¿Cómo puedo escribir una macro que tome datos de una hoja de cálculo de Excel y cree un archivo de Word para cada fila de datos?

Jake, ¡qué gran idea! A menudo tengo resultados de ventas para toda la empresa y sería fantástico poder enviar a cada representante solo su información en Word. Puede hacer esto desde Word usando Combinar correspondencia, pero controlar Word desde Excel es una perspectiva interesante. El siguiente ejemplo es bastante sencillo, pero se podría construir sobre este concepto para hacer aplicaciones bastante avanzadas.

Primero, echemos un vistazo a un conjunto de datos de muestra. Creé un libro de trabajo con dos hojas: una llamada Datos y otra llamada Plantilla. La hoja de trabajo de datos tiene muchas filas de datos. La hoja de trabajo de la plantilla tiene la estructura del documento de Word que quiero crear. En este caso, querré copiar el nombre de la columna A de la base de datos a la celda C4 de la plantilla. Las columnas B: E de la base de datos irán en las celdas C10: C13.

Primero, echemos un vistazo a un conjunto de datos de muestra. Creé un libro de trabajo con dos hojas: una llamada Datos y otra llamada Plantilla. La hoja de trabajo de datos tiene muchas filas de datos. La hoja de trabajo de la plantilla tiene la estructura del documento de Word que quiero crear. En este caso, querré copiar el nombre de la columna A de la base de datos a la celda C4 de la plantilla. Las columnas B: E de la base de datos irán en las celdas C10: C13.

La hoja de datos
La hoja de plantilla

Inicie el VB Editor con alt-F11. Como queremos emitir comandos de Word aquí, vaya a Herramientas> Referencias. Desplácese hacia abajo para encontrar "Microsoft Word 8" y marque la casilla al lado para seleccionar este elemento.

Para controlar Word desde Excel, necesita definir una variable para representar la aplicación Word. En el siguiente ejemplo, utilicé appWD. Para cualquier comando en la macro de Excel que desee aplicar a la aplicación de Word, simplemente anteponga el comando con appWD. De hecho, como nunca antes había escrito una línea de código de macro de Word, fui a Word, grabé las acciones y luego copié ese código en Excel, agregando el prefijo antes de cada línea.

Sub ControlWord() ' You must pick Microsoft Word 8.0 from Tools>References ' in the VB editor to execute Word commands. ' See VB Help topic "Controlling One Microsoft Office Application from Another" ' for more information. ' Originally published by www.MrExcel.com 2/28/1999 Dim appWD As Word.Application ' Create a new instance of Word & make it visible Set appWD = CreateObject("Word.Application.8") appWD.Visible = True Sheets("Data").Select 'Find the last row with data in the database FinalRow = Range("A9999").End(xlUp).Row For i = 2 To FinalRow Sheets("Data").Select ' Copy the name to cell C4 Range("A" & i).Copy Destination:=Sheets("Template").Range("C4") ' Copy data columns, transpose and paste in C10:C13 Range("B" & i & ":E" & i).Copy Sheets("Template").Select Range("C10").PasteSpecial Transpose:=True ' Copy the data for the new document to the clipboard Range("A1:F15").Copy ' Tell Word to create a new document appWD.Documents.Add ' Tell Word to paste the contents of the clipboard into the new document appWD.Selection.Paste ' Save the new document with a sequential file name appWD.ActiveDocument.SaveAs FileName:="File" & i ' Close this new word document appWD.ActiveDocument.Close Next i ' Close the Word application appWD.Quit End Sub

Después de ejecutar esta macro, tendrá un nuevo archivo de Word para cada fila de datos en su hoja de datos.

Gracias de nuevo a Jake por esta gran pregunta. Hay muchas aplicaciones en las que controlar Word desde dentro de Excel podría proporcionar una solución poderosa.

Articulos interesantes...