насколько я знаю метод
ActiveWindow.SelectedSheets.PrintOut не позволяет сохранять файл с программно заданным именем, имя обязательно придется вбивать ручками.
или использовать
BullZip - бесплатный виртуальный принтер, дело ваше
этот код у меня работает, но он всю простыню вывед на один лист
Sub zzz()
Dim fn As String
fn = "D:\Ведомость дефектов " & Лист3.[C4] & " " & "зав. № " & Лист3.[C5] & " " & "рег. № " & Лист3.[C6] & " " & "(а" & Лист1.[D9] & ").pdf"
PrintSheetAsPDF fn
End Sub
Function PrintSheetAsPDF(file_name As String) ', merge_file_name As String)
Dim obj_printer_util As Object
Dim obj_printer_settings As Object
Dim printername As String
Set obj_printer_util = CreateObject("Bullzip.PDFUtil")
printername = obj_printer_util.DefaultPrinterName
Set obj_printer_settings = CreateObject("Bullzip.PDFSettings")
obj_printer_settings.printername = obj_printer_util.DefaultPrinterName
obj_printer_settings.LoadSettings (True)
If file_name = "" Then Exit Function
If LCase(Right(file_name, 4)) <> ".pdf" Then
file_name = file_name & ".pdf"
End If
With obj_printer_settings
.SetValue "output", save_path & file_name
.SetValue "showsettings", "never"
.SetValue "ConfirmOverwrite", "no" ' если файл с именем уже существует перезапишем без разговоров
.SetValue "ShowPDF", "yes" ' после создания файла откроем его
.SetValue "Target", "prepress"
.SetValue "Author", Author ' не удалось избавиться от добавления своих персональных данных в файл
.SetValue "Title", doc_title
.SetValue "Subject", subject_name
.SetValue "Keywords", Keywords
.SetValue "UseThumbs", "no"
.SetValue "AutoRotatePages", "all"
.SetValue "Linearize", "yes"
.SetValue "Res", "3600"
If FileType = "JPEG" Then
.SetValue "Device", "jpeg"
End If
.WriteSettings True
End With
ActiveWorkbook.PrintOut visPrintAll
End Function