Конвертиране на Excel в PDF с помощта на VBA - единственото ръководство, от което ще се нуждаете

*Това е гост пост от Райън Уелс, колега блогър и блестящ разработчик на VBA.*

Ако работите с Excel, несъмнено сте помолени да създадете обобщения на работата си.

Отчети за продажби, фактури, прогнози, графици, вие го казвате.

Знаете ли какво общо имат всички тези документи? Те изглеждат страхотно под формата на PDF. Знаеш ли какво друго? Ръководството обича PDF файловете!

Конвертиране на Excel в PDF

В този урок ще ви покажа как да използвате Excel VBA за преобразуване на всички видове Excel обекти в PDF файлове:

Ще представя всеки от макросите с някои коментари. По този начин ще можете бързо да ги намерите, да ги копирате във вашия VBA редактор и да ги използвате.

Когато изпълните някой от тези макроси, ще се появи диалогов прозорец Запиши като, който ще ви попита къде искате да запишете вашия PDF. Името по подразбиране включва датата и часа, когато сте изпълнили макроса във формат ггггммдд_ххммсс.

Нека да преминем директно към него.

Ето макросите:

Печат на избор към PDF

Този е моят личен фаворит. Този макрос ще преобразува клетките, които сте избрали активно, в PDF.

Ако сте избрали само една клетка, макросът VBA е достатъчно умен, за да осъзнае, че вероятно не искате да конвертирате само една клетка, така че ви моли да изберете диапазона, който искате да конвертирате:

Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' DEVELOPER: Ryan Wells 'ОПИСАНИЕ: Отпечатайте избрания от вас диапазон в PDF Dim DimRen As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Тогава SetRng = Application.InputBox ( "Изберете диапазон", "Вземете диапазон", Тип: = 8) Иначе задайте ThisRng = Избор Край Ако "Подкани за запазване на местоположението strfile =" Избор "&" _ "_ & Форматиране (Сега ()," ггггммдд_ххммс ") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF файлове ( *.pdf), *.pdf", _ Заглавие: = „Изберете име на папка и файл, за да ги запишете като PDF“) Ако myfile „False“ Тогава „запазете като PDF ThisRng.ExportAsFixedFormat Тип: = xlTypePDF, Име на файл: = _ myfile, Качество: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: False, OpenAfterPublish: = True Else MsgBox "Не е избран файл. PDF няма да бъде запазен", vbOK Само, "Не е избран файл" Край, ако край Sub

След като изберете диапазона и щракнете върху OK, той ще покаже диалогов прозорец, в който можете да изберете къде искате да запазите PDF файла.

Той автоматично ще избере датата и часа от часовника на вашата система и ще ги добави към името на файла.

Отпечатайте една таблица в PDF

Много потребители на Excel с опит съхраняват данните си в организирани таблици. Всъщност самият Sumit Bansal харесва таблиците на Excel толкова много, че ги нарича скрито съкровище в Excel.

Този макрос отпечатва таблица по ваш избор в PDF. Когато стартирате макроса, той ще ви подкани за името на таблицата, която искате да запишете.

Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' DEVELOPER: Ryan Wells 'ОПИСАНИЕ: Отпечатайте таблица по ваш избор в PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpddating = False' Влезте в таблицата име, което искате да запишете strTable = InputBox ("Какво е името на таблицата, която искате да запишете?", "Въведете име на таблица") 'Таблица, която искате да запишете If Trim (strTable) = "" След това излезте от подкана местоположение strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF файлове ( *.pdf), *.pdf", _ Заглавие: = "Изберете име на папка и файл, за да ги запишете като PDF") Ако myfile "False" След това "запишете като PDF диапазон (strTable) .ExportAsFixedFormat Тип : = xlTypePDF, Име на файл: = myfile, Качество: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Няма да бъде избран файл. PDF няма да бъде избран. запазено ", vbOKOnly," Не е избран файл "Край, ако Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End с изход Sub Sub Sub

След като въведете името на таблицата и щракнете върху OK, тя ще покаже диалогов прозорец, в който можете да изберете къде искате да запазите PDF файла.

Той автоматично ще избере датата и часа от часовника на вашата система и ще ги добави към името на файла.

Отпечатайте всички таблици за отделни PDF файлове

Ако вашата електронна таблица има няколко таблици и трябва да запишете всяка в отделен PDF файл, можете да стартирате този VBA код.

Когато стартирате този макрос, ще се появи диалогов прозорец с молба да изберете папката, в която искате да запишете вашите PDF файлове.

След като изберете вашата папка, макросът ще запише всяка таблица в PDF с име на таблицата, което удобно се появява в заглавието на PDF файла.

Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs' DEVELOPER: ОПИСАНИЕ на Райън Уелс: Отпечатайте всяка таблица в електронната си таблица в различен PDF Dim strTables () As String Dim strfile As String Dim ch As Object, sh As Работен лист Dim Като вариант Dim tbl Като ListObject Dim sht Като работен лист с Application.FileDialog (msoFileDialogFolderPicker) .Title = "Къде искате да запишете вашия PDF?" .ButtonName = "Запазване тук" .InitialFileName = ThisWorkbook.Path If .Show = -1 Тогава 'ако се натисне OK sfolder = .SelectedItems (1) Else End End If End With За всеки sht В ThisWorkbook.Worksheets За всеки tbl В 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 Следващ tbl Следващ sht End Sub

Отпечатайте всички листове в един PDF

Не знам за вас, но в моята работа трябва да запазим PDF копия на почти всички наши електронни таблици. Ние добавяме PDF копията на нашите електронни таблици към нашите проектни изчисления. Тези PDF файлове се преобразуваха в микрофиш и се затваряха за дългосрочно съхранение. Знаеш ли, в случай, че апокалипсисът се е случил.

Ако попаднете в подобна ситуация, хубаво е да можете автоматично да конвертирате всички листове в електронната си таблица в един PDF. Ето един VBA макрос, който ще направи точно това:

Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' DEVELOPER: Ryan Wells 'ОПИСАНИЕ: Комбинирайте всичките си работни листове в един PDF Dim strSheets () As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile Sheart As Variant' към масив за всеки sh в ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Тогава ReDim Запазва strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Тогава 'Няма намерени диаграми. Грешка при перфориране MsgBox "PDF не може да бъде създаден, защото не са намерени листове.",, "Не са намерени листове" Излез от подкрая Ако "Подкани за запазване на местоположението strfile =" Sheets "&" _ "_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" PDF файлове ( *.pdf), *.pdf ", _ Заглавие: = "Изберете име на папка и файл за запазване като PDF") Ако myfile "False" След това "запишете като PDF ThisWorkbook.Sheets (strSheets). Изберете ActiveSheet.ExportAsFixedFormat Тип: = xlTypePDF, Име на файл: = _ myfile, Качество: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Няма избран файл. PDF няма да бъде запазен", vbOKOnly, "Не е избран файл" Край, ако End Sub

Отпечатайте таблици в PDF

Този макрос преобразува всичките ви таблици с диаграми в един PDF - но не и вашите обекти в диаграмата! Под листове с диаграми имам предвид диаграмите, които имат свой собствен раздел в списъка ви с раздели на електронни таблици:

Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' DEVELOPER: Ryan Wells 'ОПИСАНИЕ: Комбинирайте всички листове с диаграми в един PDF Dim strSheets () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim my Запазване на имената на диаграми в масив за всеки ch В ActiveWorkbook.Charts ReDim Запазване на strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Следващ ch Ако icount = 0 Тогава 'Няма намерени диаграми. Грешка при пробиване MsgBox "PDF не може да бъде създаден, защото не са намерени таблици с диаграми.",, "Не са намерени листове с диаграми" Излез от подкрайника Ако "Подкани за запазване на местоположението strfile =" Диаграми "&" _ "_ & Форматиране (Сега () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF файлове ( *.pdf), *.pdf ", _ Заглавие: =" Изберете име на папка и файл за запазване като PDF ") Ако myfile" False "След това 'запазете като PDF ThisWorkbook.Sheets (strSheets). Изберете ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Качество: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Не е избран файл. PDF няма да бъде запазен", vbOKOnly, "Не е избран файл" End If End Sub

Отпечатайте обекти на диаграма в PDF

Този макрос записва всички ваши нормални диаграми - обекти на диаграми - в един PDF файл. Независимо на кой работен лист е вашата диаграма, тя ще бъде взета и записана в PDF.

В крайния PDF ще има само една диаграма на страница.

Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' DEVELOPER: ОПИСАНИЕ на Райън Уелс: Комбинирайте всички обекти на диаграма в един PDF Dim ws като работен лист, wsTemp като работен лист Dim chrt като ChartObject Dim tp като дълъг оцветяване на strfile As String String Asc = False Set wsTemp = Sheets.Add tp = 10 With wsTemp За всеки ws В ActiveWorkbook.Worksheets Ако ws.Name = wsTemp.Name Тогава GoTo 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 ws Завършва с „Подкани за запазване на местоположението strfile =" Диаграми "&" _ "_ & Форматиране (Сега ()," yyyymmdd \ _hhmmss ") _ &" .pdf "strfile = ActiveWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF файлове ( *.pdf), *.pdf", _ Заглавие: = "Изберете Fol der и Име на файл за запазване като PDF ") Ако myfile False След това" запишете като PDF wsTemp.ExportAsFixedFormat Тип: = xlTypePDF, Име на файл: = myfile, Качество: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, = False, = False, Вярно „Друго“ MsgBox „Не е избран файл. PDF няма да бъде запазен ", vbOKOnly," Не е избран файл "Край, ако Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End с Exit 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.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave