Я пытаюсь написать (как я думал) простой макрос, который сохранит рабочий лист (а не всю книгу) из электронной таблицы Excel в виде PDF-файла. Я использую Excel 2016 (15.24) на MacBook Pro под управлением Yosemite. Я видел множество примеров здесь и в Интернете.
Я начал с записи макроса и отредактировал его. Выглядело это так:
Sub SavePDF()
ActiveWorkbook.SaveAs Filename:= _
"pdfs/excelsheetstopdf.pdf", FileFormat:=xlPDF, _
PublishOption:=xlSheet
End Sub
Это создало файл PDF, но он содержал все листы из Рабочей книги. Похоже, что по какой-то причине PublishOption: = xlSheet, хотя и работает вручную при записи макроса, не работает с VBA.
Ok. Поэтому я попробовал другой подход, используя ExportAsFixedFormat, моделируя свой подход на некоторых примерах, которые я видел здесь и в других местах в Интернете, и стараясь сделать его как можно более простым. Вот моя версия.
Sub SimplePDF()
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:="pdfs/example.pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End Sub
Каждый раз, когда я пытаюсь это сделать, я получаю сообщение об ошибке печати, за которым следует ужасная ошибка времени выполнения 1004. Кстати, кто-нибудь знает определение этой ошибки?
Может ли кто-нибудь подсказать, почему это не работает? Буду признателен за любой совет.
Следуя приведенному ниже совету Синан, я изменил код на
Sub SavePDF()
ActiveSheet.SaveAs Filename:= _
"pdfs/excelsheetstopdf.pdf", FileFormat:=xlPDF
End Sub
Я получаю ту же ошибку времени выполнения 1004, но она дает мне дополнительную информацию «Ошибка метода SaveAs класса Worksheet»
Я попробовал описанную ниже технику Дэвида Земенса: скопировать активный рабочий лист в новую рабочую книгу, а затем использовать SaveAs в этой новой книге.
Sub NSavePDF()
ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:= _
"pdfs/excelsheetstopdf.pdf", FileFormat:=xlPDF, _
PublishOption:=xlSheet
'Close the new workbook without saving it.
ActiveWorkbook.Close False
End Sub
Однако это пытается распечатать лист на моем принтере по умолчанию, а не конвертировать в PDF.