将工作簿中的每个工作表保存为单独的pdf

时间:2017-09-14 20:28:01

标签: excel vba excel-vba pdf

我所拥有的是一本工作簿,其中所有销售人员的所有销售均来自" Sheet",而在其他工作表中,工作表由销售人员编号命名(" 41&#34 &," 51"," 88"等)与他们的销售。我希望宏做的是将每个工作表保存为pdf,其中包含"工作表名称" &安培; "文件名"

我的问题与这篇文章有关,但由于某种原因我的版本没有正确保存pdf。

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

所以我想要的很简单:拿走每个工作表并保存到它自己独特的pdf中。我遇到的问题是宏正在使用正确的文件名保存每个单独的工作表,但是当我打开pdf时,它是每个pdf的相同销售助理。

这是代码:

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

如果您需要任何其他详细信息,请与我们联系

2 个答案:

答案 0 :(得分:2)

在将每个工作表打印成pdf之前,需要激活Activate。试试这个

 ' 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

答案 1 :(得分:1)

在将每个工作表导出为PDF之前,应先激活每个工作表。尝试:

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