Как сохранить рабочую таблицу из электронной таблицы Excel в формате PDF

Я пытаюсь написать (как я думал) простой макрос, который сохранит рабочий лист (а не всю книгу) из электронной таблицы 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.


person David Crossen    schedule 12.05.2017    source источник
comment
Что за ошибка печати?   -  person David Zemens    schedule 12.05.2017


Ответы (1)


Вы просите сохранить всю книгу, и вот что происходит. Вместо этого вы можете выяснить, какой рабочий лист вы хотите сохранить в формате PDF, и вызвать для этого метод SaveAs.

См. Worksheet.SaveAs вместо Workbook.SaveAs.

Сохраняет изменения в диаграмме или на листе в другом файле.

Синтаксис

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage, TextVisualLayout, Local)

expression: переменная, представляющая объект рабочего листа.

Sub SaveSheetAsPDF()
ActiveWorksheet.SaveAs Filename:= _
    "pdfs/excelsheetstopdf.pdf", FileFormat:=xlPDF
End Sub

Если по какой-то причине это не работает (но Workbook.SaveAs работает), вы можете просто скопировать лист в новую книгу, содержащую только один лист, а затем выполнить SaveAs с этой книгой.

Sub SavePDF()
    ActiveSheet.Copy '## This creates a new workbook containing only the copied sheet
    'ActiveWorkbook should now be the new/copied worksheet:

    ActiveWorkbook.SaveAs Filename:= _
        "pdfs/excelsheetstopdf.pdf", FileFormat:=xlPDF, _
        PublishOption:=xlSheet
    'Close the new workbook without saving it.
    ActiveWorkbook.Close False

End Sub
person Sinan Ünür    schedule 12.05.2017
comment
@DavidZemens Спасибо. - person Sinan Ünür; 12.05.2017
comment
Спасибо за быстрые ответы, ребята, но ни один из подходов не работает для меня. Кажется, я не могу этого понять. - person David Crossen; 12.05.2017
comment
Это так раздражает. Кажется, он отлично работает в версии Excel для ПК, но не в моей версии Excel для Mac (теперь 16.10). - person David Crossen; 17.12.2018