2013-03-27 48 views
0

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

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

任何人都可以帮助我的代码,这将允许我具体的文件发布时的工作表顺序?

任何帮助将不胜感激。

+2

按照您需要的顺序重新排列工作表,然后一旦完成打印,关闭工作簿“WITHOUT”保存,因此您的安装保持原样:) – 2013-03-27 05:58:14

+1

或者创建一个新的工作簿并将相关工作表复制到然后打印该工作簿。一旦完成打印,关闭新创建的工作簿而不保存... – 2013-03-27 06:02:33

回答

0

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

PDFCreator application

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

+0

这将是一个手动过程,对吗? – 2013-03-27 07:26:05

+0

是的,有一点,有三个手动步骤 - 在PDFCreator中“启动和停止打印”,而不是使用VBA自动化的打印表格,在PDFCreator中“合并文档” – 2013-03-27 07:31:09

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 

(你有此代码段适应您的需求,当然,使用更好的临时文件名,删除新文件后,从外部提供表的列表,等等,但我认为你明白了)。