Quiero combinar access con word para imprimir una plantilla de un contrato, mediante un botón de comando en formulario.

Quiero combinar access con word para imprimir contratos de alquiler, tengo la plantilla en word, conseguí este código, pero al correrlo me indica error de sintaxis en la sección que esta en negritas y cursiva (la verdad es que ya no comprendo que hay que hacer para corregirlo), ¿por favor alguien que me pueda ayudar?

Private Sub cmdIMPRIMIRCTO_Click()
Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim MyAppID, ReturnValue
Set AppWord = New Word.Application
AppWord.Visible = True
Set DocWord = AppWord.Documents.Open("D:\Roma\Base de datos Yucatan 83\Nva plantilla CPSHY83.docx")
AppWord.Visible = True
DocWord.MailMerge.OpenDataSource Name:="C:\Users\Roberto\Desktop\Roma\Base de datos Yucatan 83.accbd", _
        ConfirmConversions:=False, _
        ReadOnly:=False, _
        LinkToSource:=True, _
        AddToRecentFiles:=False, _
        PasswordDocument:="", _
        PasswordTemplate:="", _
        WritePasswordDocument:="", _
        WritePasswordTemplate:="", _
        Revert:=False, _
        Format:=wdOpenFormatAuto, _
        Connection:="Contrato Vigencia y Condiciones Consulta", _
        SQLStatement:= _
        "SELECT * FROM [Contrato Vigencia y Condiciones Consulta]", _
        SQLStatement1:=""
    With DocWord.MailMerge.Destination = wdSendToNewDocument.MailAsAttachment =False.MailAddressFieldName = "".MailSubject = "".SuppressBlankLines = True
        With .DataSource.FirstRecord = wdDefaultFirstRecord.LastRecord = wdDefaultLastRecord
        End With
    .Execute Pause:=True
    End With
End Sub

Respuesta
2

El problema en su código VBA es que está utilizando una sintaxis incorrecta y también hay errores en la lógica de cómo está configurando la combinación de correspondencia en Word.

Private Sub cmdIMPRIMIRCTO_Click()
Dim AppWord As Object
Dim DocWord As Object
Dim MyAppID As Object
' Inicializar la aplicación de Word
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
' Abrir la plantilla de Word
Set DocWord = AppWord.Documents.Open("D:\Roma\Base de datos Yucatan 83\Nva plantilla CPSHY83.docx")
' Configurar la combinación de correspondencia
With DocWord.MailMerge
.MainDocumentType = 0 ' wdFormLetters (0)
.OpenDataSource Name:="C:\Users\Roberto\Desktop\Roma\Base de datos Yucatan 83.accdb", _
ConfirmConversions:=False, _
ReadOnly:=False, _
LinkToSource:=True, _
AddToRecentFiles:=False, _
PasswordDocument:="", _
PasswordTemplate:="", _
WritePasswordDocument:="", _
WritePasswordTemplate:="", _
Revert:=False, _
Format:=0, ' wdOpenFormatAuto (0)
Connection:="Contrato Vigencia y Condiciones Consulta", _
SQLStatement:="SELECT * FROM [Contrato Vigencia y Condiciones Consulta]"
' Realizar la combinación de correspondencia
.Destination = 0 ' wdSendToNewDocument (0)
.SuppressBlankLines = True
.Execute Pause:=False
End With
' Limpiar objetos
Set DocWord = Nothing
Set AppWord = Nothing
End Sub

Correcciones:

Instanciar Word y abrir documento: Usamos CreateObject para instanciar la aplicación de Word y la visibilidad se establece a True inmediatamente después de crear la instancia.

Abrir la plantilla de Word: El método Documents. Open se usa para abrir la plantilla especificada.

Configurar la combinación de correspondencia: Se usa MailMerge de la forma correcta con la configuración adecuada. WdSendToNewDocument y wdOpenFormatAuto son constantes de Word que representan 0.

Ejecutar la combinación de correspondencia: Se establece Destination a 0 para enviar el resultado a un nuevo documento, y se usa Pause:=False en lugar de Pause:=True para ejecutar la combinación sin pausa.

Limpiar objetos: Finalmente, liberamos los objetos de Word para evitar problemas de memoria

Muchas gracias Eduardo,

Ingrese nuevamente el código con las correcciones realizadas, solo que ahor a presenta el siguiente problema una sección la presenta en rojo que es la siguiente y me indica error de sintaxis.

ConfirmConversions:= False,
ReadOnly:=False, _
LinkToSource:=True, _
AddToRecentFiles:=False, _
PasswordDocument:="", _
PasswordTemplate:="", _
WritePasswordDocument:="", _
WritePasswordTemplate:="", _
Revert:=False, _
Format:=0, ' wdOpenFormatAuto (0)
Connection:="D:\Roma\Base de datos Yucatan 83\Base de datos Yucatan 83.accdb", _
SQLStatement:="SELECT * FROM [Contrato Vigencia y Condiciones Consulta]"

En lo que se refiere a Connection ahí no se exactamente a que conexión se refiere si es a donde se encuentra la base de datos o a la tabla donde se extraerá la información?

Agradezco mucho tu apoyo.

Explicación de Connection

En este contexto, el parámetro Connection especifica el nombre de la consulta o tabla dentro de la base de datos de Access que se está utilizando como fuente de datos para la combinación de correspondencia.

Connection:="Contrato Vigencia y Condiciones Consulta": Aquí, Contrato Vigencia y Condiciones Consulta es el nombre de una consulta (o tabla) en la base de datos de Access que contiene los datos que se desean utilizar en la combinación de correspondencia.

Parámetros Relacionados

Name: La ruta al archivo de base de datos de Access.
SQLStatement: Una instrucción SQL que se utiliza para seleccionar los datos. En su caso, está seleccionando todos los registros de la consulta mencionada.

Ejemplo de Cómo Funciona

Base de Datos: Tiene una base de datos de Access en D:\Users\Roberto\Desktop\Roma\Base de datos Yucatan 83.accdb.

Consulta o Tabla: Dentro de esta base de datos, tienes una consulta o tabla llamada Contrato Vigencia y Condiciones Consulta.

Configuración en Word: Configura la combinación de correspondencia para usar esa consulta o tabla específica como la fuente de datos.

SQL Statement: La instrucción SQL SELECT * FROM [Contrato Vigencia y Condiciones Consulta] indica que quiere seleccionar todos los registros de esa consulta o tabla.

La variable Connection en su código se utiliza para especificar qué consulta o tabla de la base de datos de Access se debe usar como fuente de datos para la combinación de correspondencia en Word. Esto permite a Word acceder a los datos necesarios para completar los campos en el documento de plantilla durante el proceso de combinación.

Verifique la ruta de su base de datos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas