Para salvar cada aba do Excel como um arquivo PDF separado, use um loop For Each ws In ActiveWorkbook.Worksheets que percorre todas as planilhas e, para cada uma, chama ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=caminho & ws.Name & “.pdf” — o Excel gera um PDF individual por aba, automaticamente nomeado com o nome da própria planilha.
Você já teve uma pasta de trabalho com uma aba para cada filial, cada vendedor ou cada mês, e precisou distribuir só a aba correspondente para cada pessoa, sem mandar o arquivo inteiro com os dados de todo mundo?
Sem automatizar isso, a rotina manual é abrir cada aba, ir em Arquivo > Exportar > Criar PDF, escolher o nome do arquivo e repetir tudo de novo para a próxima aba, um processo tedioso que cresce proporcionalmente ao número de abas do arquivo.
Neste artigo iremos mostrar como usar o método ExportAsFixedFormat dentro de um loop para gerar um PDF separado por aba, como nomear os arquivos automaticamente e como escolher apenas algumas abas específicas, em vez de todas.
Diferença entre salvar o arquivo inteiro e salvar aba por aba
Já mostramos em Como Salvar uma Planilha de Excel (XLSX) em PDF o caminho manual (Arquivo > Exportar > Criar Documento PDF/XPS), que gera um único PDF com todo o conteúdo selecionado ou a pasta de trabalho inteira. Este artigo foca num cenário diferente: gerar um arquivo PDF distinto para cada aba, automaticamente, sem precisar repetir o processo manual de exportação para cada uma.
O método ExportAsFixedFormat
O ExportAsFixedFormat é o comando do VBA equivalente ao “Salvar Como PDF” da interface do Excel, podendo ser aplicado tanto à pasta de trabalho inteira (ActiveWorkbook.ExportAsFixedFormat) quanto a uma única planilha (ws.ExportAsFixedFormat). Aplicado sobre uma planilha específica, ele exporta só o conteúdo daquela aba, o que é exatamente o comportamento necessário para gerar um PDF por aba.
Código: loop básico que exporta todas as abas
| Linha | Código |
|---|---|
| 1 | Sub ExportarAbasEmPDF() |
| 2 | Dim ws As Worksheet |
| 3 | Dim pasta As String |
| 4 | pasta = ThisWorkbook.Path & “\” |
| 5 | For Each ws In ThisWorkbook.Worksheets |
| 6 | ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pasta & ws.Name & “.pdf” |
| 7 | Next ws |
| 8 | End Sub |
O For Each percorre automaticamente todas as planilhas da pasta de trabalho, uma de cada vez, sem precisar saber de antemão quantas abas existem — se uma aba nova for adicionada depois, o mesmo código continua funcionando sem alterações.
Definindo a pasta de destino automaticamente
A propriedade ThisWorkbook.Path devolve a pasta onde o próprio arquivo Excel está salvo, o que evita ter que digitar um caminho fixo (como “C:\Usuarios\Nome\Documentos\”) que pararia de funcionar em outro computador. Combinando com o nome da aba, cada PDF nasce salvo na mesma pasta do arquivo original, um por aba.
Exportando só algumas abas específicas
Para exportar apenas certas abas (por exemplo, todas menos a de “Instruções” ou “Resumo”), adicione uma condição If dentro do loop, pulando as abas indesejadas: If ws.Name <> “Instruções” Then, envolvendo a linha do ExportAsFixedFormat e fechando com End If antes do Next ws. Também é possível restringir a um conjunto fixo de nomes, testando se o nome da aba está numa lista específica antes de exportar.
Nomeando os arquivos com um padrão personalizado
Em vez de usar só o nome da aba, é comum adicionar um prefixo ou a data no nome do arquivo, como “Relatorio_” & ws.Name & “_” & Format(Date;”yyyy-mm-dd”) & “.pdf” — a função Format transforma a data do sistema num texto no padrão desejado, útil para manter um histórico de exportações sem sobrescrever o arquivo do dia anterior.
Exemplo prático com abas de um relatório mensal
Considere uma pasta de trabalho com as abas abaixo:
| Nome da aba | Conteúdo | Arquivo PDF gerado |
|---|---|---|
| Filial SP | Vendas de São Paulo | Filial SP.pdf |
| Filial RJ | Vendas do Rio de Janeiro | Filial RJ.pdf |
| Filial MG | Vendas de Minas Gerais | Filial MG.pdf |
| Resumo Geral | Consolidado de todas as filiais | (ignorada pelo filtro If) |
Ao rodar a macro com o filtro que ignora a aba “Resumo Geral”, o resultado são três arquivos PDF na mesma pasta do Excel, um para cada filial, prontos para serem enviados individualmente por e-mail a cada gerente regional.
Erros comuns
Nomes de aba que contenham caracteres não permitidos em nomes de arquivo do Windows (como /, : ou ?) geram erro ao tentar salvar o PDF — o ideal é evitar esses caracteres nos nomes das abas desde o início. Outro cuidado é que o ExportAsFixedFormat sobrescreve, sem aviso, um PDF já existente com o mesmo nome na pasta de destino, então rodar a macro duas vezes seguidas substitui os arquivos anteriores silenciosamente. Vale também revisar a área de impressão de cada aba antes de exportar, já que o PDF gerado segue exatamente o que está configurado para impressão, podendo cortar colunas fora dessa área.
Disponibilidade
O método ExportAsFixedFormat está disponível no Excel para Windows e Mac desde a versão 2007, sempre através de VBA (não existe um botão equivalente que já faça isso em massa pela interface). O Excel Online e o Google Sheets não têm suporte a VBA nem a esse método.
Perguntas frequentes
O PDF gerado por aba mantém a formatação da planilha?
Sim, o ExportAsFixedFormat exporta exatamente o que a área de impressão daquela aba mostraria, incluindo cores, bordas e a formatação de página configurada previamente em Layout da Página.
Dá para exportar só uma aba específica, sem usar loop?
Sim, quando é só uma aba, basta chamar Worksheets(“NomeDaAba”).ExportAsFixedFormat diretamente, sem precisar de um loop. O loop com For Each só é necessário quando o objetivo é exportar várias abas de uma vez, cada uma no seu próprio arquivo.
O que acontece se eu rodar a macro duas vezes seguidas?
Os arquivos PDF anteriores são sobrescritos silenciosamente, sem nenhum aviso de confirmação, já que o ExportAsFixedFormat simplesmente substitui um arquivo existente com o mesmo nome na pasta de destino.
Veja também: Como Salvar uma Planilha de Excel (XLSX) em PDF e Como Usar Loops no VBA do Excel: For, For Each e Do While.
Compartilhe ou Comente
Se você curtiu esse artigo aonde mostramos como usar VBA para salvar cada aba de uma pasta de trabalho do Excel como um arquivo PDF separado, com nomes automáticos e a opção de ignorar abas específicas, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.
Sua planilha tem abas que precisam ser distribuídas separadamente para pessoas diferentes? Vai usar essa macro para automatizar algum relatório mensal ou por filial? Conta para nós nos comentários!