通过CutePDF Writer打印所有工作表

时间:2015-10-13 11:42:20

标签: vba excel-vba pdf-generation excel

我在this topic使用.ExportAsFixedFormat,但不幸的是,Printed PDF在格式化和一些符号方面存在一些问题。

我已经尝试过CutePDF Writer,没关系。

现在,我想选择所有工作表并打印为单个文件,与.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

谢谢!

1 个答案:

答案 0 :(得分: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,则使用Sheets.Count ThisWorkbook模块。只要ThisWorkbook处于活动状态,您就可以了。但如果没有,您的ThisWorkbook.Sheets(i).Name可能会返回与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 块对此有利。

{{1}}