Макрос для экспорта листов Excel в PDF

Макрос создаёт PDF для видимых листов, очищает имена файлов, проверяет путь и восстанавливает настройки Excel при ошибке.

Макрос для экспорта листов Excel в PDF

Результат: макрос сохраняет каждый видимый рабочий лист отдельным PDF рядом с книгой. Перед запуском настройте на листах область печати, ориентацию и масштаб — ExportAsFixedFormat использует именно эти параметры.

Код экспорта

Практический пример: Макрос для экспорта листов Excel в PDF
Option Explicit

Sub ExportVisibleSheetsToPdf()
    Dim ws As Worksheet, outputPath As String, pdfName As String
    If ThisWorkbook.Path = "" Then
        MsgBox "Сначала сохраните книгу.", vbInformation
        Exit Sub
    End If
    outputPath = ThisWorkbook.Path & Application.PathSeparator & "PDF"
    If Dir(outputPath, vbDirectory) = "" Then MkDir outputPath

    Application.ScreenUpdating = False
    On Error GoTo Fail
    For Each ws In ThisWorkbook.Worksheets
        If ws.Visible = xlSheetVisible Then
            pdfName = outputPath & Application.PathSeparator & CleanName(ws.Name) & ".pdf"
            ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfName, _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False
        End If
    Next ws
CleanExit:
    Application.ScreenUpdating = True
    Exit Sub
Fail:
    MsgBox "Не удалось экспортировать лист «" & ws.Name & "»: " & Err.Description, vbExclamation
    Resume CleanExit
End Sub

Private Function CleanName(ByVal value As String) As String
    Dim bad, ch
    bad = Array("\", "/", ":", "*", "?", Chr(34), "<", ">", "|")
    For Each ch In bad
        value = Replace(value, ch, "_")
    Next ch
    CleanName = Trim$(value)
End Function

Настройки страницы важнее VBA

Если таблица выводится на пять узких страниц или обрезается, макрос повторит плохую разметку. На каждом листе проверьте область печати, бумагу, ориентацию, поля, сквозные строки и FitToPagesWide. Сначала вручную экспортируйте один лист как эталон.

Имена и перезапись

Название листа допустимо в имени PDF не всегда: Windows запрещает \ / : * ? \" < > |. Функция заменяет эти символы. Повторный запуск перезапишет существующий PDF без отдельного диалога; в рабочем решении можно добавлять дату или спрашивать подтверждение.

Какие листы экспортировать

Пример берёт все видимые листы. Для списка из таблицы конфигурации используйте явный allowlist. Скрытый технический лист не должен неожиданно попадать клиенту. Очень скрытые листы (xlSheetVeryHidden) также исключены условием.

Один PDF из нескольких листов

Чтобы получить общий файл, сначала сформируйте массив имён листов, выделите их и вызовите ActiveSheet.ExportAsFixedFormat. Важно восстановить исходный активный лист и не оставлять группу листов выделенной: последующее редактирование иначе затронет сразу несколько вкладок.

Проверка результата

После цикла посчитайте созданные файлы, проверьте ненулевой размер и запишите журнал. Сам факт отсутствия ошибки VBA не гарантирует читаемый PDF — автоматическая проверка должна дополняться просмотром первой партии.

Следующий шаг

Для пакетного выпуска PDF обычно добавляют конфигурацию имён, журнал и запрет перезаписи. Реальная схема зависит от книги и правил документооборота.

Нужно автоматизировать похожую задачу?

Пришлите пример Excel или Word и описание результата — оценю подходящий вариант.