Cómo automatizar Word desde Excel usando VBA
Esta publicación es la segunda de una serie sobre cómo controlar otras aplicaciones desde Excel usando VBA . En la primera parte, analizamos los conceptos básicos sobre cómo hacer referencia a otras aplicaciones mediante el enlace temprano o el enlace tardío. En esta publicación, veremos cómo podemos automatizar Word desde Excel aunque no conozcamos ningún código VBA para Word… todavía. El proceso que usaremos para esto es el siguiente:
- Habilite el menú del desarrollador de Word
- Grabar una macro de Word
- Agregue el código a Excel VBA y modifíquelo
- Grabar macros en Excel si es necesario
- Repita los pasos anteriores hasta que se complete la macro.
No soy un experto en Excel VBA (soy más bien un experto en Excel VBA), y ciertamente no soy un experto en Word VBA. Es posible que el proceso que estoy a punto de mostrarles no cree el código más eficiente, pero sé que este proceso funciona porque lo he usado yo mismo para automatizar muchas tareas usando Microsoft Word.
Si ha habilitado el menú Desarrollador de Excel, es el mismo proceso en Word.
En Word: Archivo – Opciones – Personalizar cinta
Luego marque la opción Cinta de desarrollador, Aceptar.
Grabar una macro de Word
La clave del éxito de este método es tomar pequeñas secciones de código y construir una macro compleja poco a poco. El uso de la Grabadora de macros de Word es similar a la Grabadora de macros de Excel.
Haga clic en: Desarrollador – Grabar macro
Para el ejemplo de esta publicación, crearemos una macro que abrirá un nuevo documento de Word, luego copiaremos un gráfico de Excel y lo pegaremos en ese documento de Word. Abordaremos esto paso a paso. En primer lugar, creemos la macro. para abrir un nuevo documento de Word.
Haga clic en – Desarrollador – Grabar macro. Se abrirá la ventana Grabar macro.
Tome nota de la opción "Almacenar macro en", ya que necesitaremos saber dónde encontrar el código grabado más adelante. Normal.dotm está bien por ahora. Haga clic en Aceptar: la Grabadora de macros ahora se está ejecutando.
Abrir un nuevo documento de Word – Archivo – Nuevo – Documento en blanco
Detener la grabación de la macro – Desarrollador – Detener grabación
Ahora podemos ver el código para abrir un nuevo documento de Word en el Editor de Visual Basic. Haga clic en: Desarrollador – Visual Basic.
Busque la ubicación de su código grabado en el Editor de Visual Basic. En este ejemplo: Normal – Módulos – Nuevas Macros.
Su código debería verse como el siguiente. Puede ser ligeramente diferente, pero no significativamente.
Sub Macro1()'' Macro1 Macro'' Documentos.Agregar plantilla:="Normal", NewTemplate:=False, DocumentType:=0 Windows("Documento1").Activar Windows("Documento2").ActivarEnd Sub
Agregue el código a Excel VBA y modifíquelo
Regresemos al Editor VBA de Excel y usemos el método de enlace anticipado para controlar Microsoft Word. En el Editor de Visual Basic, haga clic en Herramientas - Referencias, seleccione Biblioteca de objetos x.xx de Microsoft Word. Luego haga clic en Aceptar.
Como utilizamos el enlace anticipado, debemos declarar la aplicación como una variable de la siguiente manera:
Atenuar WordApp como Word.ApplicationEstablecer WordApp = Nueva Word.Application
Ahora copie y pegue el código del Editor VBA de Word en el Editor VBA de Excel.
El código de Word VBA comenzó con Documents.Add, todo lo que tenemos que hacer es agregar nuestra variable de aplicación al frente de esa línea de código. Ahora se convierte en WordApp.Documents.Add. . .
A menudo, seleccionar y activar objetos no es necesario en el código VBA, por lo que no he copiado esas declaraciones en el código siguiente.
Sub CreateWordDocument()'Conectar mediante enlace anticipado.'Recuerde establecer la referencia a la Biblioteca de objetos de Word'En Herramientas del editor VBE - Referencias - Biblioteca de objetos Microsoft Word x.xxDim WordApp As Word.ApplicationSet WordApp = New Word.ApplicationWordApp.Documents. Add Template:="Normal", NewTemplate:=False, DocumentType:=0WordApp.Visible = True 'Las nuevas aplicaciones estarán ocultas de forma predeterminada, así que hazlas visiblesSet WordApp = Nothing 'libera la memoriaEnd Sub
Un punto a tener en cuenta es que cuando se abre una aplicación con VBA, normalmente se abre en segundo plano. Para que el documento de Word sea visible, agregué el siguiente código:
WordApp.Visible = Verdadero
Grabar macros en Excel (si es necesario)
Si queremos copiar contenido de Excel en un documento de Word, necesitaremos copiar ese contenido usando Excel VBA. Podemos usar la Grabadora de macros en Excel para obtener el código VBA para copiar, luego podemos usar la Grabadora de macros de Word para obtener el Código VBA para pegar.
Grabación de macros desde Excel: seleccionar una hoja de trabajo y copiar el gráfico
Hojas("Hoja1").SelectActiveSheet.ChartObjects("Gráfico 1").ActivateActiveChart.ChartArea.Copy
Grabación de macros desde Word: pegar un gráfico en un documento
Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _ Ubicación:=wdInLine, DisplayAsIcon:=False
Podemos agregar ambas grabaciones de Macro a nuestra macro de Excel. Recuerde agregar WordApp. al comienzo de cada declaración del código Word VBA.
Sub CreateWordDocument()'Conectar mediante enlace anticipado.'Recuerde establecer la referencia a la Biblioteca de objetos de Word'En Herramientas del editor VBE - Referencias - Biblioteca de objetos Microsoft Word x.xxDim WordApp As Word.ApplicationSet WordApp = New Word.ApplicationWordApp.Documents. Add Template:="Normal", NewTemplate:=False, DocumentType:=0WordApp.Visible = True 'Las nuevas aplicaciones se ocultarán de forma predeterminada, así que haga visible' el código copiado de Excel Macro recorderSheets("Sheet1").SelectSelection.ChartObjects( "Gráfico 1").ChartArea.Copy'código copiado de la grabadora de macros de Word con WordApp. agregado al frente.WordApp.Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, _ Placement:=wdInLine, DisplayAsIcon:=FalseSet WordApp = Nothing 'libera la memoria End Sub
Este código no es particularmente eficiente; contiene algunas secciones de código innecesarias. Sin embargo… ¡funciona!
Repita los pasos anteriores hasta que se complete la macro.
Repitiendo los mismos pasos anteriores; Al grabar acciones breves y luego transferir el código a Excel, podemos crear lentamente macros mucho más complejas. La clave es mantener las acciones breves; si realiza demasiadas acciones con Macro Recorder, el código comienza a parecer largo y aterrador.
Si ha intentado utilizar Macro Recorder antes, sabrá que esto no es tan fácil como parece. Y este sencillo tutorial puede hacerle pensar que es fácil, cuando no lo es. A veces, puede resultar bastante frustrante intentarlo. descubra dónde están los problemas y errores. La clave del éxito es registrar acciones muy breves, como las siguientes, y copiarlas en el Editor de Visual Basic.
'Presionando la tecla Enter para pasar a una nueva línea en WordWordApp.Selection.TypeParagraph'Activar/desactivar texto en negritaWordApp.Selection.Font.Bold = wdToggle'Cambiar tamaño de fuenteWordApp.Selection.Font.Size = 16'Escriba algo de textoWordApp.Selection .TypeText Text:="Aquí hay algo de texto"
Pronto creará una biblioteca de código estándar que podrá utilizar para controlar Word en la mayoría de las tareas básicas.
En el código VBA grabado de Word, la palabra "Selección" en el código a menudo se refiere al documento en sí. Es posible hacer que el código sea un poco más eficiente declarando el documento como una variable. Si estuviéramos abriendo un documento específico, Podríamos incluir esto al principio, justo debajo de la declaración de la aplicación.
'Declarar un documento específico como una variableDim WordDocument As ObjectSet WordDocument = WordApp.Documents.Open(sourceFileName)
O, si creamos un nuevo documento, podríamos incluir lo siguiente debajo de la declaración de la variable de la aplicación.
'Delcare un nuevo documento como variableDim WordDocument As ObjectSet WordDocument = WordApp.Documents.Add Template:="Normal", _NewTemplate:=False, DocumentType:=0
Si hemos creado el documento como una variable, podemos hacer referencia al documento específico. Este código:
WordApp.Selección.TipoPárrafo
Se convertiría en este código:
WordDocument.TypePárrafo
O este código:
WordApp.Selection.TypeText Text:="Aquí hay algo de texto"
Se convertiría en este código:
WordDocument.TypeText Text:="Aquí hay algo de texto"
Este método es mucho mejor, ya que no depende de que la selección del usuario esté en el lugar correcto.
Conclusión
Hemos visto en este post que es posible crear Macros complejas para automatizar Word desde Excel usando VBA. Al comprender cómo declarar variables para la aplicación y los documentos, podemos crear macros mucho más sólidas, incluso sin saber mucho código VBA.
Artículos Relacionados:
- 5 formas rápidas de incrustar un documento de Word en Excel
- Controlar PowerPoint desde Excel usando VBA
- Editar enlaces en Word usando VBA
- Cómo vincular Excel a Word
Deja una respuesta