Imprimir con Word un registro de Access sin abrir Word
Publicado por
Julio (1 intervención) el 16/01/2012 18:46:25
En un Módulo crea el procedimiento:
'*******************************************************************************
'* EscribeCadenaEnMarcadorWord
'* escribe el texto pasado como parámetro en el marcador indicado del documento
'* Word abierto en la instancia Word correspondiente
'* Argumentos: strMarcador => marcador en que se insertará la tabla
'* strCadena => texto a escribir
'* uso: EscribeCadenaEnMarcadorWord
'* ESH 31/08/07 20:15
'*******************************************************************************
Function EscribeCadenaEnMarcadorWord(strMarcador As String, strCadena As String) As Boolean
On Error GoTo EscribeCadenaEnMarcadorWord_TratamientoErrores
WordApp.ActiveDocument.Bookmarks(strMarcador).Select
WordApp.Selection.TypeText strCadena
' confirmo que el proceso finalizó correctamente
EscribeCadenaEnMarcadorWord = True
EscribeCadenaEnMarcadorWord_Salir:
On Error GoTo 0
Exit Function
EscribeCadenaEnMarcadorWord_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: EscribeCadenaEnMarcadorWord de Documento VBA: Form_frmPruebas (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume EscribeCadenaEnMarcadorWord_Salir
Resume Next
End Function ' EscribeCadenaEnMarcadorWord
y en el formulario crea el objeto, la llamada y etc.
Private Sub cmdescrito_Click()
Dim strContrato As String, _
rst As DAO.Recordset, _
strSQL As String
On Error GoTo cmdescrito_Click_TratamientoErrores
DoCmd.Hourglass True
' selecciono la "plantilla"
strPlantilla = CurrentProject.Path & "\Plantillas\<nombreplantilla.doc"
' abro un recordset con los datos del contrato en cuestión
strSQL = "SELECT * from <nombretabla where Id = " & Me!Id & ""
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
' si tiene datos, abro la "plantilla" de contrato e inserto los datos en sus distintos marcadores
If Not (rst.EOF And rst.BOF) Then
strContrato = CurrentProject.Path & "\Expedientes\" & Me!expediente & "\<nombredocumento>" & rst!expediente & ".doc"
txtFile = strContrato
Set WordApp = CreateObject("Word.Application")
WordApp.Documents.Open strPlantilla
EscribeCadenaEnMarcadorWord "nombremarcador", rst!<dato1>
' Escribe una linea por cada dato que aparece en el documento de Word.
' guardo el documento
WordApp.ActiveDocument.SaveAs strContrato
' ' imprimo el contrato
' WordApp.ActiveDocument.PrintOut , Copies:=3
End If
cmdescrito_Click_Salir:
' cierro todo
CierraRecordsetDAO rst
WordApp.ActiveDocument.Saved = True
FollowHyperlink strContrato
'WordApp.Quit
Set WordApp = Nothing
Close
On Error GoTo 0
DoCmd.Hourglass False
Close
Exit Sub
cmdescrito_Click_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: cmdescrito_Click de Documento VBA: Form_frmContratos (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume cmdescrito_Click_Salir
End Sub
En la plantilla del documento (que es un documento Word , no plantilla) tienes que introducir los marcadores con su nombre (Insertar - Marcadores)
y ya está. Espero que te sirva de algo