Macro para Salvar em PDF no Word 365
Neste tutorial criaremos uma macro para salvar um documento do Word em PDF.
Resolvi escrever este tutorial para atender a vários pedidos de usuários do Word que constantemente solicitam minha ajuda para criar uma macro que salve um documento do Word em PDF sendo que o nome desse arquivo PDF deverá sair automaticamente com o mesmo nome que está contido no campo “Nome do Cliente” de uma tabela contida no documento Word seguido da data e horário atuais.
Como esse questionamento pode ser a dúvida de muitos outros usuários acredito que os exemplos que utilizarei neste tutorial poderá ajudar a todos ou pelos dar uma ideia de como adaptar o código para uma situação específica.
Nos exemplos que serão exibidos aqui eu utilizarei um Controle Activex inserido no próprio documento, mas, você também pode por exemplo criar uma nova guia e adicionar os comandos à faixa de opções ou então adicionar as macros à Barra de Ferramentas de Acesso Rápido.
A imagem abaixo mostra um documento de cadastro que contém um Botão de Comando (Controle ActiveX) ao qual vamos adicionar um código para que quando receber a ação de um clique salvar uma cópia do documento no formato PDF.
Exemplo de código para salvar em PDF
Vou deixar aqui três exemplos de código que você pode utilizar para salvar um documento do Word em pdf.
Exemplo 1
Salvar utilizando a Caixa de Diálogo Salvar Como
Neste primeiro exemplo criaremos um código VBA que abrirá a Caixa de Diálogo Salvar Como com o nome do arquivo preenchido automaticamente e possibilitando ao usuário selecionar o local onde o arquivo deverá ser salvo.
1- Clique na guia Desenvolvedor e no grupo Controles clique em Modo de Design para ativar o modo de design.
2- Selecione o Controle Activex (Botão de Comando) e clique com o botão direito do mouse e depois clique em Exibir Código.
3- No evento Click do botão de comando adicione o código abaixo:
OBS: os trechos de textos na cor verde são comentários que adicionei para que todos possam entender o código.
Private Sub CommandButton1_Click()Dim vDataHora As String
Dim vNomeDoc As String
On Error GoToCommandButton1_Click_Err
'Altera as propriedades Width e Height do botão de comando
CommandButton1.Width = "1"
CommandButton1.Height = "1"
'Pega o texto digitado na primeira célula da segunda coluna da primeira linha da tabela 1
vNomeDoc = ActiveDocument.Tables(1).Cell(1, 2).Range.Text
'Retira o caracter especial de marca fim de célula para não gerar erro de permisão na hora de salvar.
vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) – 2)
'Dependendo da versão use o código abaixo (não esqueça de tirar o apostrofo)
'vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) - 1)
'Exibe a data e hora atual do sistema
vDataHora = Format(Now, "dd-mm-yyyy hh-mm")
'Utiliza a Caixa de Diálogo Salvar Como para salvar como PDF
'Se quiser que a caixa de diálogo Salvar Como não seja exibida exclua a linha de código .Show e adicione a linha .Execute
With Dialogs(wdDialogFileSaveAs)
.Name = vNomeDoc & " " & vDataHora
.Format = wdFormatPDF
.Show
End With
'Retorna os valores originais das propriedades width e Height do botão de comando tornando-o visível novamente.
CommandButton1.Width = "107,25"
CommandButton1.Height = "24"
CommandButton1_Click_Fim:
Exit Sub
CommandButton1_Click_Err:
MsgBox "Erro n. " & Err.Number & " - " & Err.Description
Resume CommandButton1_Click_Fim
End Sub
Deverá ficar como na imagem abaixo:
4- Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.
5- Clique no botão de comando.
6- Observe que a Caixa de Diálogo Salvar Como é exibida com o campo nome previamente preenchido com o nome do usuário seguido da data e horário atuais do sistema.
Exemplo 2
Salvar sem exibir a caixa de diálogo Salvar Como
Neste segundo exemplo usaremos novamente o código acima, porém, faremos uma pequena alteração no código VBA para que a Caixa de Diálogo Salvar Como não seja mais exibida e o arquivo com o nome do cliente, data e hora atuais seja salvo diretamente na pasta Documentos.
1- Clique na guia Desenvolvedor e no grupo Controles clique em Modo de Design para ativar o modo de design.
2- Selecione o Controle Activex (Botão de Comando) e clique com o botão direito do mouse e depois clique em Exibir Código.
3- No evento Click do botão de comando adicione o código abaixo:
Private Sub CommandButton1_Click()Dim vDataHora As String
Dim vNomeDoc As String
On Error GoTo CommandButton1_Click_Err
'Altera as propriedades Width e Height do botão de comando
CommandButton1.Width = "1"
CommandButton1.Height = "1"
'Pega o texto digitado na primeira célula da segunda coluna da primeira linha da tabela 1
vNomeDoc = ActiveDocument.Tables(1).Cell(1, 2).Range.Text
'Retira o caracter especial de marca fim de célula para não gerar erro de permisão na hora de salvar.
vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) – 2)
'Dependendo da versão use o código abaixo (não esqueça de tirar o apostrofo)
'vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) - 1)
'Exibe a data e hora atual do sistema
vDataHora= Format(Now, "dd-mm-yyyy hh-mm")
'Utiliza a Caixa de Diálogo Salvar Como sem exibi-la para salvar como PDF
'Se quiser que a caixa de diálogo Salvar Como seja exibida exclua a linha de código .Execute e adicione a linha .Show
With Dialogs(wdDialogFileSaveAs)
.Name = vNomeDoc & " " & vDataHora
.Format = wdFormatPDF
.Execute
End With
'Retorna os valores originais das propriedades width e Height do botão de comando tornando-o visível novamente.
CommandButton1.Width = "107,25"
CommandButton1.Height = "24"
CommandButton1_Click_Fim:
Exit Sub
CommandButton1_Click_Err:
MsgBox "Erro n. " & Err.Number & " - " & Err.Description
Resume CommandButton1_Click_Fim
End Sub
Deverá ficar como na imagem abaixo:
Observe que alteramos somente a linha .Show por .Execute. Desta forma a Caixa de Diálogo Salvar Como não é exibida na tela e o documento é salvo no formato PDF diretamente na pasta Documentos.
4- Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.
5- Clique no botão de comando.
6- Observe que a Caixa de Diálogo Salvar Como não foi exibida e o documento foi salvo com o nome do usuário seguido da data e horário atuais na pasta Documentos (pasta padrão).
Exemplo 3
Especificando em Local deve ser salvo
Neste terceiro exemplo vamos especificar o local onde o documento convertido em PDF será salvo. E assim como nos exemplos anteriores o arquivo será salvo com o nome do cliente, que foi previamente informado na tabela, seguido da data e hora atuais do sistema.
1- Clique na guia Desenvolvedor e no grupo Controles clique em Modo de Design para ativar o modo de design.
2- Selecione o Controle Activex (Botão de Comando) e clique com o botão direito do mouse e depois clique em Exibir Código.
3- No evento Click do botão de comando adicione o código abaixo:
Private Sub CommandButton1_Click()Dim vDataHora As String
Dim vNomeDoc As String
Dim vLocal As String
On Error GoTo CommandButton1_Click_Err
'Aqui você deve especificar o local onde o documento deve ser salvo
vLocal = "C:\Teste\"
'Altera as propriedades Width e Height do botão de comando
CommandButton1.Width = "1"
CommandButton1.Height = "1"
'Pega o texto digitado na primeira célula da segunda coluna da primeira linha da tabela 1
vNomeDoc = ActiveDocument.Tables(1).Cell(1,2).Range.Text
'Retira o caracter especial de marca fim de célula para não gerar erro de permissão na hora de salvar.
vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) - 2)
'Dependendo da versão deve usar o código abaixo
'vNomeDoc = Mid(vNomeDoc, 1, Len(vNomeDoc) - 1)
vDataHora = Format(Now, "dd-mm-yyyy hh-mm")
'Salva o documento em PDF
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
vLocal & " " & vNomeDoc & " " & vDataHora & ".pdf", ExportFormat:= _
wdExportFormatPDF, OpenAfterExport:=True
'Retorna os valores originais das propriedades width e Height do botão de comando
CommandButton1.Width = "107,25"
CommandButton1.Height = "24"
CommandButton1_Click_Fim:
Exit Sub
CommandButton1_Click_Err:
MsgBox "Erro n. " & Err.Number & " - " & Err.Description
Resume CommandButton1_Click_Fim
End Sub
Veja que o código acima é semelhante aos dos exemplos anteriores, mas aqui declaramos mais uma variável “vLocal” onde especificamos o local (endereço) onde o documento em pdf deverá ser salvo.
No exemplo em questão o documento será salvo na pasta Teste dentro da Unidade C:
Deverá ficar como na imagem abaixo:
4- Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.
5- Clique no botão de comando e o documento em PDF será exibido automaticamente.
6- Observe também que o documento foi salvo no formato PDF na Unidade C: dentro da pasta Teste.
Consideração Final:
Infelizmente não é possível usar a propriedade Visible em um Controle ActiveX, por isso alterei as propriedades Width e Height diminuído seus valores ao mínimo possível (valor “1”), mas antes de fazer as alterações anote os valores atuais destas propriedades para poder voltar aos valores originais ao término da execução da macro.
Faça o download dos exemplos mostrados neste tutorial:
Exemplo 1
Exemplo 2
Exemplo 3