Cómo insertar una tabla de Excel en Word con VBA
Oficina De Microsoft Microsoft Word Microsoft Microsoft Excel Héroe Palabra / / April 29, 2020
Ultima actualización en
VBA es una herramienta muy poderosa que puede usar para automatizar mucho trabajo entre múltiples aplicaciones de Microsoft Office. Una actividad común que puede automatizar usando VBA es insertar una tabla de Excel en un documento de Word.
Visual Basic para Aplicaciones (VBA) es una herramienta muy poderosa que puede usar para automatizar mucho trabajo entre múltiples aplicaciones de Microsoft Office. Una actividad común que puede automatizar usando VBA es insertar una tabla de Excel en un documento de Word.
hay dos maneras de hacer esto. El primero es automatizar una copia directa y pegar un rango existente desde Excel en una nueva tabla en un documento de Word. El segundo es realizar cálculos en Excel, crear una nueva tabla en Word y escribir los resultados en la tabla.
Podrías intentar grabar una macro para hacer esto, pero las macros solo le permitirán automatizar tareas dentro de Word. En este artículo, aprenderá a escribir código VBA para automatizar estas acciones entre Excel y Word.
Copie y pegue un rango de Excel en Word con VBA
En ambos ejemplos, comenzaremos con una hoja de cálculo Excel de muestra. Esta muestra es una lista de órdenes de compra para una variedad de productos.
Supongamos que desea copiar y pegar todo el rango de celdas en esta hoja de trabajo en un documento de Word. Para hacer esto, deberá escribir una función VBA que se ejecutará cuando haga clic en el botón "Copiar a Word".
Seleccione Desarrollador desde el menú y seleccione Insertar del grupo Controles en la cinta. En la lista desplegable, seleccione el control de botón en Controles ActiveX.
Luego, dibuje el botón de comando en el lado derecho de la hoja. Puede cambiar el título a "Copiar a Word" haciendo clic derecho en el botón y seleccionando Propiedades. Cambie el texto del título y puede usar Fuente para actualizar el tamaño y el estilo de la fuente.
Nota: Si no ves Desarrollador en su menú de Excel, luego agréguelo. Seleccione Expediente, Opciones, Personalizar la cintay seleccione Todos los comandos desde el menú desplegable de la izquierda. Entonces muévete Desarrollador desde el panel izquierdo a la derecha y seleccione Aceptar para finalizar.
Escriba el código VBA Copiar y pegar
Ahora está listo para comenzar a escribir código VBA. Para comenzar, haga doble clic en el nuevo Copiar a Word botón para abrir la ventana del editor de código.
Debería ver una subrutina llamada Commandbutton1_Click () como se muestra a continuación.
Deberá copiar cada sección de código a continuación. Antes de comenzar a codificar, para controlar Word en su computadora usando VBA, deberá habilitar la biblioteca de referencia de Microsoft Word.
En el editor de código, seleccione Herramientas desde el menú y seleccione Referencias. En la lista de referencias disponibles, desplácese hacia abajo y habilite Biblioteca de objetos de Microsoft Word 16.0.
Seleccione Aceptar y estará listo para comenzar a codificar. Revisaremos cada sección de código a la vez para que comprenda qué hace ese código y por qué.
Primero, debe crear las variables y los objetos que contendrán el rango y le permitirán controlar la aplicación de Word.
Dim tblRange As Excel. Rango
Dim WordApp como Word. Solicitud
Dim WordDoc como Word. Documento
Dim WordTable As Word. Mesa
La siguiente línea de código selecciona un rango específico de celdas y lo guarda en un objeto Rango de Excel en VBA.
Establezca tblRange = ThisWorkbook. Hojas de trabajo ("Hoja1"). Rango ("A2: G44")
A continuación, desea verificar si la aplicación de Word ya está abierta en la computadora. Puede hacer referencia a la aplicación de Word utilizando una referencia especial de "clase" con el comando VBA GetObject para lograr esto. Si Word aún no está abierto, la siguiente línea lo iniciará utilizando la función CreateObject. La línea "On Error Resume Next" evita que cualquier error de la primera función GetObject (si Word aún no está abierto) detenga la ejecución de la siguiente línea en el programa.
En Error Reanudar Siguiente
Establecer WordApp = GetObject (class: = "Word. Solicitud")
Si WordApp no es nada, configure WordApp = CreateObject (class: = "Word. Solicitud")
Ahora que se inicia la aplicación de Word, desea que sea visible para el usuario y activarla para su uso.
WordApp Visible = Verdadero
WordApp Activar
A continuación, desea crear un nuevo documento dentro de la aplicación de Word.
Establecer WordDoc = WordApp. Documentos. Añadir
Finalmente, copiará y pegará el rango de celdas en una nueva tabla en el documento de Word.
tblRange. Copiar
WordDoc. Párrafos (1) Rango. PasteExcelTable _
LinkedToExcel: = False, _
WordFormatting: = False, _
RTF: = falso
Los modificadores en la función anterior insertarán una tabla no vinculada utilizando el formato de origen de Excel (no el formato de Word) y no utilizando el formato de texto enriquecido.
Finalmente, para tratar con rangos de Excel que son más amplios que el documento, deberá ajustar automáticamente la nueva tabla para que se ajuste a los márgenes de su nuevo documento de Word.
Establecer WordTable = WordDoc. Mesas (1)
WordTable AutoFitBehavior (wdAutoFitWindow)
¡Y ahora has terminado! Guarde el archivo como un archivo Excel habilitado para macros (extensión .xlsm). ¡Cierre el editor, guarde el archivo original de Excel nuevamente y luego haga clic en el botón de comando para ver su código en acción!
Escribir resultados de Excel en una tabla de Word con VBA
En la siguiente sección, escribirá código VBA que realiza cálculos sobre valores en Excel y los escribe en una mesa en Word.
Para este ejemplo, extraeremos 10 filas de datos, calcularemos y escribiremos los resultados en una tabla en un documento de Word. Además, la tabla original contendrá cuatro columnas, y el código VBA extraerá las primeras diez filas de datos de ese rango.
Al igual que en la última sección, revisaremos cada sección a la vez para que comprenda qué hace ese código y por qué.
Primero, cree las variables y los objetos que contendrán los datos y le permitirán escribir en la aplicación de Word.
Dim tblRange As Excel. Rango
Dim WrdRange As Word. Rango
Dim WordApp como Word. Solicitud
Dim WordDoc como Word. Documento
Dim WordTable As Word. Mesa
Dim intRows
Dim intColumns
Dim strDate As String
Dim strtem como cadena
Dim IntUnits como variante
Dim intCost como variante
Dim intTotal As Variant
A continuación, configure el total de columnas y filas que desea leer del rango de Excel.
intNoOfRows = 10
intNoOfColumns = 5
Repita el mismo código que la última sección que abrirá Word si aún no está abierto.
En Error Reanudar Siguiente
Establecer WordApp = GetObject (class: = "Word. Solicitud")
Si WordApp no es nada, configure WordApp = CreateObject (class: = "Word. Solicitud")
WordApp Visible = Verdadero
WordApp Activar
Establecer WordDoc = WordApp. Documentos. Añadir
Las siguientes cuatro líneas crean una tabla dentro de ese documento de Word recién abierto.
Establecer WrdRange = WordDoc. Rango (0, 0)
WordDoc. Mesas. Agregue WrdRange, intNoOfRows, intNoOfColumns
Establecer WordTable = WordDoc. Mesas (1)
WordTable Fronteras Habilitar = Verdadero
Finalmente, el siguiente ciclo realizará estas acciones:
- Para cada fila, coloque la fecha del pedido, el artículo, las unidades y el costo en variables
- Calcule el costo por unidad (venta total) y almacénelo en una variable
- Para cada columna, escriba los valores en la tabla de Word, incluida la venta total calculada en la última celda
- Pase a la siguiente fila y repita el procedimiento anterior
Así es como se ve ese código:
Para i = 1 a intNoOfRows
Para j = 1 a intNoOfColumns
Si j = 1 entonces
strDate = tblRange. Celdas (i + 1, j) Valor
strItem = tblRange. Celdas (i + 1, j + 1) .Valor
intUnits = Val (tblRange. Celdas (i + 1, j + 2) .Valor)
intCost = Val (tblRange. Celdas (i + 1, j + 3) .Valor)
intTotal = intUnits * intCost
Terminara si
Seleccionar caso j
El caso es = 1
WordTable Celda (i, j) Rango. Text = strDate
El caso es = 2
WordTable Celda (i, j) Rango. Text = strItem
El caso es = 3
WordTable Celda (i, j) Rango. Text = intUnits
El caso es = 4
WordTable Celda (i, j) Rango. Text = intCost
El caso es = 5
WordTable Celda (i, j) Rango. Text = intTotal
Caso diferente
Seleccionar final
próximo
próximo
La función "Celdas" en la primera parte tira del valores de celda fuera de Excel. Celdas (x, y) significa que extrae el valor de la celda en la fila xy en la columna y.
La función "Celda" en la última parte escribe en las celdas de la tabla de Word, utilizando las mismas asignaciones de fila y columna.
Una vez que guarde y ejecute este código VBA, verá los resultados en su documento de Word recién creado.
Como puede ver, no es demasiado complicado crear una automatización útil entre Excel y Word. Es solo una cuestión de entender cómo funcionan los diversos "objetos" que pueden crear y controlar las aplicaciones de Excel y Word en su computadora.