Vba 通过CutePDF Writer打印所有图纸

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

我使用的是.ExportAsFixedFormat,但不幸的是,打印的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
谢谢

有几件事:

从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。谢谢