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

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 обычно добавляют конфигурацию имён, журнал и запрет перезаписи. Реальная схема зависит от книги и правил документооборота.
