How can I fix VBA code so that a spreadsheet exports to PDF

Posted on 2015-01-15
Medium Priority
Last Modified: 2015-01-15
Hello Experts,

Im trying to help a user in my office with a Excel 2010 spreadsheet. The spreadsheet was originally created on a MAC. There is visual basic code that allows the spreadsheet to be saved as a PDF file. I am not proficient with visual basic. When I try to run it I get Run Time 1004: Method 'SaveAs' of object' _Workbook' failed. Please see the code below:

 Sub ExportPDF()
' SavePDF Macro

    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    'Define names
    CurrentMonth = Sheets("DropDown").Range("L2").Value
    QuarterNumber = Sheets("DropDown").Range("L1").Value
    AttorneyName = Sheets("MonthlyReport").Range("B3").Value
    CurrentYear = Sheets("MonthlyReport").Range("B1").Value
    'Clear and set print areas
    ActiveSheet.PageSetup.PrintArea = ""
    Application.Goto Reference:=QuarterNumber
    ActiveSheet.PageSetup.PrintArea = Selection.Address
    ActiveSheet.PageSetup.PrintArea = ""
    Application.Goto Reference:=CurrentMonth
    ActiveSheet.PageSetup.PrintArea = Selection.Address
    ActiveSheet.PageSetup.PrintArea = ""
    Application.Goto Reference:="PI_" & CurrentMonth
    ActiveSheet.PageSetup.PrintArea = Selection.Address
    ActiveSheet.PageSetup.PrintArea = ""
    Application.Goto Reference:="ES_" & CurrentMonth
    ActiveSheet.PageSetup.PrintArea = Selection.Address

    'Export to PDF
    ActiveWorkbook.SaveAs Filename:=AttorneyName & "_" & CurrentYear & "_" & CurrentMonth & ".pdf", FileFormat:=xlPDF

    'ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF _
    ', Filename:=AttorneyName & "_" & CurrentYear & "_" & CurrentMonth & ".pdf" _
    ', Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True


I am also attaching the spreadsheet.  Any help you can provide will be greatly appreciated.

Thanks so much.
Question by:jselaya
LVL 18

Expert Comment

ID: 40551571
I don't think that the "save as PDF" is part of the standard build of Office on Windows.

I have it on my File menu, but I think that's only because I have Acrobat (full version, not reader) installed on my machine.

If you don't have Acrobat (on Windows) you'll need to do it like this:

 ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\Users\YourFileNameHere.pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=True
LVL 85

Accepted Solution

Rory Archibald earned 2000 total points
ID: 40551573
I suggest you comment out this bit:
ActiveWorkbook.SaveAs Filename:=AttorneyName & "_" & CurrentYear & "_" & CurrentMonth & ".pdf", FileFormat:=xlPDF

Open in new window

and uncomment this bit:
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF _
    ', Filename:=AttorneyName & "_" & CurrentYear & "_" & CurrentMonth & ".pdf" _
    ', Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

Open in new window


Author Closing Comment

ID: 40551611
Thanks so much. It now works!

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

This article describes how to use a set of graphical playing cards to create a Draw Poker game in Excel or VB6.
Manually copying shapes and their assigned macros one by one to a new location can be tedious, but if you use the Excel utility workbook attached to this article, the process will be much quicker and easier.
This Micro Tutorial demonstrate the bugs in Microsoft Excel for Mac with Pivot Charts.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa‚Ķ

597 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question