none
Relatorio Word/Excel RRS feed

  • 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

    quarta-feira, 5 de dezembro de 2007 18:59

Respostas

  • Olá Fabiano,

     

    se você terá um modelo no Word, pode fazer algo assim (a partir do Excel):

     

    Code Block

     

    Sub 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.Document

    On 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 = True

    ExitHere:
    Exit Sub

    ErrHandler:
    MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "Module1-FillDocument"
    Resume ExitHere
    End Sub

     

     

    quinta-feira, 6 de dezembro de 2007 01:30
    Moderador

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 Block

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

     

    Private 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 Sub

     

    Sub 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 Sub

     

    Sub CloseDB()
        On Error Resume Next
        db.Close
    End Sub

     

    Sub 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 Sub

     

    Sub CloseRs()
        On Error Resume Next
        rs.Close
    End Sub

     

    Sub PopulateCbo()
        OpenRs ("Select * from [Clientes$]")
        Do While Not rs.EOF
            Me.ComboBox1.AddItem rs.Fields("Nome").Value
            rs.MoveNext
        Loop
        CloseRs
    End Sub

     

    Private Sub UserForm_Initialize()
        OpenDB
        Call PopulateCbo
    End Sub

     

    Private Sub UserForm_Terminate()
        CloseDB
    End Sub

     

     

     

    quarta-feira, 5 de dezembro de 2007 19:39
  • Rapaz, Tinha nada mais facil não ? rsrsrs

    Bom... vou tentando me "achar" por aqui... qualquer coisa ...

     

    quarta-feira, 5 de dezembro de 2007 19:58
  • Eu preferi via acesso de dados ao invés de catar o valor individual. Assim, voce mantem uma certa integridade nos seus dados...

     

    quarta-feira, 5 de dezembro de 2007 20:01
  • 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 ?

     

     

    quarta-feira, 5 de dezembro de 2007 20:16
  • Olá Fabiano,

     

    se você terá um modelo no Word, pode fazer algo assim (a partir do Excel):

     

    Code Block

     

    Sub 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.Document

    On 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 = True

    ExitHere:
    Exit Sub

    ErrHandler:
    MsgBox Err.Description & vbCrLf & Err.Number & vbCrLf & Err.Source, vbCritical, "Module1-FillDocument"
    Resume ExitHere
    End Sub

     

     

    quinta-feira, 6 de dezembro de 2007 01:30
    Moderador
  • 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.

    quinta-feira, 6 de dezembro de 2007 14:19
  • 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.

     

    quinta-feira, 6 de dezembro de 2007 20:29
    Moderador
  • Prezado Luiz,

     

    Valeu pela ajuda.

    Consegui rodar o codigo ... tive apenas que fazer algumas codificações conforme minhas necessidades.

    Grato,

    Fabiano Lima

    domingo, 9 de dezembro de 2007 15:34
  • Olá. Eu consegui realizar o que eu queria usando este código, porém por exemplo, tenho uma das variáveis que se repetem no documento. Porém ele só altera uma delas.
    O que devo alterar para poder alterar todas as instancias ?
    Att. Jeff
    sexta-feira, 11 de abril de 2008 11:59