¡Descubre el secreto! Rellena campos de formulario de Word con datos de Access
Las herramientas de informes de Access ofrecen flexibilidad y una herramienta fácil de usar para compartir datos, pero a veces, no es la herramienta adecuada. Por ejemplo, es posible que no puedas reproducir exactamente un formulario de papel existente en Access, como sí puedes hacerlo en Word. Ahora, puede que a ti no te importe cómo se vea el informe (formulario en papel), pero tal vez a la gerencia sí le importe. Cuando esto sucede, es posible que necesites transferir datos de Access a formularios de Word. La buena noticia es que Word y Access se complementan muy bien.
La solución automatizada requiere tres elementos:
- Un método para identificar los datos de Access que deseas transferir.
- Un poco de código VBA para automatizar el proceso.
- Un documento de Word que represente el formulario que necesitas completar.
Trabajaremos con datos existentes en la base de datos Northwind (la base de datos de muestra que viene con Access). Específicamente, el ejemplo transferirá datos de la tabla Customers, a través de un formulario, al documento de Word que se muestra en Figura A.
Figura A: Las áreas resaltadas son campos de texto.
Creando el formulario de Word
El formulario de Word no es tan difícil de crear como parece. El formulario de ejemplo consiste en cinco tablas simples que contienen campos de formulario. En este contexto, un formulario es un documento que contiene espacios en blanco para completar o campos de formulario donde se ingresa información. Un campo es una celda predefinida para ingresar y almacenar información.
El formulario de la Figura A utiliza cinco tablas de dos filas cada una para simular un formulario. No necesitas las tablas, pero ayudan a organizar y gestionar los datos. Para insertar una tabla, selecciona Insertar en el menú Tabla y luego elige Tabla. En el cuadro de diálogo Insertar tabla resultante, ingresa el número apropiado de columnas y filas (ver Figura B). Para crear este formulario, necesitarás cinco tablas de la siguiente manera:
Columnas | Filas |
2 | 2 |
2 | 2 |
1 | 2 |
4 | 2 |
2 | 2 |
Figura B: Identificar el número de filas y columnas en cada tabla.
El formulario de ejemplo también utiliza sombreado y texto en la primera fila para distinguir entre los encabezados y la información real. Puedes omitir el formato si lo deseas; no es esencial para la técnica. Si lo prefieres, puedes ajustar el ancho de cada columna de celda utilizando la Figura A como guía.
Cómo ver datos de una hoja en otra en ExcelEl documento de Word de ejemplo contiene un campo coincidente para cada columna de la tabla Customers en Northwind. No es necesario que acomodes cada campo; simplemente transfiere los datos que necesitas. Sin embargo, debes asociar un campo de Word con cada campo subyacente de Access que deseas copiar en el formulario de Word. Para agregar el primer campo, sigue los siguientes pasos en el formulario de Word:
- Muestra la barra de herramientas Formularios, seleccionando Barras de herramientas en el menú Ver y luego selecciona Formularios.
- En el documento, haz clic en la celda de la tabla debajo del encabezado de Número de Cliente.
- Haz clic en el botón Campo de texto de formulario en la barra de herramientas Formularios.
- Haz doble clic en el campo para mostrar el cuadro de diálogo Opciones del campo de texto de formulario.
- Cambia el nombre del campo a fldCustomerID y haz clic en Aceptar.
Repite los pasos del 2 al 5 para agregar un campo de texto para cada encabezado, utilizando la siguiente lista para nombrar cada campo:
Encabezado del campo en Word | Nombre del campo | Campo correspondiente en la tabla de Access |
Número de Cliente | fldCustomerID | CustomerID |
Cliente | fldCompanyName | CompanyName |
Contacto | fldContactName | ContactName |
Título | fldContactTitle | ContactTitle |
Dirección | fldAddress | Address |
Ciudad | fldCity | City |
Región | fldRegion | Region |
Código postal | fldPostalCode | PostalCode |
País | fldCountry | Country |
Teléfono | fldPhone | Phone |
Fax | fldFax | Fax |
El encabezado del campo no tiene que coincidir con los nombres de los campos. Sin embargo, ten en cuenta que los nombres de los campos de Word coinciden con los nombres de los campos de Access, con un prefijo de fld adicional. No es necesario que los campos de Word tengan nombres similares a sus campos correspondientes de Access, pero hacerlo es autodocumentado y simplifica el trabajo.
Después de agregar todos los campos, haz clic en el botón Proteger formulario. Esto desactiva varias funciones, lo que evitará que los usuarios casuales modifiquen tu formulario. Luego, guarda el formulario como CustomerSlip.doc y ciérralo.
Identificando los datos de Access
El método más común que probablemente utilizarás para identificar un registro específico es un formulario de Access. Para simplificar el ejemplo, usa el formulario Customers existente en Northwind. Si prefieres no alterar el objeto real, utiliza una copia o utiliza el asistente de AutoForm para generar un formulario rápido basado en la tabla Customers. Una vez que tengas un formulario vinculado a la tabla Customers, agrega un botón de comando al formulario y nómbralo cmdPrint, como se muestra en Figura C.
Figura C: El botón de comando Imprimir formulario de cliente ejecuta el código VBA que transferirá los datos de Access al formulario de Word.
Con el formulario en modo de diseño, haz clic en el botón Código para abrir el módulo del formulario. Agrega el código en Listado A al módulo. El evento Print del botón cmdPrint copia todos los datos del cliente actual en el formulario de Customers al documento de Word (CustomerSlip.doc).
Cómo desactivar las funciones automáticas molestas de Microsoft WordListado A
Private Sub cmdPrint_Click()
'Imprimir formulario de cliente
Dim appWord As Word.Application
Dim doc As Word.Document
'Evitar error 429, cuando Word no está abierto.
Cómo copiar fórmulas en Excel sin seleccionar celdas manualmenteOn Error Resume Next
Err.Clear
'Establecer la variable de objeto appWord con la instancia en ejecución de Word.
Set appWord = GetObject(, "Word.Application")
If Err.Number <> 0 Then
'Si Word no está abierto, crea una nueva instancia de Word.
Cómo personalizar la numeración de una lista en WordSet appWord = New Word.Application
End If
Set doc = appWord.Documents.Open("C:\WordForms\CustomerSlip.doc", , True)
With doc
.FormFields("fldCustomerID").Result = Me!CustomerID
.FormFields("fldCompanyName").Result = Me!CompanyName
Bing: Mucho más que un motor de búsqueda.FormFields("fldContactName").Result = Me!ContactName
.FormFields("fldContactTitle").Result = Me!ContactTitle
.FormFields("fldAddress").Result = Me!Address
.FormFields("fldCity").Result = Me!City
.FormFields("fldRegion").Result = Me!Region
.FormFields("fldPostalCode").Result = Me!PostalCode
Cómo reorganizar las hojas de Excel en el orden deseado.FormFields("fldCountry").Result = Me!Country
.FormFields("fldPhone").Result = Me!Phone
.FormFields("fldFax").Result = Me!Fax
.Visible = True
.Activate
End With
Cómo recuperar un documento de Word corrupto: 11 técnicas efectivasSet doc = Nothing
Set appWord = Nothing
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description
10 trucos para recuperar archivos Excel corruptosEnd Sub
Cómo funciona
En primer lugar, el código crea una instancia de Word. Si Word ya está abierto, utiliza la instancia que se está ejecutando actualmente. El código actual utiliza la expresión Err.Number <> 0 porque Microsoft es conocida por cambiar los números de error de una versión a otra. Puedes ser más específico cambiando 0 a 429 (o el número de error apropiado para tu versión si es diferente).
A continuación, el método Open identifica el formulario de Word (documento). En este caso, es CustomerSlip.doc en la carpeta WordForms de la unidad C:\. El valor opcional True abre el archivo como solo lectura. Actualiza la ruta para adaptarla a tu sistema. De hecho, podrías considerar mover el nombre del archivo y la ruta a constantes en la sección de Declaraciones Generales. De esta forma, podrás actualizar el código más fácilmente si cambias el nombre del archivo o lo mueves de lugar.
El bloque With copia los datos de cada campo de Access a su campo correspondiente en Word. Después de copiar todos los datos, los métodos Visible y Activate muestran y seleccionan el formulario de Word completado, como se muestra en Figura D.
Figura D: El formulario se verá así después de que se copien y completen todos los datos.
El manejo de errores es mínimo. Asegúrate de probar exhaustivamente tu solución de producción y abordar todos los posibles errores. Los errores más comunes que encontrarás serán un archivo de Word que falta, una ruta incorrecta o nombres de campo que no coinciden.
Rellenando múltiples formularios de Word
Actualmente, el ejemplo funciona solo con un registro, el registro actual del formulario. A veces, querrás pasar varios registros. Afortunadamente, no es difícil mejorar el código existente para manejar varios registros y formularios, como se muestra en Listado B.
Listado B
Private Sub cmdPrint_Click()
'Imprimir formulario de cliente
Dim appWord As Word.Application
Dim doc As Word.Document
Dim rst As ADODB.Recordset
'Evitar error 429, cuando Word no está abierto.
Cómo mostrar datos ocultos en un gráfico de ExcelOn Error Resume Next
Err.Clear
'Establecer la variable de objeto appWord con la instancia en ejecución de Word.
Set appWord = GetObject(, "Word.Application")
If Err.Number <> 0 Then
'Si Word no está abierto, crea una nueva instancia de Word.
Set appWord = New Word.Application
End If
'Rellenar objeto recordset.
Set rst = New ADODB.Recordset
rst.Open Me.RecordSource, CurrentProject.Connection
'Recorrer registros para rellenar campos de formulario de Word.
Do While Not rst.EOF
Set doc = appWord.Documents.Open("C:\WordForms\CustomerSlip.doc", , True)
With doc
.FormFields("fldCustomerID").Result = rst!CustomerID
.FormFields("fldCompanyName").Result = rst!CompanyName
.FormFields("fldContactName").Result = rst!ContactName
.FormFields("fldContactTitle").Result = rst!ContactTitle
.FormFields("fldAddress").Result = rst!Address
.FormFields("fldCity").Result = rst!City
.FormFields("fldRegion").Result = rst!Region
.FormFields("fldPostalCode").Result = rst!PostalCode
.FormFields("fldCountry").Result = rst!Country
.FormFields("fldPhone").Result = rst!Phone
.FormFields("fldFax").Result = rst!Fax
.Visible = True
.Activate
'.PrintOut
'.SaveAs "'" & rst!CustomerID & "'"
rst.MoveNext
With
Loop
Set doc = Nothing
Set appWord = Nothing
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description
End Sub
En lugar de recuperar los datos del formulario real (usando el identificador Me), este procedimiento utiliza un objeto Recordset para pasar los datos de varios registros. Asegúrate de actualizar las declaraciones .FieldForm haciendo referencia al recordset (rst!) en lugar del formulario de Access (Me!), como lo hizo el procedimiento anterior.
Nuestro ejemplo utiliza la propiedad RecordSource del formulario para recuperar datos de la fuente de datos subyacente del formulario de Access (la tabla Customers). En consecuencia, el formulario no está sincronizado con el procedimiento, por lo que el registro actual del formulario nunca cambia. Solo estamos utilizando el recordset y el botón de impresión del formulario para mantener el ejemplo simple. Cuando apliques esta técnica a tu base de datos, puedes utilizar cualquier origen de recordset válido.
Observa que el código tiene dos declaraciones comentadas hacia el final del bloque With. Esas son acciones que posiblemente desees realizar para cada formulario de Word. El primero imprime el formulario completado; el segundo guarda el formulario en el directorio actual utilizando el valor de la clave primaria del registro actual como nombre del formulario. Puedes usar uno o ambos. Si no guardas el registro actual, Word lo descartará cuando el bucle Do While procese el siguiente registro.
La desventaja es el rendimiento. Si estás trabajando con miles de registros, este proceso tardará unos minutos en completarse.
Acceso rápido a los formularios de Word
Rellenar un formulario de Word con datos de Access puede ser útil cuando tus datos están en Access y debes utilizar las características de formato de Word para crear la visualización correcta. Afortunadamente, el proceso es sencillo, ya sea que compartas un solo registro o miles.
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Software, allí encontraras muchos artículos similares a ¡Descubre el secreto! Rellena campos de formulario de Word con datos de Access , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados