none
Exportar dados de uma tabela em Access para uma mala direta do Word RRS feed

  • Pergunta

  • Pessoal, bom dia para todos.

    Estou tentando exportar dados de uma tabela do Access para o Word e estou usando o código abaixo, mas está dando erro. Eu não sei como resolver.

    Alguém pode me ajudar?

    Public Sub ExportPublic()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim fld As Field

    Set db = CurrentDb()
    Set rs = db.OpenRecordset("T_CheckList")
    Set fld = rs.Fields(0)

    WordEx

    Do Until rs.EOF

    sel.TypeText Text:="Escola - " & Escola.Value '& vbCrLf & vbCrLf- nesta linha aparece o erro 424.

    rs.MoveNext

    Loop

    End Sub


    quinta-feira, 30 de abril de 2015 15:47

Respostas

  • Estou assumindo que esse documento de Word (Check_List.docx) serve como modelo para você criar vários documentos diferentes, certo? Considere, que em algum lugar desse documento, você tenha escrito, as expressões {Escola} e {Nome}. Utilize o código a seguir:

    'Faça referência à biblioteca Microsoft Word XX.0 Object Library
    
    Dim oWord As Word.Application
    Dim oDocument As Word.Document
    
    Sub WordEx()
        If GetWord = False Then Exit Sub
        If GetDocument = False Then Exit Sub
        
        '<código que abre seu recordset>
        
        ReplaceAnchor "{Escola}", rs!Escola
        ReplaceAnchor "{Nome}", rs!Nome
        
        'oDocument.SaveAs2 "c:\docs\novonome.docx"
    linEnd:
        On Error Resume Next
        rs.Close
        Set rs = Nothing
        'oDocument.Close
        'Set oDocument = Nothing
        'oWord.Quit SaveChanges:=False
        'Set oWord = Nothing
    End Sub
    
    Function GetWord() As Boolean
        On Error Resume Next
        Set oWord = GetObject(, "Word.Application")
        If oWord Is Nothing Then
            Set oWord = CreateObject("Word.Application")
        End If
        oWord.Visible = True
        On Error GoTo 0
    
        If oWord Is Nothing Then
            MsgBox "Não foi possível inicializar o Word!", vbCritical
            GoTo linEnd
        End If
    
        GetWord = True
    linEnd:
    End Function
    
    Function GetDocument() As Boolean
        On Error Resume Next
        Set oDocument = oWord.Documents.Add("c:\temp\Check_List.docx", True)
        'Set oDocument = oWord.Documents.Add("c:\docs\Check_List.docx", True)
        On Error GoTo 0
        If oDocument Is Nothing Then
            MsgBox "Não foi possível encontrar o modelo de Word!", vbCritical
            GoTo linEnd
        End If
    
        GetDocument = True
    linEnd:
    End Function
    
    Sub ReplaceAnchor(sWordField As String, sRecordsetValue As String)
        With oDocument.Range.Find
            .Text = sWordField
            .Replacement.Text = sRecordsetValue
            .Forward = True
            .Wrap = wdFindContinue
            .Execute Replace:=wdReplaceAll
        End With
    End Sub



    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 26 de maio de 2015 13:34
    Moderador

Todas as Respostas

  • Você terria que utilizar algo como:

    sel.TypeText Text:="Escola - " & rs!Escola '& vbCrLf & vbCrLf

    Note que isso só funcionaria se "Escola" fosse um campo presente na tabela T_CheckList


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    segunda-feira, 4 de maio de 2015 12:13
    Moderador
  • Deu certinho. Desculpa a demora na resposta.

    Mas estou com a corda no pescoço. Aqui não pode nenhuma outra coisa e eu não sei nada, ou quase nada de Office.

    Posso abusar da sua boa vontade? desculpa.

    É possível criar no Word algum tipo de campo no Word que seja identificado quando eu exportar os dados do access?

    Por exemplo, eu quero que esse campo Escola que falamos acima seja enviado para uma tabela num lugar específico na folha.

    Tem como fazer isso?

    Mais uma vez desculpa incomodar.

    Obrigado

    Cordialmente

    Leandro


    sexta-feira, 15 de maio de 2015 14:31
  • Crie no Word um campo chamado, por exemplo, {Escola}.

    Daí sua macro no Access deverá acessar o modelo de Word que possui esses "âncoras" e substitui-los pelo conteúdo do campo Escola, por examplo.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 15 de maio de 2015 23:28
    Moderador
  • Felipe, bom dia.

    Desculpa abusar do seu conhecimento, mas não sei como chamar um documento específico do Word e editá-lo.

    Tentei várias coisas mas só deu errado.

    o nome do documento é Check_List.docx e ele fica numa pasta na raíz: C:\docs

    Mais uma vez desculpa por incomodar

    Obrigado

    Leandro

    Eu uso o código abaixo para abrir um novo documento:

    Public Sub WordEx()

    Set WordApp = New Word.Application

    WordApp.Documents.Add

    Set doc = WordApp.ActiveDocument

    Set sel = WordApp.Selection

    WordApp.Visible = True

    End Sub

    terça-feira, 26 de maio de 2015 11:50
  • Estou assumindo que esse documento de Word (Check_List.docx) serve como modelo para você criar vários documentos diferentes, certo? Considere, que em algum lugar desse documento, você tenha escrito, as expressões {Escola} e {Nome}. Utilize o código a seguir:

    'Faça referência à biblioteca Microsoft Word XX.0 Object Library
    
    Dim oWord As Word.Application
    Dim oDocument As Word.Document
    
    Sub WordEx()
        If GetWord = False Then Exit Sub
        If GetDocument = False Then Exit Sub
        
        '<código que abre seu recordset>
        
        ReplaceAnchor "{Escola}", rs!Escola
        ReplaceAnchor "{Nome}", rs!Nome
        
        'oDocument.SaveAs2 "c:\docs\novonome.docx"
    linEnd:
        On Error Resume Next
        rs.Close
        Set rs = Nothing
        'oDocument.Close
        'Set oDocument = Nothing
        'oWord.Quit SaveChanges:=False
        'Set oWord = Nothing
    End Sub
    
    Function GetWord() As Boolean
        On Error Resume Next
        Set oWord = GetObject(, "Word.Application")
        If oWord Is Nothing Then
            Set oWord = CreateObject("Word.Application")
        End If
        oWord.Visible = True
        On Error GoTo 0
    
        If oWord Is Nothing Then
            MsgBox "Não foi possível inicializar o Word!", vbCritical
            GoTo linEnd
        End If
    
        GetWord = True
    linEnd:
    End Function
    
    Function GetDocument() As Boolean
        On Error Resume Next
        Set oDocument = oWord.Documents.Add("c:\temp\Check_List.docx", True)
        'Set oDocument = oWord.Documents.Add("c:\docs\Check_List.docx", True)
        On Error GoTo 0
        If oDocument Is Nothing Then
            MsgBox "Não foi possível encontrar o modelo de Word!", vbCritical
            GoTo linEnd
        End If
    
        GetDocument = True
    linEnd:
    End Function
    
    Sub ReplaceAnchor(sWordField As String, sRecordsetValue As String)
        With oDocument.Range.Find
            .Text = sWordField
            .Replacement.Text = sRecordsetValue
            .Forward = True
            .Wrap = wdFindContinue
            .Execute Replace:=wdReplaceAll
        End With
    End Sub



    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 26 de maio de 2015 13:34
    Moderador
  • Cara, você manja muito mesmo.

    OBRIGADO DE VERDADE

    Abraços Fraternos

    Leandro

    terça-feira, 26 de maio de 2015 13:59