2012-07-17 75 views
0

我有一張工作表,經常需要按照工作表和範圍的特定順序打印。我想要做的是將多個範圍和工作表打印到一個PDF文件

  1. 打印出特定的工作表和範圍,以便一個PDF文件。
  2. 將PDF文件作爲特定日期保存到某個文件夾中。

我遇到的障礙是將衆多表單和範圍打印到一個PDF文件中,因爲當前每個工作表或範圍都打印到它自己的單個PDF文件中。

我假設有把所有必要的工作表和範圍的東西像一個數組的方式,然後做一個.PrintOut該變量,但是我還沒有得到這個工作。

我使用Excel 2010中,所以我只是用「的Adobe PDF」打印機。

如何打印多個範圍和工作表,以一個單一的.PDF?

+0

好點,我使用Excel 2010,它已經安裝了Adobe PDF打印機。 – Andy 2012-07-17 18:16:20

回答

1

要打印多張工作表,你可以把工作表的名稱在數組中這樣

Sub PrintArrayOfWorksheets() 

    Dim vaWorksheets As Variant 

    vaWorksheets = Array("Sheet1", "Sheet2", "Sheet3") 

    ThisWorkbook.Worksheets(vaWorksheets).PrintOut 

End Sub 

打印到PDF具有特殊的問題。如果您使用「官方」插件來創建PDF,它可能會像上面那樣工作(抱歉,我現在無法嘗試)。在過去,當我與打印成PDF的其他打印機驅動程序一起工作時,我發現所有(或至少大部分)PageSetup屬性必須在工作表上相同,否則它將在多個作業中打印。這意味着不會縮水,所有的邊際必須是相同的。我不記得導致問題的所有屬性,只是這兩個確實做了,而Orientation肯定沒有。

要限制打印,您需要設置在每張紙上打印區域的範圍。您可以使用PageSetup.PrintArea屬性在代碼中執行此操作。但是如果不改變,那麼一次手動完成也可能會持續下去。

+0

這是向前邁出的一大步,感謝答案,我得到的一個問題是由於某種原因,第一張工作表打印成一個pdf,然後另外兩個工作表打印成一個單獨的pdf。它可能與相同的頁面設置屬性有關。這也不能解決我包含某些用戶定義範圍的問題。 – Andy 2012-07-18 14:21:17

0

Excel 2010有一個打印到pdf功能。如果您的每個工作表都設置爲打印所需的信息,然後突出顯示要打印到一個PDF文件的各種工作表,然後轉到「文件」和「另存爲」,然後選擇另存爲「pdf」 。當您爲每個工作表設置打印時,它應該打印您突出顯示的工作表。

0

這裏有一個方法我都試過......我打印工作表一個PS文件,然後在PS文件雙擊生成PDF。我知道這是一個解決方法,但打印到PS是閃電般的。它需要您在PC上安裝Adobe Acrobat。

Dim GetPath, SavePath, ReportSuffix 
GetPath = ActiveWorkbook.Path & "\" 
ReportSuffix = Range("ReportName").Text & ".ps" 
SavePath = GetPath & ReportSuffix 

Dim PrintSheets 

PrintSheets = Array("Exec1", "Intro1", "Intro2", "Intro3", "Intro4", "Intro5") 

Sheets(PrintSheets).PrintOut Copies:=1, PrintTofile:=True, PrToFileName:=SavePath 
1

查看下面的代碼。這用於使用VBA按鈕以自定義順序打印多個工作表。它可以在點擊按鈕之前打印到選定的打印機上。

在本質上它的作用是選擇所需的紙張,並在工作簿,然後將它們打印結束重新排列它們。打印後將其重新排列爲原始訂單。

Option Explicit 
Private Sub Print_Sheets_InOrder_Click() 
    Dim ary 
    Dim orig() As String 
    Dim a As Variant, fp As String, i As Variant 
    ary = Array("Sheet1", "Sheet4", "Sheet3") 
    fp = ActiveWorkbook.Path 
    ReDim orig(1 To Sheets.Count) 
    For i = 1 To Sheets.Count 
     orig(i) = Sheets(i).Name 
    Next i 
    For Each a In ary 
     Sheets(a).Move after:=Sheets(Sheets.Count) 
    Next a 
    ThisWorkbook.Worksheets(ary).PrintOut 
    For Each a In orig 
     Sheets(a).Move after:=Sheets(Sheets.Count) 
    Next a 
End Sub 
相關問題