我在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
谢谢!
答案 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}}