Ir ao conteúdo
  • Cadastre-se

Word Como criar arquivos independentes em PDF, gerados por mala direta do Word


Ir à solução Resolvido por Edson Luiz Branco,

Posts recomendados

Prezados, 

Preciso da ajuda de vocês para me orientar como fazer para resolver uma demanda que tenho atualmente.

Tenho uma mala direta no Word e preciso gerar arquivos independentes em PDF. Tenho instalado em meu note o  PDF Creator. Atualmente tenho que gerar arquivo por arquivo e demora muito, considerando que tenho mais de 100 arquivos para gerar.

Então, existe alguma forma de gerar isso de forma automática? Em caso afirmativo, quais as possibilidades que tenho?   

Para facilitar a lógica, anexarei os modelos dos arquivo em Excel e Word.

Obrigado!!

Abraços,

André

 

CONTROLE DE BOLETINS DE SUBSCRICAO.xlsx Envio do Informe de Rendimentos 2020.docx

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

Bom dia, @André Rache

 

Não estou seguro que no recurso de Mala Direta o Word tenha essa funcionalidade disponível. De qualquer forma, segue uma solução via macro.

Mescle os registros todos num Documento só (guia Correspondências > grupo Concluir > botão Concluir e Mesclar > Editar Documentos Individuais... > opção mesclar Todos os registros)

Abra o editor do VBA nesse documento (Alt F11) e num novo módulo Standard cole o seguinte código e adapte apontando a constante Caminho para uma pasta onde você quer salvar os arquivos individuais e execute o código.

Sub SalvaPDFsIndividuais()
  Const Caminho = "C:\Users\SeuNomeUsuário\Desktop\PDFs\"
  Dim i As Long
  For i = 1 To ThisDocument.Range.Information(wdNumberOfPagesInDocument)
     ThisDocument.ExportAsFixedFormat OutputFileName:=Caminho & "Arquivo " & i, _
                                      ExportFormat:=wdExportFormatPDF, _
                                      Range:=wdExportFromTo, From:=i, To:=i
  Next i
End Sub

Obs.: estou supondo que você tenha o Office 2016 ou superior.

  • Curtir 6
  • Obrigado 3
Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...
  • 5 meses depois...

Bem vindo, @Diogomf

 

Já considerando que poderia haver página avulsa no final (número ímpar de págs), tente algo assim:

 

Sub SalvaParesFolhasEmPDFs()
  Const Caminho = "C:\Users\SeuNomeUsuário\Desktop\PDFs\"
  Dim i As Long, NúmPágs As Long
  NúmPágs = ThisDocument.Range.Information(wdNumberOfPagesInDocument)
  For i = 1 To NúmPágs Step 2
     ThisDocument.ExportAsFixedFormat OutputFileName:=Caminho & "Arquivo " & (i \ 2 + 1), _
                                      ExportFormat:=wdExportFormatPDF, _
                                      Range:=wdExportFromTo, From:=i, To:=i - (i <> NúmPágs)
  Next i
End Sub

 

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Bem vindo ao fórum, @Rodrigo Siqueira Poli

 

Alterei o código pra deixar mais genérico salvando de X em X páginas, para isso mudando apenas o valor da constante BlocoPágs no código abaixo:

 

Sub ExportaPdfBlocoPágs()
  Const Caminho = "C:\Users\SeuNomeUsuário\Desktop\PDFs\"
  Const BlocoPágs = 7 'Salva PDF de X em X páginas
  Dim i As Long, NúmPágs As Long
  NúmPágs = ThisDocument.Range.Information(wdNumberOfPagesInDocument)
  For i = 1 To NúmPágs Step BlocoPágs
     ThisDocument.ExportAsFixedFormat OutputFileName:=Caminho & "Arquivo " & IIf(BlocoPágs = 1, i, (i \ BlocoPágs + 1)), _
                                      ExportFormat:=wdExportFormatPDF, _
                                      Range:=wdExportFromTo, From:=i, To:=i + BlocoPágs - 1
  Next i
End Sub

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Boa tarde

 

Adaptei o código postado pelo Edson e implementei uma solução própria, sem a necessidade de exportar todos os registros antes, você indica os registros e o Word exporta automaticamente, a cada registro exportado, ele busca o próximo registro até o último registro indicado. O nome do arquivo é o nome da pessoa do contrato.

 

No meu caso, eu criei um form para colocar o caminho do arquivo e os registros de início e fim para exportar.

 

Segue o código

 

Private Sub CommandButton1_Click()
    Dim inicio As Integer
    Dim final As Integer
    Dim caminho As String
    Dim i As Integer
    
    caminho = txtCaminho.Value
    inicio = txtInicio.Value
    final = txtFinal.Value
       
    ActiveDocument.MailMerge.DataSource.ActiveRecord = inicio
     
    For i = inicio To final
     ThisDocument.ExportAsFixedFormat OutputFileName:=caminho & ActiveDocument.MailMerge.DataSource.DataFields("Nome_do_Estudante").Value, _
                                      ExportFormat:=wdExportFormatPDF, _
                                      Range:=wdExportAllDocument
     
     ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
     Next i
    MsgBox "Arquivos exportados com sucesso!"
    
End Sub

 

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
Em 16/04/2021 às 17:16, Fabricio Melos disse:

Boa tarde

 

Adaptei o código postado pelo Edson e implementei uma solução própria, sem a necessidade de exportar todos os registros antes, você indica os registros e o Word exporta automaticamente, a cada registro exportado, ele busca o próximo registro até o último registro indicado. O nome do arquivo é o nome da pessoa do contrato.

 

No meu caso, eu criei um form para colocar o caminho do arquivo e os registros de início e fim para exportar.

 

Segue o código

 



Private Sub CommandButton1_Click()
    Dim inicio As Integer
    Dim final As Integer
    Dim caminho As String
    Dim i As Integer
    
    caminho = txtCaminho.Value
    inicio = txtInicio.Value
    final = txtFinal.Value
       
    ActiveDocument.MailMerge.DataSource.ActiveRecord = inicio
     
    For i = inicio To final
     ThisDocument.ExportAsFixedFormat OutputFileName:=caminho & ActiveDocument.MailMerge.DataSource.DataFields("Nome_do_Estudante").Value, _
                                      ExportFormat:=wdExportFormatPDF, _
                                      Range:=wdExportAllDocument
     
     ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
     Next i
    MsgBox "Arquivos exportados com sucesso!"
    
End Sub

 

Bom dia! 

 

Sou iniciante nisso mas eu fiz o do @Edson Luiz Branco e deu certo! Porém, eu queria saber sobre essa questão dos nomes, que você colocou, por exemplo. 

Onde eu coloco o caminho sempre está dando erro, e eu não sei as informações que eu preciso colocar no início e final. 

Você poderia me ajudar @Fabricio Melos

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Boa tarde!!!

 

Estou tentando seguir as orientações do @Edson Luiz Branco, mas não estou conseguindo. Alguém pode me ajudar?

 

Já criei o documento no word, do qual quero gerar os arquivos individuais em PDF.

 

Acesso o VBA do arquivo, colo o código compartilhado por Edson e é aí que está dando erro. 

Link para o comentário
Compartilhar em outros sites

Bem vindo ao fórum, @Jardel Santana!

 

Qual erro está ocorrendo e em qual linha? É uma mala direta que você está imprimindo ou um documento qualquer de x em x págs? Se for mala direta, lembre-se de mesclar o documento num só antes de rodá-la, como dito no primeiro post.

Detalhe o que e como você está tentando fazer, preferencialmente anexe seu(s) arquivo(s) aqui (elimine ou distorça informações confidenciais, se existir). Zipe antes os arquivos, se tiverem macro, senão o robô do site não aceita.

Se você está usando o último código que postei, lembre-se de alterar o caminho onde ficarão os pdf's na constante "Caminho" (a pasta já deve existir em seu PC). Também altere de quantas em quantas páginas você quer imprimir na constante "BlocoPágs".

 

Link para o comentário
Compartilhar em outros sites

Olá, @Edson Luiz Branco, agradeço imensamente o retorno.

 

Não posso compartilhar os arquivos, pois há informações pessoais neles.

 

Acredito que esteja escrevendo de maneira errada, na linha que deve ser feita a alteração.

 

A linha para alterar é essa:

ThisDocument.ExportAsFixedFormat OutputFileName:=Caminho & "Arquivo " & i, _

 

Certo?

 

Criei uma pasta (Certificados), na área de trabalho. Como devo colocar no local em que devo fazer a altertação. Todos os outros passos deram certo, estou errando nesse último.

 

Abraços!

@Edson Luiz Branco, mais uma vez agradeço imensamente pela ajuda.

 

Fui fuçar aqui e percebi que estava fazendo alteração na linha errada.

 

Os arquivos não foram para a pasta que eu queria, ficaram todos na área de trabalho, mas isso tá tranquilo. Agora quero aprender três coisas:

 

1 - que os arquivos sejam enviados para a pasta que quero;

 

2 - que os arquivos já fiquem com os nomes de cada pessoa (hoje precisei renomear 42 arquivos, relativamente poucos);

 

3 - realizar o envio automático dos arquivos.

 

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 5 semanas depois...

@Fabricio Melos, bom dia!! Você pode explicar melhor como utilizar o código? Sou leigo na área.

 

Consigo salvar os arquivos separados em PDF, porém, necessito que eles saiam nomeados com o nome de cada pessoa do certificado. Quando fiz com até 50 arquivos, utilizando o código enviado pelo @Edson Luiz Branco, fui nomeando um a um, entretanto, o que tenho de fazer agora constam 286 nomes, ou seja, são 268 certificados. 

 

Estou com os dados (nomes) em uma planilha no excel e não sei qual alteração fazer no código acima, para que os arquivos em PDF sejam salvos com os referidos nomes. 

 

Desde já agradeço!

 

Em 16/04/2021 às 17:16, Fabricio Melos disse:

Boa tarde

 

Adaptei o código postado pelo Edson e implementei uma solução própria, sem a necessidade de exportar todos os registros antes, você indica os registros e o Word exporta automaticamente, a cada registro exportado, ele busca o próximo registro até o último registro indicado. O nome do arquivo é o nome da pessoa do contrato.

 

No meu caso, eu criei um form para colocar o caminho do arquivo e os registros de início e fim para exportar.

 

Segue o código

 




Private Sub CommandButton1_Click()
    Dim inicio As Integer
    Dim final As Integer
    Dim caminho As String
    Dim i As Integer
    
    caminho = txtCaminho.Value
    inicio = txtInicio.Value
    final = txtFinal.Value
       
    ActiveDocument.MailMerge.DataSource.ActiveRecord = inicio
     
    For i = inicio To final
     ThisDocument.ExportAsFixedFormat OutputFileName:=caminho & ActiveDocument.MailMerge.DataSource.DataFields("Nome_do_Estudante").Value, _
                                      ExportFormat:=wdExportFormatPDF, _
                                      Range:=wdExportAllDocument
     
     ActiveDocument.MailMerge.DataSource.ActiveRecord = wdNextRecord
     Next i
    MsgBox "Arquivos exportados com sucesso!"
    
End Sub

 

Link para o comentário
Compartilhar em outros sites

  • mês depois...

@Alex_Leite Desculpe a demora em responder

 

Até alguns dias atrás meu código funcionava normalmente. Porém, de uns dias para cá também começou a apresentar o mesmo problema. Estou tentando identificar ainda o que está acontecendo.

Pessoal, apesar de estar apresentando o mesmo problema que o @Alex_Leite comentou, disponibilizo aqui os fontes da macro que gera os PDFs.

ExportPDFMacro.zip

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois...
  • mês depois...

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!