Как напечатать несколько PDF-файлов с графиком, управляемым выпадающим списком, используя VBA?

306
user2800

У меня есть лист Excel, который генерирует комбинированную диаграмму для отображения данных о тенденциях в 49 рабочих ячейках производства. Исходные данные диаграммы основаны на ячейках, которые содержат большое количество формул (центр изображения ниже). Я построил лист так, чтобы пользователь выбирал рабочую ячейку из раскрывающегося списка в A5, и все формулы и графики автоматически обновлялись. Источником для проверки данных A5 является столбец в таблице, найденной на другом листе. Я настроил этот лист с областью печати вокруг графика.

Excel Sheet screenshot

Прямо сейчас я могу использовать следующий код, чтобы просмотреть все графики и распечатать их на одной странице PDF:

Sub TestLoopMacro()  Sheets("My Sheet").Select  'SOURCE FOR TIMER CODE: www.TheSpreadsheetGuru.com/the-code-vault Dim StartTime As Double Dim SecondsElapsed As Double  'Remember time when macro starts StartTime = Timer   Dim Count As Integer  For Count = 2 To 50 Range("A5").Select Range("A5").Value = Worksheets("Cells Sheet").Range("E" & Count)  ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "H:\Some Path\Test Exports\" & Worksheets("Cells Sheet").Range("B" & Count) & ".pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _ False Next Count  'Determine how many seconds code took to run SecondsElapsed = Round(Timer - StartTime, 2)  'Notify user in seconds MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation  End Sub 

Я хотел бы иметь возможность печатать графики для всех 49 ячеек в одном PDF. Этот код успешно создает 49 PDF-файлов с уникальными графиками.

Есть ли способ экспортировать их в один и тот же PDF-файл с помощью VBA вместо их последующего слияния с Adobe / аналогичным? Я нашел опубликованные вопросы о попытках сделать похожие вещи, но они включали области печати, экспортируемые из нескольких листов (в отличие от нескольких экземпляров одного листа).

-1
что ты уже испробовал? Цикл FOR звучит как правильное решение, так что вы уже пробовали это? music2myear 5 лет назад 0
Мне удалось заставить петлю работать этим утром. Вопрос был отредактирован с моим текущим кодом состояния. Он успешно проходит по всем 49 ячейкам и создает 49 PDF-файлов с правильными именами. Но я бы хотел, чтобы они были в одном PDF, а не в отдельном. (примечание: время выполнения макроса составляет около 150 секунд) user2800 5 лет назад 0
Посмотрите советы по ускорению макросов Excel. Есть несколько простых вещей (например, отключение перерисовки экрана), которые могут ускорить макросы на несколько порядков. Чтобы создать один PDF-файл, вам нужно будет захватывать выходные данные с каждого шага цикла FOR не как задание на печать, а как предварительную форму, а затем после завершения цикла FOR распечатать весь вывод. music2myear 5 лет назад 0

1 ответ на вопрос

0
Yorik

Acrobat поддерживает javascript, поэтому вы можете выполнить слияние документов, используя Doc.insertPagesметод acrobat .

( https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/#t=Acro12_MasterBook%2FJS_API_AcroJS%2FDoc_methods.htm%23TOC_insertPagesbc-73&r_1_72_72_72_72_ ) _72_72_72_72_72_72_72_72_72_72_72_72_72_72_72_72_72_72_72_72_ )

Кроме того, вы можете Shell.ShellExecuteиспользовать инструмент pdf из командной строки с открытым исходным кодом.