Gabe Carvajal
Gabe Carvajal

Reputation: 65

Save each worksheet from workbook as individual pdfs

What I have is a workbook with all the sales from all the sales associates in "Sheet", and in the other sheets the sheets are named by the sales person number ("41", "51", "88", etc.) with their sales. What I want the macro to do is take each worksheet and save as a pdf with "worksheet name" & "Filename"

My question is related to this post, but for some reason my version is not saving the pdf's properly.

excel vba - save each worksheet in workbook as an individual pdf

So what I want is simple: take each worksheet and save into it's own unique pdf. The problem I'm having is that the macro is saving each individual sheet with the right filename, but when I open the pdf, its the same sales associate for each pdf.

here is the code:

Option Explicit

Sub WorksheetLoop()

Dim wsA     As Worksheet
Dim wbA     As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile  As Variant
Dim WS_Count As Integer
Dim I       As Integer

' Set WS_Count equal to the number of worksheets in the active workbook.
Set wbA = ActiveWorkbook
WS_Count = wbA.Worksheets.Count
strPath = wbA.Path
strTime = Format(Now(), "yyyymmdd\_hhmm")

'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
    strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"

' Begin the loop.
For I = 1 To WS_Count

    'replace spaces and periods in sheet name
    strName = Replace(wbA.Worksheets(I).Name, " ", "")
    strName = Replace(strName, ".", "_")

    'create default name for savng file
    strFile = strName & "_" & strTime & ".pdf"
    myFile = strPath & strFile

    Debug.Print myFile

    'export to PDF if a folder was selected
    If myFile <> "False" Then
        ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=myFile, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=False
        'confirmation message with file info
        MsgBox "PDF file has been created: " _
               & vbCrLf _
               & myFile
    End If

Next I

End Sub

let me know if you need any additional details

Upvotes: 1

Views: 1526

Answers (2)

Kresimir L.
Kresimir L.

Reputation: 2441

You should first activate each sheet before you export it as PDF. Try:

Option Explicit

Sub WorksheetLoop()

Dim wsA     As Worksheet
Dim wbA     As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile  As Variant
Dim WS_Count As Integer
Dim I       As Integer

' Set WS_Count equal to the number of worksheets in the active workbook.
Set wbA = ActiveWorkbook
WS_Count = wbA.Worksheets.Count
strPath = wbA.Path
strTime = Format(Now(), "yyyymmdd\_hhmm")

'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
    strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"

' Begin the loop.
For Each wsA In wbA.Worksheets
    wsA.Activate
    'replace spaces and periods in sheet name
    strName = Replace(wsA.Name, " ", "")
    strName = Replace(strName, ".", "_")

    'create default name for savng file
    strFile = strName & "_" & strTime & ".pdf"
    myFile = strPath & strFile

    Debug.Print myFile

    'export to PDF if a folder was selected
    If myFile <> "False" Then
        ActiveSheet.ExportAsFixedFormat _
                Type:=xlTypePDF, _
                Filename:=myFile, _
                Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, _
                IgnorePrintAreas:=False, _
                OpenAfterPublish:=False
        'confirmation message with file info
        MsgBox "PDF file has been created: " _
               & vbCrLf _
               & myFile
    End If

Next wsA

End Sub

Upvotes: 1

Kashif Qureshi
Kashif Qureshi

Reputation: 1490

you need to activate Activate each worksheet before you print them into pdf. Try this

 ' Begin the loop.
     For Each wsA In wbA.Sheets

        wsA.Activate
        'replace spaces and periods in sheet name
        strName = Replace(wsA.Name, " ", "")
        strName = Replace(strName, ".", "_")

        'create default name for savng file
        strFile = strName & "_" & strTime & ".pdf"
        myFile = strPath & strFile

        Debug.Print myFile

        'export to PDF if a folder was selected
        If myFile <> "False" Then
             ActiveSheet.ExportAsFixedFormat _
                        Type:=xlTypePDF, _
                        Filename:=myFile, _
                        Quality:=xlQualityStandard, _
                        IncludeDocProperties:=True, _
                        IgnorePrintAreas:=False, _
                        OpenAfterPublish:=False
            'confirmation message with file info
            MsgBox "PDF file has been created: " _
              & vbCrLf _
              & myFile

        End If

     Next

Upvotes: 2

Related Questions