ExportAsFixedFormat генерирует ошибку времени выполнения: файл только для чтения - PullRequest
1 голос
/ 27 марта 2019

Когда пользователь нажимает кнопку «Печать», активная таблица должна быть напечатана в формате PDF.

У меня проблема с методом .ExportAsFixedFormat.Я получаю следующее сообщение об ошибке:

Ошибка времени выполнения '-2147018887 (80071779)': ошибка автоматизации, файл доступен только для чтения

Это код:

Sub PrintButtonClick()
'++++Print to PDF Function++++
'For more Information: https://docs.microsoft.com/de-de/office/vba/api/excel.worksheet.exportasfixedformat
'DEPENDS ON LOCATION OF HEADING (Heading row index/column index)
'allows to print material information, NO general list of materials

    DataBaseSheet.Unprotect password:=pw

    'PRINT PROCEDURE:
    If DataBaseSheet.Cells(5, 5).value = "Print" Then

        'Error in following line!!!!!
        DataBaseSheet.ExportAsFixedFormat Type:=xlTypePDF, fileName:= _
          DataBaseSheet.Cells(5, 5) & ".pdf", Quality:=xlQualityStandard, _
          IncludeDocProperties:=True, IgnorePrintAreas:=True, _ 
          OpenAfterPublish:=True

    Else: MsgBox "You cannot print this sheet"
    End If

    DataBaseSheet.Cells(2, 2).Locked = False
    DataBaseSheet.Protect password:=pw

End Sub

1 Ответ

1 голос
/ 27 марта 2019

Вы получаете эту ошибку, потому что пытаетесь перезаписать 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
...