我有一个包含多个工作表的工作簿,我想选择它并转换为单个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文件不是按照我在数组中指定的顺序创建的。它们按照它们在工作簿中出现的顺序(从左到右)。它正确地只包括我想要的纸张,但不是我想要的顺序。
我不想更改工作簿中工作表的顺序,因为它是以特定的渐进方式设置的。
任何人都可以帮我提供代码,这些代码可以让我在发布文档时具体说明工作表的顺序吗?
非常感谢任何帮助。
答案 0 :(得分:0)
我同意@SiddharthRout在问题下面的第一个想法/评论。但是,在我打印复杂的PowerPoint演示文稿的情况非常相似的情况下我使用
在第一步,我运行该软件并设置'停止打印'选项。您可以将每个工作表单独发送到该软件(以您打印工作表的方式),这些工作表将是开头时以正确顺序堆叠在列表中的单独文档。使用特殊功能,您可以将它们匹配到一个文档然后打印它。这是非常有用且非常可靠的解决方案。
答案 1 :(得分: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
(您必须根据需要调整此代码段,当然,使用更好的临时文件名,之后删除新文件,提供外部表单等,但我认为您明白了)。