Usuário com melhor resposta
Relatorio Word/Excel

Pergunta
-
Prezados,
Tenho um form em vba que alimenta uma planilha excel.
Nesse form tenho dados cadastrais de alguns clientes bem como operações realizadas por eles.
Tenho um relatorio (uma especie de fatura) em word com os dados do cliente e da operação realizada.
Minha duvida é: Criar um (pré)-Modelo em word da fatura e quando preencher meu form no vba, os dados forem transportados "automaticamente" para a fatura.
Existe algum lugar onde eu possa conseguir material sobre como fazer essa "integração" ?
Alguem sabe como fazer esse vinculo ( excel-vba-word ) ?
Obrigado desde ja.
Fabiano Lima
Respostas
-
Olá Fabiano,
se você terá um modelo no Word, pode fazer algo assim (a partir do Excel):
Code BlockSub FillDocument(Nome As String, Endereco As String, Data As String, CodProd As String)
Const conTemplate As String = "C:\Users\Luiz\Desktop\MyDoc.docx"
Dim oWapp As Word.Application
Dim oDoc As Word.DocumentOn Error GoTo ErrHandler
Set oWapp = CreateObject("Word.Application")
Set oDoc = oWapp.Documents.Add(conTemplate, , , True)
oDoc.Range.Find.Execute "[nome]", , True, , , , False, , , Nome
oDoc.Range.Find.Execute "[end]", , True, , , , False, , , Endereco
oDoc.Range.Find.Execute "[data]", , True, , , , False, , , Data
oDoc.Range.Find.Execute "[codigo_prod]", , True, , , , False, , , CodProd
oWapp.Visible = TrueExitHere:
Exit SubErrHandler:
MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "Module1-FillDocument"
Resume ExitHere
End Sub
Todas as Respostas
-
Fabiano
Vamos supor que voce tenha um form em VBA no Word onde a pessoa pode selecionar a partir de uma combobox o nome do cliente. Selecionado o nome, os dados sao passados para a fatura. No Word, instale as refs ao DAO (VBE --> Ferramentas --> Referências). Utilizando o código abaixo no Word voce poderá fazer isso:
Code BlockDim db As DAO.Database
Dim rs As DAO.RecordsetPrivate Sub ComboBox1_Change()
OpenRs ("Select * from [Clientes$] WHERE Nome='" & Me.ComboBox1.Text & "'")
With ThisDocument.Tables(1)
.Cell(1, 1).Range = rs.Fields("Nome").Value
.Cell(1, 2).Range = rs.Fields("Data").Value
.Range.Calculate
End With
End SubSub OpenDB()
On Error GoTo ErrHandler
Set db = dbengine.OpenDatabase("C:\Pasta1.xls", False, False, "Excel 8.0")
Exit Sub
ErrHandler:
MsgBox Err.Description, vbCritical, Err.Number
Resume Next
End SubSub CloseDB()
On Error Resume Next
db.Close
End SubSub OpenRs(ByVal strSQL As String)
On Error GoTo ErrHandler
Set rs = db.OpenRecordset(strSQL)
Exit Sub
ErrHandler:
MsgBox Err.Description, vbCritical, Err.Number
Resume Next
End SubSub CloseRs()
On Error Resume Next
rs.Close
End SubSub PopulateCbo()
OpenRs ("Select * from [Clientes$]")
Do While Not rs.EOF
Me.ComboBox1.AddItem rs.Fields("Nome").Value
rs.MoveNext
Loop
CloseRs
End SubPrivate Sub UserForm_Initialize()
OpenDB
Call PopulateCbo
End SubPrivate Sub UserForm_Terminate()
CloseDB
End Sub -
-
-
Nesse caso, eu naum tenho um vba no word ,,, meu vba esta no excel.
Exemplo:
Form (vba)
nome:
end:
data:
codigo_prod:
No word eu tenho um relatorio (fatura, contrato ...)
" Aqui declaro que o cliente [nome], localizado no endeço [end] celebrou nesta data [data]
a compra do produto [codigo_prod]"
Resumindo: Abro o form (vba) no excel, preencho os campos e ao clicar em um buttom os dados contidos no form irão alimentar esse relatorio no word, onde os campos entre colchetes serão as variaveis que serão alteradas.
Muda alguma coisa ?
-
Olá Fabiano,
se você terá um modelo no Word, pode fazer algo assim (a partir do Excel):
Code BlockSub FillDocument(Nome As String, Endereco As String, Data As String, CodProd As String)
Const conTemplate As String = "C:\Users\Luiz\Desktop\MyDoc.docx"
Dim oWapp As Word.Application
Dim oDoc As Word.DocumentOn Error GoTo ErrHandler
Set oWapp = CreateObject("Word.Application")
Set oDoc = oWapp.Documents.Add(conTemplate, , , True)
oDoc.Range.Find.Execute "[nome]", , True, , , , False, , , Nome
oDoc.Range.Find.Execute "[end]", , True, , , , False, , , Endereco
oDoc.Range.Find.Execute "[data]", , True, , , , False, , , Data
oDoc.Range.Find.Execute "[codigo_prod]", , True, , , , False, , , CodProd
oWapp.Visible = TrueExitHere:
Exit SubErrHandler:
MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "Module1-FillDocument"
Resume ExitHere
End Sub -
Prezado Luiz,
Tentei rodar se codigo mas, pra variar, deu erro rsrs
Perguntas:
1) No form do vba (excel) crei um botão que, ao ser clicado, transfere os dados digitados no excel para o word.
No seu codigo acima, como faço para atribir essa função ao buttom ?
2) Os dados que serão jogados no word virão do vba (textbox, listbox, combobox ...) ou da propria planilha excel ?
Vaeu.
Fabiano Lima.
-
Eu rodei o código sem erros.
Assinale a bilbioteca Microsoft Word Object Library no menu Ferramentas > Referências do módulo.
Os dados podem vir da planilha ou de controles do formulário, basta você chamar a função e passar os parâmetros.
Você precisa postar aqui o código que utilizou, a mensagem de erro e a linha que deu erro.
-
-