Cuando se trata de VBA para Excel, se le perdonará que piense que su código solo funcionaría con Excel. Sin embargo, el hecho de que VBA (Visual Basic for Applications) sea común a todas las aplicaciones de Office Suite abre un sinfín de posibilidades.
Por ejemplo, puede capturar datos en Excel a través de un formulario de usuario y luego exportarlos automáticamente a un documento de Word. La belleza de esto es que todo se ejecuta en segundo plano. En otras palabras, no necesita copiar manualmente los datos de Excel, buscar el documento de Word correcto para pegar esta información, guardar el archivo y luego cerrar Word nuevamente.
Nuestro libro VBA Automation for Excel 2019 Cookbook aborda estos temas.
En este artículo, veremos recetas para:
Al final, podrá crear documentos de Word desde Excel.
Estas recetas se escribieron y diseñaron para usarse con MS Office 2019 y MS Office 365, instalados en Windows 8, 8.1 o 10.
Si su hardware y software cumplen con estos requisitos, está listo para comenzar.
Los archivos de demostración se pueden descargar desde https://github.com/PacktPublishing/VBA-Automation-for-Excel-2019-Cookbook .
Visite el siguiente enlace para ver los videos de Code in Action: https://bit.ly/3jQRvVk .
Crear una nueva instancia de Word
El primer paso en el proceso de creación de un documento de Word desde Excel requiere algunos cambios en las referencias disponibles. Para ser específicos, debemos establecer una referencia a la biblioteca de objetos de Word en el Editor de VBA. Sin este paso, Excel no puede comunicarse con Word en absoluto, y mucho menos crear documentos y párrafos.
En esta receta, crearemos una nueva instancia de Word desde Excel.
preparándose
Abra Excel y active un nuevo libro de trabajo. Guarde el archivo como un archivo habilitado para macros (*.xlsm) en su escritorio y llámelo Word_Interaction.xlsm. Sheet1 debe estar activo. Presione Alt + F11 para cambiar al Editor de VBA y luego inserte un nuevo módulo.
No hace falta decir que MS Word también debe estar instalado en su computadora para que las instrucciones de esta receta funcionen de manera efectiva.
Cómo hacerlo…
Aquí se explica cómo vincular Word a Excel:
1. En el Editor de VBA, haga clic en Herramientas | Referencias. Se abrirá el cuadro de diálogo Referencias – VBAProject:
Figura 1: el cuadro de diálogo Referencias - VBAProject
2. Desplácese hacia abajo en la lista de referencias disponibles hasta que encuentre la Biblioteca de objetos de Microsoft Word 16.0. Las versiones anteriores de Word tendrán un número diferente, pero seguirán haciendo referencia a la biblioteca de objetos de Word:
Figura 2: la biblioteca de objetos de Microsoft Word 16.0 seleccionada
3. Una vez seleccionado, haga clic en Aceptar para guardar la selección y cerrar el cuadro de diálogo.
Nota: la referencia a la biblioteca de objetos de Word solo es válida para el libro de trabajo de Excel en el que está trabajando actualmente. Cada nuevo libro de trabajo deberá hacer referencia a Word exactamente de la misma manera.
4. Cree un procedimiento Sub para iniciar Word desde Excel. Hay varias formas de hacer esto, pero para esta receta, usaremos esta técnica específica:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application wdApp.Visible = True wdApp.Activate End Sub
5. Presione F5 para ejecutar el procedimiento, o para probarlo, si lo desea. Aparecerá una nueva instancia de Word en su pantalla. Cierre la aplicación de Word una vez que sepa que el procedimiento Sub está funcionando.
6. Abrir Word sin abrir un nuevo documento no es muy útil. Agregue las siguientes líneas de código al procedimiento Sub para abrir un nuevo documento:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application With wdApp .Visible = True .Activate .Documents.Add End With End Sub
Nota: Debido a que necesitamos usar la palabra clave Word.Application cada vez que nos referimos a MS Word, la estructura de bucle facilita la referencia a Word.Application a través de la variable wdApp.
Estos pasos le permitirán crear una nueva instancia de Word desde Excel, usando VBA para Excel.
Cómo funciona…
Habilitar la biblioteca de objetos de Microsoft Word para este libro de Excel hizo posible el uso de palabras clave y métodos de Word dentro de Excel. Estas palabras clave pueden abrir una instancia de Word, así como un nuevo documento de Word, todo desde Excel.
Escritura y formato de texto.
Está muy bien saber cómo abrir Word con un nuevo documento disponible. Sin embargo, necesitamos más que esto. Un encabezado para el nuevo documento sería un buen comienzo, pero aún no es suficiente. También es necesario formatear el encabezado, y lo completará profesionalmente.
En esta receta, escribiremos y formatearemos texto.
preparándose
Asegúrese de que Word_Interaction.xlsm aún esté abierto y que el editor de VBA esté activo.
Cómo hacerlo…
Estos son los pasos para ingresar y formatear texto en Word:
1. Para agregar texto a un documento de Word a través de Excel, agregue la siguiente línea de código:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application With wdApp .Visible = True .Activate .Documents.Add .Selection.TypeText "Employee Information" End With End Sub
2. Presione F5. Ejecutar el procedimiento Sub ahora dará como resultado una nueva instancia de Word, con un nuevo documento abierto y la línea de texto en el procedimiento Sub en la parte superior de la página. Cierra Word sin guardar, ya que hay más código para agregar a nuestro procedimiento en Excel:
Figura 3 – Nueva instancia de Word, con documento y texto
3. Está bastante claro que necesitamos hacer algo de formato aquí. Al iniciar una estructura de bucle anidado, esto nos ahorrará repetir las palabras clave. Además, si no lo ha hecho hasta ahora, puede usar IntelliSense para ayudarlo con todas las palabras clave de Word. Agregue las siguientes líneas de código al Editor de VBA:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application With wdApp .Visible = True .Activate .Documents.Add With .Selection .ParagraphFormat.Alignment = _ wdAlignParagraphCenter .BoldRun 'Switch Bold on .Font.Size = 16 .TypeText "Employee Information" .BoldRun 'Switch Bold off .TypeParagraph 'Enter a new line .Font.Size = 11 .ParagraphFormat.Alignment = _ wdAlignParagraphLeft .TypeParagraph End With End With End Sub
4. Cuando ejecute el procedimiento Sub ahora, habrá una notable mejora en la apariencia:
Figura 4: formateo realizado a través de VBA en Excel
Usando estos principios, los usuarios podrán formatear un documento de Word con codificación VBA en Excel.
Podríamos haber abierto Word manualmente y lograr lo que acabamos de hacer, pero el objetivo del ejercicio es hacerlo desde Excel, de modo que los datos en una hoja de cálculo se puedan escribir en el documento de Word automáticamente.
Lo que debemos hacer ahora es seleccionar datos, copiarlos y luego pegarlos como parte del proceso de apertura y formateo.
En esta receta, copiaremos datos en Word.
preparándose
Asegúrese de que Word_Interaction.xlsm aún esté abierto. Active Sheet1 e ingrese los siguientes datos:
Figura 5 – Datos de trabajo
Cómo hacerlo…
Siga estos pasos para copiar texto de Excel a Word:
1. Cree código para seleccionar automáticamente cualquier rango que esté en una hoja:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application With wdApp .Visible = True .Activate .Documents.Add With .Selection .ParagraphFormat.Alignment = _ wdAlignParagraphCenter .BoldRun 'Switch Bold on .Font.Size = 16 .TypeText "Employee Information" .BoldRun ' Switch Bold off .TypeParagraph 'Enter a new line .Font.Size = 11 .ParagraphFormat.Alignment = _ wdAlignParagraphLeft .TypeParagraph End With End With
Range( "A1" , Range( "A2" ).End(xlDown) _ .End(xlToRight)).Copy wdApp.Selection.Paste End Sub
2. Ejecute el procedimiento Sub para verificar su codificación. Sabemos que la primera parte funcionará, pero en este caso, necesitamos ver si los datos de nuestra hoja de cálculo se copiaron en Word:
Figura 6: datos de Excel copiados y pegados en Word
3. Guardar el documento de Word es lo que debemos hacer a continuación. Cuando agregue estas líneas de código, preste atención a los cambios en la instrucción With:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application With wdApp .Visible = True .Activate .Documents.Add With .Selection .ParagraphFormat.Alignment = _ wdAlignParagraphCenter .BoldRun 'Switch Bold on .Font.Size = 16 .TypeText "Employee Information" .BoldRun ' Switch Bold off .TypeParagraph 'Enter a new line .Font.Size = 11 .ParagraphFormat.Alignment = _ wdAlignParagraphLeft .TypeParagraph End With Range("A1", Range("A2").End(xlDown) _ .End(xlToRight)).Copy .Selection.Paste .ActiveDocument.SaveAs2 Environ("UserProfile") _ & "\Desktop\EmployeeReport.docx" End With End Sub
4. Lo último que debemos hacer es cerrar el documento y, finalmente, Word. Simplemente agregue las siguientes dos líneas en una nueva línea después del nombre del archivo:
.ActiveDocument.Close .Quit
5. Cuando ejecute el procedimiento ahora, verá que Word se abre brevemente y se cierra inmediatamente de nuevo. Si desea eliminar eso, simplemente comente las siguientes dos líneas:
' .Visible = True ' .Activate
6. Todavía no hemos terminado, porque cada vez que ejecutamos el procedimiento, el archivo se reemplaza sin darnos la opción de guardarlo con un nuevo nombre. Necesitamos agregar código para crear un nombre de archivo único cada vez que ejecutamos el procedimiento. Al declarar una nueva variable, SaveAsName, y luego asignar una versión formateada de la función Now, podemos crear un nombre único para el archivo cada vez que se guarda. Agregue estas dos líneas después de .Selection.Paste:
SaveAsName = Environ( "UserProfile" ) _ & "\Desktop\EmployeeReport " _ & Format(Now, "yyyy-mm-dd hh-mm-ss" ) & ".docx" .ActiveDocument.SaveAs2 SaveAsName
7. Cada vez que ejecute el procedimiento ahora, se guardará un nuevo archivo con un nombre único. Seguir estas instrucciones le permitirá copiar automáticamente datos de Excel a Word.
Cómo funciona…
Aquí hay una explicación de lo que hicimos.
Seleccionar datos en Excel no es un concepto nuevo, y tampoco lo es copiar. Guardarlo en un documento de Word con Excel VBA requiere hacer uso de la función Environ, así como formatear el nombre del archivo. Esto asegurará que se cree un nuevo archivo cada vez que se ejecute el procedimiento Excel VBA.
Copiar una hoja de cálculo de Excel completa y pegarla en Word no tiene sentido. Preferiría haber hecho todo en Word desde el principio, ahorrándose todo el esfuerzo de copiar desde Excel y pegar en Word.
El punto es que, si tiene un documento de Word existente o incluso una plantilla de Word, y necesita exportar regularmente información seleccionada de una hoja de cálculo en Excel a esta plantilla, esta es la forma de hacerlo. La palabra automatización adquiere un nuevo significado si puede vincular Excel con Word de esta manera.
En esta receta, pegaremos datos de Excel en un documento de Word en un marcador específico.
preparándose
Asegúrese de que Word_Interaction.xlsm aún esté abierto y que el Editor de VBA esté activo.
Cómo hacerlo…
Necesitamos hacer lo siguiente:
1. Abra el documento de Word que se guardó en el escritorio. Elimine la tabla insertada (seleccione solo la tabla completa, sin líneas antes o después, haga clic en la pestaña contextual Diseño y luego en Filas y columnas | Eliminar | Eliminar tabla )
2. Ingrese la oración corta Información más reciente sobre los empleados en el espacio abierto.
3. Inserte un marcador en la primera línea abierta después de esta oración. Haga clic en Insertar | marcador Aparecerá el cuadro de diálogo Marcador . Ingrese un nombre en el cuadro de texto Nombre del marcador y luego haga clic en Agregar para cerrar el cuadro de diálogo:
Figura 7 – Nombre del marcador
4. Haga clic en Archivo | Guardar como y guarde el archivo como una plantilla de Word. La extensión del archivo es .dotx. Llame al archivo EmployeeReportTemplate.
5. Según el sistema operativo y la versión de MS Office en su PC, el archivo se guardará en una carpeta específica, dedicada a los archivos de plantilla:
Figura 8 – Carpeta para archivos de plantilla
6. Cierre el archivo y regrese al Editor de VBA en Excel.
7. Agregue la siguiente línea de texto en la ventana de código para abrir un archivo específico, y no solo un documento en blanco:
Sub CreateWordDoc() Dim wdApp As Word.Application Set wdApp = New Word.Application With wdApp .Visible = True .Activate .Documents.Add "C:\Users\User\Documents\Custom _ Office Templates\EmployeeReportTemplate.dotx"
8. Debido a que estamos utilizando una plantilla, no necesitamos el formato que hicimos para el documento anterior. Elimine las siguientes líneas de código:
With .Selection .ParagraphFormat.Alignment = _ wdAlignParagraphCenter .BoldRun 'Switch Bold on .Font.Size = 16 .TypeText "Employee Information" .BoldRun 'Switch Bold off .TypeParagraph 'Enter a new line .Font.Size = 11 .ParagraphFormat.Alignment = _ wdAlignParagraphLeft .TypeParagraph End With
9. Utilice el método GoTo para indicar a Word exactamente dónde deben insertarse los datos copiados de Excel. Por eso creamos un marcador en la plantilla de Word. La codificación final para todo el procedimiento debería verse así:
Sub CreateWordDoc() Dim wdApp As Word.Application Dim SaveAsName As String Set wdApp = New Word.Application With wdApp '.Visible = True ' .Activate .Documents. Add "C:\Users\User\Documents\Custom _ Office Templates\EmployeeReportTemplate.dotx" Range("A1", Range("A2"). End (xlDown) _ . End (xlToRight)). Copy .Selection.Goto wdGoToBookmark, , , "ExcelTable" .Selection.Paste SaveAsName = Environ("UserProfile") _ & "\Desktop\EmployeeReport " _ & Format(Now, "yyyy-mm-dd hh-mm-ss") & ".docx" .ActiveDocument.SaveAs2 SaveAsName .ActiveDocument. Close .Quit End With End Sub
Estas instrucciones le permitirán crear una plantilla en Word y luego colocar automáticamente el contenido de Excel en el documento de Word en marcadores específicos.
La inserción de datos de Excel en una plantilla de Word se puede hacer con Excel VBA. Insertar un marcador en la plantilla de Word permite que Excel envíe datos a un punto de inserción específico para que se peguen los datos.
Ver también
Visite https://docs.microsoft.com/en-us/office/vba/api/word.selection.goto para obtener más información sobre el método GoTo.
Puede obtener un 25 % de descuento en http://packt.live/3u1fPtG . Utilice el código de descuento 25VBA (Promoción válida del 10 de febrero al 15 de marzo).