Do Básico ao Avançado
Home  Tutoriais  Artigos  Contato

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.

Formulário de Cadastro

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.

Modo 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.

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:

Código VBA

4- Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.

Fechar o Editor do Visual Basic

5- Clique no botão de comando.

Salvar em PDF

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.

Caixa de diálogo Salvar Como

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.

Ativar Modo 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.

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:

Código VBA

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.

Fechar o Editor do Visual Basic

5- Clique no botão de comando.

Salvar em PDF

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).

Salvar no formato PDF

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.

Ativar Modo 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.

Exibir Código VBA

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:

Código para salvar em pdf

4- Feche o Editor do Visual Basic para voltar ao Word clicando em Arquivo e depois em Fechar e voltar para Microsoft Word.

Fechar o Editor do Visual Basic

5- Clique no botão de comando e o documento em PDF será exibido automaticamente.

Salvar em PDF

6- Observe também que o documento foi salvo no formato PDF na Unidade C: dentro da pasta Teste.

Documento Salvo em PDF

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




Formação Pacote Office



eBook Word 2010 VBA
Política de Privacidade  |   © 2013 Tutoriais Word - Todos os direitos reservados