Abrir word y combinar campos access en visual

Hola mi pregunta es, ¿qué código tengo que poner para que al pulsar un botón se me abra el word y me combine los campos automáticamente con los campos de una tabla?, hasta ahora he conseguido abrir el documento word, pero con los campos sin combinar, es decir, se me abre el word y me aparece:
<<NOM>>
<<DOMI1>>
el codigo que he utilizado es este:
Dim Documento As New Word.Application
    With Documento
         .Application.Documents.Open camino & "\cartas.doc"
         .Application.Visible = True
    End With
    Set Documento = Nothing
Muchas Gracias.

1 respuesta

1
Respuesta de
Hola,
Mira pués asi como entendi, lo que quieres es pasar datos a word, am pués yo utilizo una función la cuál recibe tres valores:
1. Nombre del documento de word
2. String SQL
3. Nombre de la base de datos
Call Exportar("Factura.doc", "select * from Compra","C:\bd.mdb")
Y la función quedaría así:
Private Sub Exportar(PathDesino As String, sql As String, PathBd As String)
On Error GoTo ErrSub
    Dim Word As New Word.Application
    Dim Doc As Word.Document
    Dim Tabla As Word.Table
    Dim f As ADODB.Field, col As Integer
    Dim i As Integer, dato As Variant
    ' si la bd está abierta .. la cierra
    If conexion.State = adStateOpen Then
       conexion.Close
    End If
    ' abre la conexión
    conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _
             "Source=" & "c:\bd.mdb"
    ' Abre el recordset
    With Recordset
        .CursorLocation = adUseClient
        .Open sql, conexion, adOpenStatic, adLockReadOnly
    End With
    Screen.MousePointer = vbHourglass
    'Agrega la tabla al docucumento, las filas y columnas
    Set Doc = Word.Documents.Add
    Word.Selection.Paragraphs.Alignment = wdAlignParagraphRight
    Word.Selection.TypeText Date
    Word.Selection.TypeText vbCrLf 'Salto a otra línea
    Word.Selection.TypeText vbCrLf 'Salto a otra línea
    Word.Selection.Paragraphs.Alignment = wdAlignParagraphCenter
    Word.Selection.TypeText "Compras"
    Word.Selection.Paragraphs.Alignment = wdAlignParagraphCenter
    Set Tabla = Doc.Tables.Add(Word.Selection.Range, _
                               Recordset.RecordCount + 1, _
                               Recordset.Fields.Count)
    Tabla.Cell(1, 1).SetWidth 50, wdAdjustFirstColumn
    Tabla.Cell(1, 1).Range.Text = "Folio"
    Tabla.Cell(1, 2).SetWidth 80, wdAdjustFirstColumn
    Tabla.Cell(1, 2).Range.Text = "Codigo"
    Tabla.Cell(1, 3).SetWidth 80, wdAdjustFirstColumn
    Tabla.Cell(1, 3).Range.Text = "Fecha"
    'Los Datos
    Recordset.MoveFirst
    For i = 1 To Recordset.RecordCount
        col = 1
        For Each f In Recordset.Fields
            dato = Recordset.Fields(f.Name)
            Tabla.Cell(i + 1, col).Range.Text = dato
            col = col + 1
        Next
        Recordset.MoveNext 'Siguiente
    Next
    'Fin
    Screen.MousePointer = vbNormal
    MsgBox "Informe de Compras Listo.", vbInformation, "Compras"
    'Guarda el documento y lo cierra
    Doc.SaveAs PathDesino
    Set Tabla = Nothing
    Set Doc = Nothing
    Word.Quit
    Set Word = Nothing
    Dim mipath As String
    mipath = App.Path
    Dim lValDev As Long
    lValDev = ShellExecute(Me.hWnd, "Open", mipath & "\Factura.doc", "", "", 1)
    Exit Sub
'Rutina de Error
''''''''''''''''''''
ErrSub:
    ' por si el dato es un Null
    If Err.Number = 94 Then
       Err.Clear
       dato = vbNullString
       Resume Next
    Else
       MsgBox Err.Description
       Screen.MousePointer = vbNormal
    End If
End Sub 
En la parte de declaraciones escribirías lo siguiente para poder llamar a word:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Espero que te sirva de ayuda esta información que te doy, si tienes algún otro problema no dudes en preguntar, y ya sabes el mecanismo de Terminar y Puntuar las respuestas.
Saludos..!
Lic. Juan A. Carmona Scott
Añade un comentario a esta respuesta
Añade tu respuesta
Haz clic para o
Escribe tu mensaje