0

我有一个包含多张工作表的工作簿,我想选择并转换为单个 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 文件不是按照我在数组中指定的顺序创建的。它们按照它们在工作簿中出现的顺序(从左到右)。它正确地只包括我想要的床单,但不是我想要的顺序。

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

任何人都可以帮助我编写代码,让我在发布文档时能够具体说明工作表的顺序吗?

任何帮助将不胜感激。

4

2 回答 2

0

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

PDFCreator 应用程序

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

于 2013-03-27T06:57:05.977 回答
0

这是一些示例 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

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

于 2013-03-27T07:40:27.483 回答