¡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.

Índice de Contenido
  1. Creando el formulario de Word
  2. Identificando los datos de Access
    1. Listado A
  3. Cómo funciona
  4. Rellenando múltiples formularios de Word
    1. Listado B
  5. Acceso rápido a los formularios de Word

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:

ColumnasFilas
22
22
12
42
22

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 Excel

El 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:

  1. Muestra la barra de herramientas Formularios, seleccionando Barras de herramientas en el menú Ver y luego selecciona Formularios.
  2. En el documento, haz clic en la celda de la tabla debajo del encabezado de Número de Cliente.
  3. Haz clic en el botón Campo de texto de formulario en la barra de herramientas Formularios.
  4. Haz doble clic en el campo para mostrar el cuadro de diálogo Opciones del campo de texto de formulario.
  5. 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 WordNombre del campoCampo correspondiente en la tabla de Access
Número de ClientefldCustomerIDCustomerID
ClientefldCompanyNameCompanyName
ContactofldContactNameContactName
TítulofldContactTitleContactTitle
DirecciónfldAddressAddress
CiudadfldCityCity
RegiónfldRegionRegion
Código postalfldPostalCodePostalCode
PaísfldCountryCountry
TeléfonofldPhonePhone
FaxfldFaxFax

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 Word

Listado 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 manualmente

On 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 Word

Set 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 efectivas

Set doc = Nothing

Set appWord = Nothing

Exit Sub

errHandler:

MsgBox Err.Number & ": " & Err.Description

10 trucos para recuperar archivos Excel corruptos
End 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()

Conoce KnowledgeSync: Una herramienta para la gestión automatizada de datos en tu negocio

'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 Excel

On 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

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.