Excel 如何将图纸数组保存为具有特定图纸顺序的PDF

Excel 如何将图纸数组保存为具有特定图纸顺序的PDF,excel,pdf-generation,vba,Excel,Pdf Generation,Vba,我有一个包含多个工作表的工作簿,我想选择这些工作表并将其转换为单个PDF文件 我已经编写了以下代码,可以很好地工作并创建文件: Sub Print_Project_Report_To_PDF Dim FilePathandName As String MyDate = Format(DateSerial(Year(Now), Month(Now) - 1, 1), "mmmm yyyy") MyPath = ThisWorkbook.Path & "\"

我有一个包含多个工作表的工作簿,我想选择这些工作表并将其转换为单个PDF文件

我已经编写了以下代码,可以很好地工作并创建文件:

Sub Print_Project_Report_To_PDF

    Dim FilePathandName As String
    MyDate = Format(DateSerial(Year(Now), Month(Now) - 1, 1), "mmmm yyyy")
    MyPath = ThisWorkbook.Path & "\"
    MyFile = "Project Progress Report - " & MyDate & ".pdf"
    FilePathandName = MyPath & MyFile

    ThisWorkbook.Sheets(Array("PR_COVER_PAGE", "PR_SUMMARY", _
    "PR_PROJECT_DETAILS", "PR_INTERNAL RESOURCES", "PR_TIME", _
    "PR_REVENUE_FORECAST_SUMMARY", "PR_ORIGINAL_REVENUE_FORECAST", _
    "PR_ACTUAL_REVENUE_FORECAST", "PR_COSTS", "PR_ISSUES", "MONTHLY FINANCIAL    REPORT", _
    "PG-SC_COVER_LETTER", "PG-SC_CLAIM_SUMMARY", "PG-SC_TRADE", "PG-SC_HYDRAULICS", _
    "PG-SC_MECHANICAL", "PG-SC_MEDICAL_GASES", "PG-SC_ELECTRICAL", "PG-SC_VARIATION", _
    "PG-SC_MONTHLY_CASHFLOW", "PG-MH_COVER_LETTER", "PG-MH_CLAIM_SUMMARY", _
    "PG-MH_TRADE", "PG-MH_HYDRAULICS", "PG-MH_MECHANICAL", "PG-MH_MEDICAL_GASES", _
    "PG-MH_ELECTRICAL", "PG-MH_VARIATION", "PG-MH_MONTHLY_CASHFLOW", "CLIENT_COVER", _
    "CLIENT_SUMMARY", "CLIENT_ISSUES")).Select

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=FilePathandName, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=True

    ThisWorkbook.Sheets("Dashboard").Select

End Sub
问题是PDF文件不是按照我在数组中指定的顺序创建的。它们在工作簿中的显示顺序(从左到右)。它正确地只包括我想要的工作表,而不是按我想要的顺序

我也不想更改工作簿中工作表的顺序,因为它是以特定的渐进方式设置的

有谁能帮我编写代码,让我在文档发布时能够明确页面的顺序


任何帮助都将不胜感激。

我同意@SiddharthRout在问题下面的第一个想法/评论。然而,在非常类似的情况下,当我打印复杂的PowerPoint演示文稿时,我使用


在第一步,我运行该软件并设置“停止打印”选项。然后,您可以将每个工作表单独发送到该软件(以打印工作表的方式),这些工作表将是单独的文档,在列表中以正确的顺序堆叠在开始处。使用特殊功能,您可以将它们匹配到一个文档中,然后将其打印出来。这是一个非常有用且非常可靠的解决方案。

以下是一些示例VBA代码,说明如何将当前工作簿复制到临时文件中,并重新排列工作表列表。打印前请使用以下例行程序:

Sub CopyAndReorder()
    Dim wbCopy As Workbook
    ThisWorkbook.SaveCopyAs "C:\TEMP\XXXX.XLS"
    Set wbCopy = Workbooks.Open("C:\TEMP\XXXX.XLS")
    ReorderSheets wbCopy
End Sub

Sub ReorderSheets(wb As Workbook)
    Dim shNames As Variant, shName As Variant, sh As Worksheet
    shNames = Array("Table3", "Table2", "Table1")
    For Each shName In shNames
        Set sh = wb.Sheets(shName)
        sh.Move After:=wb.Sheets(wb.Sheets.Count)
    Next
End Sub

(您必须根据需要调整此代码段,当然,使用更好的临时文件名,随后删除新文件,从外部提供工作表列表,等等,但我认为您已经明白了这一点)。

按照您想要的顺序重新排列工作表,然后在打印完成后,“不带”关闭工作簿保存,因此您的设置保持原样:)或创建一个新工作簿,并按要求的顺序复制相关工作表,然后打印该工作簿。打印完成后,关闭新创建的工作簿而不保存…是的,有一点,有三个手动步骤-“启动和停止打印”在PDFCreator中,而不是使用VBA自动化打印工作表,“合并文档”在PDFCreator中