Вы получаете эту ошибку, потому что пытаетесь перезаписать PDF-файл с тем же именем, который открыт в данный момент? Когда я говорю OPEN , я не имею в виду открыть в веб-браузере, но открыть в таких приложениях, как Adobe Reader и т. Д ... Закройте открытый файл и попробуйте снова:)
Либо проверьте в коде, открыт файл или нет, а затем попробуйте написать его. Смотрите этот пример.
Sub PrintButtonClick()
Dim pdfFileName As String
With DataBaseSheet
.Unprotect Password:=pw
pdfFileName = .Cells(5, 5).Value
If pdfFileName = "Print" Then
pdfFileName = .Cells(5, 5) & ".pdf"
If IsPDFOpen(pdfFileName) Then
MsgBox "A pdf with the same name is currently open. Please close that and try again"
Else
.ExportAsFixedFormat Type:=xlTypePDF, FileName:=pdfFileName, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=True, OpenAfterPublish:=True
End If
Else
MsgBox "You cannot print this sheet"
End If
.Cells(2, 2).Locked = False
.Protect Password:=pw
End With
End Sub
'~~> Function to check if the pdf with same name is open
Function IsPDFOpen(FileName As String)
Dim ff As Long, ErrNo As Long
On Error Resume Next
ff = FreeFile()
Open FileName For Input Lock Read As #ff
Close ff
ErrNo = Err
On Error GoTo 0
Select Case ErrNo
Case 70: IsPDFOpen = True
Case Else: IsPDFOpen = False
End Select
End Function