Vba 通过CutePDF Writer打印所有图纸
我使用的是.ExportAsFixedFormat,但不幸的是,打印的PDF在格式和一些符号方面存在一些问题 我试过CutePDF Writer,没问题 现在,我想选择所有工作表并作为单个文件打印,与.ExportAsFixedFormat函数相同 是否有快捷方式选择所有工作表并通过VBA将其打印到PDF 我尝试插入一个数组,并用工作表名称填充该数组。但是我有一个类型不匹配的错误Vba 通过CutePDF Writer打印所有图纸,vba,excel,pdf-generation,Vba,Excel,Pdf Generation,我使用的是.ExportAsFixedFormat,但不幸的是,打印的PDF在格式和一些符号方面存在一些问题 我试过CutePDF Writer,没问题 现在,我想选择所有工作表并作为单个文件打印,与.ExportAsFixedFormat函数相同 是否有快捷方式选择所有工作表并通过VBA将其打印到PDF 我尝试插入一个数组,并用工作表名称填充该数组。但是我有一个类型不匹配的错误 Private Sub CommandButton9_Click() Dim SNarray, i Dim Fil
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
谢谢 有几件事:
从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
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
最后,当您使用Sheets
而不指定工作簿时,如果您在标准模块中,则实际上使用的是ActiveWorkbook.Sheets
,如果您在ThisWorkbook模块中,则使用的是ThisWorkbook.Sheets
。只要此工作簿处于活动状态,您就可以了。但如果不是,则您的Sheets.Count
可能会返回与此工作簿.Sheets(i).Name预期不同的内容。一般来说,请始终限定您的推荐人。带有块的就可以了
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
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
您没有键入数组,请尝试将Dim SNarray()作为字符串键入。顺便说一句,很高兴看到我们可以选择打印机,我从来没有这样做过,但这可能会派上用场!:)@R3uK仍然相同:)出现相同的错误。什么错误?哪一行?@R3uK与前面的行相同..带工作表的行(SNarray())。选择代码可以工作,但我有另一个问题,当我想查看我的PDF文件时,它说我的PDF已损坏,无法打开。我尝试了Adobe Acrobat DC和Chrome来查看pdf。你应该为此创建一个新问题。当然,作为一个底线,当我在注释部分'中输入PrintToFile:=True,prtofilename:=Filename
,然后它会打印OK。谢谢