2015-10-13 98 views
2

我使用this topic的.ExportAsFixedFormat,但不幸的是,Printed PDF有一些關於格式化和一些符號的問題。通過CutePDF Writer打印所有紙張

我試過CutePDF作家,它是確定的。

現在,我要選擇所有表和打印作爲一個單一的文件,作爲具有相同功能.ExportAsFixedFormat

有沒有什麼捷徑,選擇所有表,並通過VBA打印他們PDF?

我試圖插入一個數組,我用表名填充。但是我有類型不匹配的錯誤。

Private Sub CommandButton9_Click() 

Dim SNarray, i 
Dim Filename As String 

Filename = "E:\TestMe1.pdf" 


ReDim SNarray(1 To Sheets.Count) 
For i = 1 To Sheets.Count 
    SNarray(i) = ThisWorkbook.Sheets(i).name 
Debug.Print SNarray(i) 
Next 



Application.ActivePrinter = "CutePDF Writer on CPW2:" 
Sheets(SNarray()).Select 'Here is the TYPE MISMATCH 
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:="CutePDF Writer on CPW2:", PrintToFile:=True, Collate:=True, prtofilename:=Filename 

End Sub 

謝謝!

+0

你沒有輸入你的數組,嘗試'Dim SNarray()as String'。順便說一句,很高興看到我們可以選擇打印機,我從來沒有這樣做過,但這可能會派上用場! :) – R3uK

+0

@ R3uK仍然相同:)出現同樣的錯誤。 – Stefan0309

+0

什麼錯誤?和哪條線? – R3uK

回答

1

有幾件事情:

從您的陣列括號中的SELECT語句

Sheets(SNarray).Select 

確保所有工作表中是可見的,否則你會得到Select method of Sheets class failed錯誤。這不是你現在得到的結果,但是如果有可能隱藏工作表,你可能需要爲它編寫代碼。另外,如果有人添加圖表工作表或宏工作表,並且您想跳過該工作表,則可能需要爲此編寫代碼。

Sub test() 

    Dim SNarray() As String 
    Dim i As Long 
    Dim lCnt As Long 

    For i = 1 To ThisWorkbook.Sheets.Count 
     If ThisWorkbook.Sheets(i).Type = xlWorksheet And _ 
      ThisWorkbook.Sheets(i).Visible = xlSheetVisible Then 

      lCnt = lCnt + 1 
      ReDim Preserve SNarray(1 To lCnt) 
      SNarray(lCnt) = ThisWorkbook.Sheets(i).Name 
     End If 
    Next i 

    ThisWorkbook.Sheets(SNarray).Select 

End Sub 

最後,當您使用Sheets沒有指定工作簿,你實際上是使用ActiveWorkbook.Sheets如果你是一個標準模塊中,並ThisWorkbook.Sheets如果你的ThisWorkbook模塊中是。只要ThisWorkbook處於活動狀態,您就可以。但是,如果沒有,您的Sheets.Count可能會返回與ThisWorkbook.Sheets(i).Name預期不同的內容。一般來說,總是要限定你的參考。 A With塊對此很有幫助。

Sub test() 

    Dim SNarray() As String 
    Dim i As Long 
    Dim lCnt As Long 

    With ThisWorkbook 
     For i = 1 To .Sheets.Count 
      If .Sheets(i).Type = xlWorksheet And _ 
       .Sheets(i).Visible = xlSheetVisible Then 

       lCnt = lCnt + 1 
       ReDim Preserve SNarray(1 To lCnt) 
       SNarray(lCnt) = .Sheets(i).Name 
      End If 
     Next i 

     .Sheets(SNarray).Select 

    End With 

End Sub 
+0

代碼有效,但是我還有一個問題,當我想看到我的PDF文件時,它說我的PDF已損壞,並且無法打開它。我已經嘗試過使用Adobe Acrobat DC以及Chrome來查看pdf。 – Stefan0309

+0

您應該爲此創建一個新問題。 –

+0

當然,僅僅作爲底線添加時,當我將其放入註釋部分''中時,PrintToFile:= True,prtofilename:= Filename',則打印OK。謝謝! – Stefan0309