2013-03-27 24 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 

(你有此代碼段適應您的需求,當然,使用更好的臨時文件名,刪除新文件後,從外部提供表的列表,等等,但我認爲你明白了)。