如果文件已存在,vba无法从excel导出到pdf

如果文件已存在,vba无法从excel导出到pdf,vba,excel,Vba,Excel,我在保存pdf文件时遇到问题。 如果文件夹中已经存在该文件,并且对其进行了一些更改,则宏将在调试器指向openAfterPulish行时崩溃,并显示以下运行时错误 -2214701887(80071779) “文档未保存。” 我的目标是excel应该自动覆盖旧文件。如果在手动保存文件时,Excel会提示我是否要覆盖该文件,但在运行上述代码时会崩溃。检查该文件是否存在并将其删除。在VBA IDE中,转到“工具”菜单并选择“引用”。选择“Microsoft脚本运行时” 检查它是否存在并删除它。在VB

我在保存pdf文件时遇到问题。 如果文件夹中已经存在该文件,并且对其进行了一些更改,则宏将在调试器指向openAfterPulish行时崩溃,并显示以下运行时错误

-2214701887(80071779)
“文档未保存。”


我的目标是excel应该自动覆盖旧文件。如果在手动保存文件时,Excel会提示我是否要覆盖该文件,但在运行上述代码时会崩溃。

检查该文件是否存在并将其删除。在VBA IDE中,转到“工具”菜单并选择“引用”。选择“Microsoft脚本运行时”


检查它是否存在并删除它。在VBA IDE中,转到“工具”菜单并选择“引用”。选择“Microsoft脚本运行时”


在导出之前,您是否尝试过检查文件是否存在并删除它(如果存在)?这可能就是您的代码不会覆盖它的原因。是的,我尝试过并意识到我收到了错误,因为该文件已在另一个程序中打开,因此它没有保存权限。谢谢你,这样就行了。如果您试图自己删除它,您可以添加一些错误处理来解释该情况。请参阅更改我的答案。在导出之前,您是否尝试过检查文件是否存在并删除它(如果存在)?这可能就是代码不会覆盖它的原因。是的,我尝试过,并意识到我收到错误,因为该文件已在另一个程序中打开,因此它没有保存权限。谢谢你,这样就行了。如果您试图自己删除它,您可以添加一些错误处理来解释该情况。请看我的答案的变化。
Sub printPdf()
Dim strPath As String
Dim myFile As Variant
Dim strFile As String
'On Error GoTo errHandler
Set ws = Application.ActiveSheet

'enter name and select folder for file
' start in current workbook folder
strFile = Replace(Replace(ws.Name, " ", "_"), ".", "_") _
            & ".pdf"
strfolder = ThisWorkbook.Path & "\myPdfFiles"

If Len(Dir(strfolder, vbDirectory)) = 0 Then
  MkDir (strfolder)
End If

strFile = strfolder & "\" & strFile

    ws.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=strFile, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    Call closews


exitHandler:
    Exit Sub
errHandler:
    MsgBox "Could not create PDF file " & Err & ": " & Error(Err)
    Resume exitHandler
End Sub
Dim Response As Integer
Dim fs As FileSystemObject

'We can come back to here after an error.
TryAgain:

 If fs.FileExists(strFile) = True Then
      On Error Goto DeleteError
      fs.DeleteFile(strFile, True)     
 End If

 DeleteError:
 Response = MsgBox("Error deleting file. Do you have it open? Try again?", vbYesNo)
 ' If statement to check if the yes button was selected.
 If Response = vbYes Then
     Goto TryAgain
 Else
     Exit sub
 End If
 On Error Goto 0

 ws.ExportAsFixedFormat _
      Type:=xlTypePDF, _
      Filename:=strFile, _
      Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, _
      IgnorePrintAreas:=False, _
      OpenAfterPublish:=False
 Call closews