* Это гостевой пост Райана Уэллса, коллеги-блоггера и блестящего разработчика VBA. *
Если вы работаете с Excel, вас, несомненно, просили составить резюме вашей работы.
Отчеты о продажах, счета-фактуры, прогнозы, графики и т. Д.
Вы знаете, что общего у всех этих документов? Они отлично смотрятся в формате PDF. Знаете что еще? Руководство любит PDF-файлы!
Конвертировать Excel в PDF
В этом руководстве я покажу вам, как использовать Excel VBA для преобразования всех видов объектов Excel в файлы PDF:
Я собираюсь представить каждый макрос с некоторыми комментариями. Таким образом, вы сможете быстро их найти, скопировать в свой редактор VBA и использовать.
Когда вы запускаете любой из этих макросов, появляется диалоговое окно «Сохранить как» с вопросом, где вы хотите сохранить PDF-файл. Имя по умолчанию включает дату и метку времени при выполнении макроса в формате ггггммдд_ччммсс.
Давайте перейдем к делу.
Вот макросы:
Распечатать выделенный фрагмент в PDF
Это мой личный фаворит. Этот макрос преобразует ячейки, которые вы активно выбрали, в PDF.
Если у вас выбрана только одна ячейка, макрос VBA достаточно умен, чтобы понять, что вы, вероятно, не хотите преобразовывать только одну ячейку, поэтому он просит вас выбрать диапазон, который вы хотите преобразовать:
Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' РАЗРАБОТЧИК: Райан Уэллс 'ОПИСАНИЕ: Распечатать текущий выбранный диапазон в PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Then Set ThisRng = Application.InputBox ( «Выбрать диапазон», «Получить диапазон», Тип: = 8) Else Set ThisRng = Selection End If 'Запрос места сохранения strfile = "Selection" & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Файлы PDF (* .pdf), * .pdf", _ Title: = «Выберите папку и имя файла для сохранения в формате PDF») Если myfile «False», то 'сохраните как PDF ThisRng.ExportAsFixedFormat Тип: = xlTypePDF, Имя файла: = _ myfile, Качество: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox «Файл не выбран. PDF не будет сохранен», vbOKOnly, «Файл не выбран» End If End Sub
После выбора диапазона и нажатия кнопки «ОК» появится диалоговое окно, в котором вы можете выбрать место для сохранения PDF-файла.
Он автоматически выберет дату и время на системных часах и добавит их к имени файла.
Распечатать одну таблицу в PDF
Многие опытные пользователи Excel хранят свои данные в организованных таблицах. На самом деле, Сумит Бансал настолько любит таблицы Excel, что называет их скрытым сокровищем в Excel.
Этот макрос печатает выбранную вами таблицу в PDF. Когда вы запустите макрос, он запросит у вас имя таблицы, которую вы хотите сохранить.
Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' РАЗРАБОТЧИК: Райан Уэллс 'ОПИСАНИЕ: Распечатать выбранную вами таблицу в PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False' Войдите в таблицу имя, которое вы хотите сохранить strTable = InputBox ("Какое имя таблицы вы хотите сохранить?", "Введите имя таблицы") 'Таблица, которую вы хотите сохранить If Trim (strTable) = "" Then Exit Sub' Запрос на сохранение расположение strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Файлы PDF (* .pdf), * .pdf", _ Title: = "Выберите папку и имя файла для сохранения как PDF") Если myfile "False", то 'сохранить как диапазон PDF (strTable) .ExportAsFixedFormat Тип : = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Файл не выбран. PDF не будет сохранено ", vbOKOnly," Файл не выбран "Конец, если Application.DisplayAlerts = False LetsContinue: с приложением .ScreenUpdating = True .DisplayAlerts = True Конец с выходом Sub End Sub
После того, как вы введете имя таблицы и нажмете «ОК», появится диалоговое окно, в котором вы можете выбрать место для сохранения PDF-файла.
Он автоматически выберет дату и время на системных часах и добавит их к имени файла.
Распечатать все таблицы в отдельные PDF-файлы
Если в вашей электронной таблице несколько таблиц, и вам нужно сохранить каждую из них в отдельный PDF-файл, вы можете запустить этот код VBA.
Когда вы запустите этот макрос, появится диалоговое окно с просьбой выбрать папку, в которой вы хотите сохранить свои PDF-файлы.
После того, как вы выберете папку, макрос сохранит каждую таблицу в PDF-файле, при этом имя таблицы будет удобно отображаться в заголовке PDF-файла.
Sub PrintAllTablesToPDFs () 'ПОДПРОГРАММА: PrintAllTablesToPDFs' РАЗРАБОТЧИК: Райан Уэллс 'ОПИСАНИЕ: Распечатать каждую таблицу в вашей электронной таблице в другой PDF-файл. Как вариант Dim tbl As ListObject Dim sht Как рабочий лист с Application.FileDialog (msoFileDialogFolderPicker) .Title = "Где вы хотите сохранить свой PDF?" .ButtonName = "Сохранить здесь" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then ', если нажата кнопка OK sfolder = .SelectedItems (1) Else End End If End With For Each sht In ThisWorkbook.Worksheets For each tbl In sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Next tbl Next sht End Sub
Распечатать все листы в один PDF-файл
Не знаю, как вы, но в моей работе мы должны хранить PDF-копии почти всех наших электронных таблиц. Мы прилагаем копии наших электронных таблиц в формате PDF к нашим проектным расчетам. Эти PDF-файлы раньше преобразовывались в микрофиши и помещались в хранилище для долгосрочного хранения. Вы знаете, на случай, если случится апокалипсис.
Если вы окажетесь в подобной ситуации, неплохо иметь возможность автоматически конвертировать все листы в вашей электронной таблице в один PDF-файл. Вот макрос VBA, который сделает это:
Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' РАЗРАБОТЧИК: Райан Уэллс 'ОПИСАНИЕ: Объедините все ваши рабочие листы в один PDF-файл Dim strSheets () As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile names в массив для каждого sh в ActiveWorkbook.Worksheets Если sh.Visible = xlSheetVisible Then ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Then 'Диаграммы не найдены. Ошибка перфорации MsgBox «Невозможно создать PDF-файл, поскольку листы не найдены.», «Листы не найдены» Выйти из подпункта End If 'Запрос места сохранения strfile = "Sheets" & "_" _ & Format (Now (), " ггггммдд_ччммсс ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" Файлы PDF (* .pdf), * .pdf ", _ Title: = "Выберите папку и имя файла для сохранения в формате PDF") Если myfile "False", то 'сохраните как PDF ThisWorkbook.Sheets (strSheets). Выберите ActiveSheet.ExportAsFixedFormat Тип: = xlTypePDF, Имя файла: = _ myfile, Качество: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox «Файл не выбран. PDF не будет сохранен», vbOKOnly, «Файл не выбран» End If End Sub
Распечатать листы диаграмм в PDF
Этот макрос преобразует все ваши таблицы диаграмм в один PDF-файл, но не объекты диаграммы! Под листами диаграмм я подразумеваю диаграммы, у которых есть собственная вкладка в вашем списке вкладок электронной таблицы:
Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' РАЗРАБОТЧИК: Райан Уэллс 'ОПИСАНИЕ: Объедините все листы диаграмм в один PDF Dim strSheets () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim Сохранять имена таблиц диаграмм в массив для каждого ch в ActiveWorkbook.Charts ReDim Preserve strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Next ch If icount = 0 Then 'Диаграммы не найдены. Ошибка перфорации MsgBox «Невозможно создать PDF-файл, потому что не найдены таблицы диаграмм.»,, «Таблицы диаграмм не найдены» Выйти из подпункта End If 'Запрос места сохранения strfile = "Charts" & "_" _ & Format (Now () , "ггггммдд_ччммсс") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Файлы PDF (* .pdf), * .pdf ", _ Title: =" Выберите папку и имя файла для сохранения в формате PDF ") Если myfile" False ", то 'сохраните как PDF ThisWorkbook.Sheets (strSheets). Выберите ActiveSheet.ExportAsFixedFormat Тип: = xlTypePDF, Имя файла: = _ myfile, Качество: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox «Файл не выбран. PDF не будет сохранен», vbOKOnly, «Файл не выбран» End If End Sub
Печать объектов диаграммы в PDF
Этот макрос сохраняет все ваши обычные диаграммы - объекты диаграмм - в один PDF-файл. Независимо от того, на каком листе находится ваша диаграмма, она будет захвачена и сохранена в формате PDF.
В окончательном PDF-файле будет только одна диаграмма на странице.
Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' РАЗРАБОТЧИК: Райан Уэллс 'ОПИСАНИЕ: объединить все объекты диаграммы в один PDF Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dimdari dimfile Application = False Установить wsTemp = Sheets.Add tp = 10 с wsTemp для каждого ws в ActiveWorkbook.Worksheets Если ws.Name = wsTemp.Name, то Перейти к nextws: для каждого chrt в ws.ChartObjects chrt.Copy wsTemp.Range ("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 Если Selection.TopLeftCell.Row> 1, то ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End Если tp = tp + Selection.Height + 50 Next nextws: Next ws End With 'Запрос места сохранения strfile = "Charts" & "_" _ & Format (Now (), "yyyymmdd \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Файлы PDF (* .pdf), * .pdf", _ Title: = "Выбрать папку der и имя файла для сохранения как PDF ") Если myfile False, то 'сохранить как PDF wsTemp.ExportAsFixedFormat Тип: = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = FalsePublish: OpenAfter Истинно «Остальное» MsgBox «Файл не выбран. PDF не будет сохранен », vbOKOnly,« Файл не выбран »Конец, если Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True Конец с выходом Sub End Sub
Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев, где мы с Райаном будем ждать вас.
Вам также могут понравиться следующие руководства по Excel:
- Как встроить файл PDF в лист Excel.
- Циклы Excel VBA: для «Далее», «Сделать пока», «Сделать до», «Для каждого» (с примерами).
- Как записать макрос в Excel
- Как объединить несколько книг в одну книгу Excel.
- Как запустить макрос в Excel.
- Как создать и использовать надстройку Excel.
- Обработка ошибок Excel VBA
- Разделить каждый лист Excel на отдельные файлы
- Как импортировать XML-файл в Excel | Конвертировать XML в Excel
Об авторе: Райан Уэллс - инженер-ядерщик и профессиональный разработчик VBA. Он публикует свои простые для понимания руководства по Excel VBA, чтобы помочь другим писать более качественные макросы. Помимо обучения VBA, Райан является ведущим разработчиком нескольких надстроек Excel. Вы можете найти его уроки на WellsR.com.