Habría que crear un nuevo módulo de clase (no un módulo normal) en
Insertar->Módulo de clase; yo le he llamado clsContratro. Luego pegas el
siguiente código:
Option Compare Database
Option Explicit
Public Nombredoc As String, Guardar As Boolean, stPath As String,
stPlantilla As String
Public Campos As Variant
Dim stSQL As String
Dim appWd As Word.Application
Dim WordDoc As Word.Document
Public Sub Nuevo()
Dim template As String, mipath As String, i As Integer
mipath = stPath & Nombredoc & ".doc"
template = stPlantilla
On Error Resume Next 'Vemos si word está abierto
Set appWd = GetObject(, "Word.Application.8")
If Err.Number <> 0 Then 'Word no esta abierto
Err.Clear ' borramos el error.
'Creamos una nueva instancia de Word
Set appWd = CreateObject("Word.Application.8")
'Creamos una instancia de Word
Else
appWd.Activate
End If
On Error GoTo Err_Nuevo
With appWd
'Seleccionamos la plantilla
.Documents.Add template:=Chr(34) & template & Chr(34)
Dim marca As Bookmark
i = 0
'Recorremos los Campos
For Each marca In .ActiveDocument.Bookmarks
marca.select
'Asignamos el valor del campo correspondiente que tenemos en la
matriz "Campos"
.Selection.InsertAfter Nz(Campos(i, 0))
i = i + 1
Next
If Guardar = True Then
.ActiveDocument.SaveAs mipath
End If
.Visible = True
.WindowState = wdWindowStateMaximize
End With
Exit_Nuevo:
Exit Sub
Err_Nuevo:
If Err.Number = 5941 Then
appWd.Quit
GoTo Exit_Nuevo
Else
appWd.Quit
GoTo Exit_Nuevo
End If
End Sub
Public Property Get TextoSQL() As String
TextoSQL = stSQL
End Property
Public Property Let TextoSQL(ByVal stNewValue As String)
stSQL = stNewValue
Dim rst As Recordset
'Abrimos un recordset con la sentencia SQL
Set rst = CurrentDb.OpenRecordset(stSQL, dbOpenSnapshot)
With rst
' Pasamos el recordset a una matriz llamada "Campos"
Campos = .GetRows(1)
.Close
End With
Set rst = Nothing
End Property
Ahora, queda llamarlo desde un formulario. Podría ser así:
Private Sub Comando0_Click()
'Dimensionamos una nueva instancia de la clase
Dim Contrato As New ClsContrato, misql As String
' Hacemos el Select poniendo los campos en el mismo orden que estén los
marcadores
' en la plantilla de word. Si un campo se repite en la plantilla, también lo
debemos repetir en el Select.
' Lo más sencillo es usar el generador de consultas y
' luego copiar el texto SQL.
' Debemos añadir una clausula Where que restrinja los datos a un solo
registro
misql = "SELECT Contratos_contrato.PrefijoCCC, Contratos_contrato.CCC,
Contratos_contrato.SufijoCCC, 'FULANITO DE TAL' AS Gerente,
Contratos_contrato.Nombre_Trabajador,
Contratos_contrato.Numero_afiliación_Seg,
Contratos_contrato.Nivel_de_Estudi, Contratos_contrato.Fecha_Nacimiento,
Contratos_contrato.DNI_Traba, Contratos_contrato.Dirección,
Contratos_contrato.Denominación, Contratos_contrato.Número_Curso_FPO,
Contratos_contrato.Importe_pesetas_hora, Contratos_contrato.inicio,
Contratos_contrato.Periodo_maximo_de_duracion, [gerente] AS Gerente2,
Contratos_contrato.Nombre_Trabajador AS Firma, Contratos_contrato.[Horas
lectivas] FROM Contratos_contrato "
misql = misql & "WHERE (((Contratos_contrato.id_contrato)=" & Me.id_contrato
& "));"
With Contrato
'indicamos el txto SQL del que obtenemos los campos
.TextoSQL = misql
'indicamos el nombre con el que se guardará el documento
.Nombredoc = "Pruebas word"
' .. y la ruta
.stPath = "P:\XXX\pid\access\Formación\ContratosW\"
'... y la plantilla que vamos a usar
.stPlantilla = "P:\XXX\pid\access\Formación\ContratosW\pruebas word.dot"
' Le decimos que guarde el documento que se genera (usará el nombre que
hemos dado antes)
.Guardar = True
' Y lo ponemos en marcha
.Nuevo
End With
' Destruimos la clase
Set Contrato = Nothing
End Sub
--
Saludos.
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)