Migão envio abaixo uma rotina que utilizava, mas o que eu fazia era criar um formulario no word, onde adicionava campos no mesmo e esses campos eram alimentados pelo sistema gerando um novo documento.
- Declare a referencia: Microsoft word XX.X object library
- Na seção geral do modulo do formulário adicione: Public objWord As New Word.Application, objDoc As Word.Document
- Agora você terá que dar uma lida e limpada no código abaixo (desculpe-me mas o tempo esta corrido para o meu lado), para ver se o mesmo se encaixa a sua necessidade:
Function CriaVinculo(Funcao As Integer)
'ELABORAR ROTINA PARA VERIFICAR SE É UM NOVO CADASTRO OU UM JÁ EXISTENTE.
Select Case Funcao
Case 1
'Declara e Cria os objetos Application e document
'Public objWord As New Word.Application, objDoc As Word.Document
Case 2
'Adiciona um documento, baseado no modelo criado
Set objDoc = objWord.Documents.Add(App.Path & "\Modelos\Contrato de locacao.doc")
Case 3
'Atribui os valores inseridos na aplicação, aos campos de formulário do documento
objDoc.FormFields("w_NrContrato").Range = Format(tdb_Contrato(0), "0000")
objDoc.FormFields("w_NomLocatario").Range = txt_Contrato(0)
objDoc.FormFields("w_NomLocatario2").Range = txt_Contrato(0)
objDoc.FormFields("w_cpfcnpj").Range = msk_contrato(0)
objDoc.FormFields("w_ieci").Range = msk_contrato(1)
objDoc.FormFields("w_Endereco").Range = txt_Contrato(3)
objDoc.FormFields("w_Bairro").Range = txt_Contrato(4)
objDoc.FormFields("w_municipio").Range = txt_Contrato(5)
objDoc.FormFields("w_UfCliente").Range = txt_Contrato(6)
objDoc.FormFields("w_NrTelefone").Range = txt_Contrato(1)
objDoc.FormFields("w_Representante").Range = txt_Contrato(2) & " (" & txt_Contrato(10) & ")"
objDoc.FormFields("w_LocalTrabalho").Range = txt_Contrato(35)
objDoc.FormFields("w_Vigencia").Range = txt_Contrato(25) & " dia(s)"
objDoc.FormFields("w_Franquia").Range = txt_Contrato(30) & " hora(s)"
If txt_Contrato(30) <> 0 Then
objDoc.FormFields("w_CFranquia").CheckBox.Value = 1
Else
objDoc.FormFields("w_SFranquia").CheckBox.Value = 1
End If
objDoc.FormFields("w_Franquia2").Range = txt_Contrato(30) & " hora(s)"
objDoc.FormFields("w_pzrescisao").Range = 5
objDoc.FormFields("w_ValTotContrato").Range = txt_Contrato(32)
objDoc.FormFields("w_ValTotExtenso").Range = Extenso(txt_Contrato(32))
objDoc.FormFields("w_TpCobranca").Range = Mid(Combo(4), 5, (Len(Combo(4)) - 4))
objDoc.FormFields("w_DataVencimento").Range = TDBDate(4)
objDoc.FormFields("w_DespLocatario").Range = txt_Contrato(34)
objDoc.FormFields("w_DespLocador").Range = txt_Contrato(31)
objDoc.FormFields("w_Cidade").Range = "Vila Velha"
objDoc.FormFields("w_UF").Range = "ES"
objDoc.FormFields("w_DataAtual").Range = Format(TDBDate(0), "Long Date")
If txt_Contrato(37) <> "" Then
objDoc.FormFields("w_Observacao").Range = "CLÁUSULA DÉCIMA QUARTA - Informações adcionais"
objDoc.FormFields("w_Observacoes").Range = txt_Contrato(37)
End If
'ENVIA DADOS DOS SOCIOS
Dim strSOCIOS As String
For VSFLEXLINHAS = 1 To (VSFlexGrid(1).Rows - 1)
' NOME CNPJ/CPF
strSOCIOS = strSOCIOS + VSFlexGrid(1).Cell(flexcpText, VSFLEXLINHAS, 2) + String(50 - (Len(VSFlexGrid(1).Cell(flexcpText, VSFLEXLINHAS, 2))), Chr$(32)) + " (" + VSFlexGrid(1).Cell(flexcpText, VSFLEXLINHAS, 1) + ")" & vbCr & vbLf
Next VSFLEXLINHAS
'NA AUSENCIA DE SOCIOS
If strSOCIOS = " " And Option1 = True Then
strSOCIOS = "VIDE CÓPIA DE CONTRATO SOCIAL EM ANEXO"
ElseIf Option2 = True Then
strSOCIOS = "LOCAÇÃO DIRETA PARA PESSOA FISICA"
End If
objDoc.FormFields("w_Responsaveis").Range = strSOCIOS
'ENVIA DADOS DOS EQUIPAMENTOS
Dim strEQUIPAMENTOS As String
Dim strHORIMETRO As String
Dim strVALORES As String
For VSFLEXLINHAS = 1 To (VSFlexGrid(0).Rows - 1)
' NOME CNPJ/CPF
strEQUIPAMENTOS = strEQUIPAMENTOS + Format(VSFLEXLINHAS, "00") & " - " & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 2) & String(50 - (Len(VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 2))), Chr$(32)) & " (" & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 1) & ")" & vbCr & vbLf
strHORIMETRO = strHORIMETRO + Format(VSFLEXLINHAS, "00") & " - " & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 2) & String(50 - (Len(VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 2))), Chr$(32)) & " (" & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 1) & ")" & String(7 - (Len(VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 1))), Chr$(32)) & " - " & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 4) & vbCr & vbLf
strVALORES = strVALORES + Format(VSFLEXLINHAS, "00") & " - " & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 2) & String(50 - (Len(VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 2))), Chr$(32)) & " (" & VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 1) & ")" + " - " + VSFlexGrid(0).Cell(flexcpText, VSFLEXLINHAS, 5) & vbCr & vbLf
Next VSFLEXLINHAS
objDoc.FormFields("w_Equipamento").Range = strEQUIPAMENTOS
objDoc.FormFields("w_Horimetros").Range = strHORIMETRO
objDoc.FormFields("w_DescValores").Range = strVALORES
'DEFINE OPERADOR
If Check(0) = 1 Then
objDoc.FormFields("w_Sera").CheckBox.Value = 1
Else
objDoc.FormFields("w_NSera").CheckBox.Value = 1
End If
'objDoc.FormFields("ChkMaisAssist").CheckBox.Value = (ChkMaisAssist.Value = 1)
'objDoc.FormFields("ChkPromocoes").CheckBox.Value = (ChkPromocoes.Value = 1)
'objDoc.FormFields("ChkFuturos").CheckBox.Value = (ChkFuturos.Value = 1)
Case 4
'Torna visível a aplicação
objWord.Visible = True
Case 5
'Seta a propriedade filter do CommomDialogControl para somente exibir arquivos do Word
Frm_Principal.CommonDialog.DialogTitle = "Selecione o contrato desejado na lista abaixo."
Frm_Principal.CommonDialog.InitDir = App.Path & "\Contratos"
Frm_Principal.CommonDialog.Filter = "Contratos de locação (*.doc)|*.doc"
Frm_Principal.CommonDialog.ShowOpen
If Len(Frm_Principal.CommonDialog.FileName) <> 0 And (Frm_Principal.CommonDialog.FileName) <> Chr$(32) Then
Set objDoc = objWord.Documents.Open(Frm_Principal.CommonDialog.FileName)
End If
Case 6
'salva o documento
objDoc.SaveAs App.Path & "\Contratos" & Format(tdb_Contrato(0), "0000") & " - " & Mid(txt_Contrato(0), 1, 10) & " - Contrato de Locacao"
Case 7
'Imprimir documento
If Len(Frm_Principal.CommonDialog.FileName) <> 0 And (Frm_Principal.CommonDialog.FileName) <> Chr$(32) Then
objDoc.PrintOut Range:=wdPrintAllDocument
End If
Case 10
'Retira os objetos da memória
objDoc.Close
Set objDoc = Nothing
Set objWord = Nothing
End Select
End Function