Save Excel Range as a PDF
/Want to save an Excel Range or Workbook as a PDF?
PDFs are a great way to save data to make sure it will not be tampered with in the future.
I have a Auto Email Excel Sheet As PDF tutorial already on the website. There is also a guide on how to Backup Excel Workbooks. The following is pretty much a duplication, but misses out a few steps and gets to the point.
Sub PDFSaver() ' ' Application.DisplayAlerts = False Application.ScreenUpdating = False Dim report As String report = "C:\Users\Chris Norris\Desktop\DataValidation.pdf" ' Change this 'report = Sheets("PDF").Range("A1").Value - Replace above with this if you want to have save location in workbook - much easier to add a formula to change name based on week etc Sheets("test").Select ' Change This Range("A1:N39").Select ' Change This ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ report, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=False Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
This will overwrite the file, unless you change the name manually. It would be easy to link to the name in a cell, and apply whatever formula you want to make the name dynamically change each time. However if you want to do it with VBA, test this one out!
Public Function UserNamePath() UserNamePath = Environ$("UserName") End Function Sub PDFSaver() ' ' Application.DisplayAlerts = False Application.ScreenUpdating = False Dim report As String Dim ReportName As String Dim UserName As String Dim TimeStamp As String ReportName = "Secrets of Life" ' Change this UserName = UserNamePath() TimeStamp = Format(Now(), "(yyyy-mm-dd hhmm)") report = ReportName & " - Saved By " & UserName & " at " & TimeStamp Sheets("test").Select ' Change This Range("A1:N39").Select ' Change This ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ report, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ :=False, OpenAfterPublish:=False Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
Magic, right?
Same concept can apply to other formats - for example if you want to just backup the workbook use - ThisWorkbook.SaveCopyAs Filename:=”LOCATION“ instead of the PDF paragraph.