2015-10-13 112 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