打印为PDF不起作用

时间:2018-08-24 17:48:17

标签: excel vba excel-vba

我的代码假设要检查单元格j2中的电子邮件地址,如果找到,将特定的选项卡转换为pdf并将其保存在用户选择的文件路径中。在我制作宏的原始工作簿上,它可以正常工作。当我复制代码并尝试运行它时,它将打印到pdf不同的工作表中,这些工作表在j2中甚至没有任何带有不正确选项卡名称的内容。在打印pdf行上运行代码时,我不断收到运行时错误5无效的过程调用或参数。

Sub SaveSheetsAsPDF()

Dim DestFolder As String
Dim PDFFile As String
Dim wb As Worksheet
Dim AlwaysOverwritePDF As Boolean

'Speed up macro
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual


'Prompt for file destination
With Application.FileDialog(msoFileDialogFolderPicker)

    If .Show = True Then

        DestFolder = .SelectedItems(1)

    Else

        MsgBox "You must specify a folder to save the PDF into." & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Must Specify Destination Folder"

        Exit Sub

    End If

End With

'Create new PDF file name including path and file extension

For Each wb In ThisWorkbook.Worksheets


'Test j2 for a mail address
If wb.Range("J2").Value Like "?*@?*.?*" Then

PDFFile = DestFolder & Application.PathSeparator & wb.Name & "-" & Format(Date, "mmyy") & ".pdf"

'If the PDF already exists
If Len(Dir(PDFFile)) > 0 Then

    If AlwaysOverwritePDF = False Then

        OverwritePDF = MsgBox(PDFFile & " already exists." & vbCrLf & vbCrLf & "Do you want to overwrite it?", vbYesNo + vbQuestion, "File Exists")

        On Error Resume Next
        'If you want to overwrite the file then delete the current one
        If OverwritePDF = vbYes Then

            Kill PDFFile

        Else

            MsgBox "OK then, if you don't overwrite the existing PDF, I can't continue." _
            & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Exiting Macro"

            Exit Sub

        End If

    Else

        On Error Resume Next
        Kill PDFFile

    End If

    If Err.Number <> 0 Then

        MsgBox "Unable to delete existing file.  Please make sure the file is not open or write protected." _
            & vbCrLf & vbCrLf & "Press OK to exit this macro.", vbCritical, "Unable to Delete File"

        Exit Sub

    End If

    End If

End If

'Prints PDF
wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:=PDFFile, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

Next wb

    MsgBox "All Files Have Been Converted!"

ResetSettings:
    'Resets optimization settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

End Sub

编辑:同样,并非工作簿上的所有工作表都需要转换。因此,只有需要转换的工作表才会在J2中具有电子邮件地址。

0 个答案:

没有答案