Notifications
Clear all

Gerar pdf concatenando informação

4 Posts
3 Usuários
0 Reactions
1,101 Visualizações
(@varzya)
Posts: 35
Eminent Member
Topic starter
 

Boa tarde pessoal,

Possuo um formulário em vba gerador de contratos. Toda informação é salva em um modelo de arquivo word chamado "contrato.docx", através da integração junto ao excel.

O botão que faz a ação, abre este modelo de doc, insere as informações em suas respectivas variáveis e salva um novo docx chamado contrato2.docx, preservando o modelo.

Este mesmo botão ao concluir todo o processo que falei acima, faz uma chamada a uma Macro chamada "gera_pdf", que abre este arquivo "contrato2.docx" e gera seu PDF com o mesmo nome, "contrato2.pdf".

Ok... até ai, tudo funcionando como deveria.

O que gostaria de saber é se é possível, esta mesma Macro "gera_pdf", gerar o pdf e salvar com nome específico, concatenando por exemplo a informação de uma variável tipo #ID + #LOCATARIO ??

Ou alguma outra forma de fazer o que gostaria. Segue em anexo um txt, com os 02 códigos.

Obrigado. Abraços.

 
Postado : 01/02/2016 12:20 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Como vc nao fez a gentileza de postar os arquivos para que se possa testar e nem tao pouco disse qual informação deseja salvar o arquivo

Faz um teste

Deve funcionar mas nao tenho certeza.

Sub gera_pdf()

Dim arq As String
Dim nome

nome = "informação que deve ser gerado o nome (nome do cliente por exemplo)"

arq = nome

ActiveDocument.ExportAsFixedFormat OutputFileName:=nome

End Sub

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 01/02/2016 12:52 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não tenho certeza de como se obtém o valor de #Id de um Doc.
Mas a rotina pode ser algo +/- assim:

Sub gera_pdf()
Dim Path as string
Dim nArquivo as string
Path= "C:Usersuser1DesktopGerador_Contratoscontratos"   
nArquivo= #Id & #LOCATARIO&".pdf" 
    ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        path&nArquivo, ExportFormat:= _
        wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
    ChangeFileOpenDirectory "C:Usersuser1DesktopGerador_Contratoscontratos"      
End Sub

Uma outra possibilidade e passar o nome do arquivo quando do chamado da rotina Gera_Pdf
A rotina que "monta" o doc ficaria =/- assim:

Private Sub CommandButton1_Click()
    Dim Word As Word.Application
    Dim DOC As Word.Document

    Set Word = CreateObject("Word.Application")
    Word.Visible = True

    Set DOC = Word.Documents.Open("C:Usersuser1DesktopGerador_Contratosbincontrato.docx")

    With DOC

        .Application.Selection.Find.Text = "#ID"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = txt_id

        .Application.Selection.Find.Text = "#LOCATARIO"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = cmb_nome

        .Application.Selection.Find.Text = "#CNPJ"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = txt_cnpj

        .Application.Selection.Find.Text = "#CPF"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = txt_cpf

        .Application.Selection.Find.Text = "#ENDERECO"
        .Application.Selection.Find.Execute
        .Application.Selection.Range = txt_end

Dim Path as string
Dim nArquivo as string
Path= "C:Usersuser1DesktopGerador_Contratoscontratos"   
nArquivo= txt_id &"_" & cmb_nome&".pdf""  
        If Dir("C:Usersuser1DesktopGerador_Contratosbincontrato2.docx") <> "" Then
          
        End If
        .SaveAs ("C:Usersuser1DesktopGerador_Contratoscontratoscontrato2.docx")
        
        gera_pdf1(Path&nArquivo)
        .Close
        
    End With

    Word.Quit
    Set DOC = Nothing
    Set Word = Nothing
    
Kill "C:Usersuser1DesktopGerador_Contratoscontratoscontrato2.docx"
end sub

e o Gera_PDF

Sub gera_pdf1(byval Arquivo as string)
    ActiveDocument.ExportAsFixedFormat OutputFileName:= _
        Arquivo, ExportFormat:= _
        wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
    ChangeFileOpenDirectory "C:Usersuser1DesktopGerador_Contratoscontratos"      
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 01/02/2016 1:43 pm
(@varzya)
Posts: 35
Eminent Member
Topic starter
 

Amigo Reinaldo,

Suas informações foram quase perfeitas, acho que chegamos perto.

A primeira opção não funcionou, já a segunda opção, funciona, porém uma execução só. Não entendo o pq... da erro de tempo de execução, quando tento gerar um outro contrato na sequencia. Se eu fechar o sistema e abrir novamente, funciona mais uma única vez, e na segunda tentativa, erro novamente.

O que me diz?

No aguardo do pessoal. Abraços.

 
Postado : 02/02/2016 4:27 pm