3

Ниже приведен код VBA для преобразования файла Excel в PDF с необходимым именем файла. Как я могу изменить этот макрос, чтобы защитить PDF от редактирования?

Private Sub CommandButton2_Click()
'saves the file as PDF and adds a date parameter to the name of the file

aux1 = ""
If Month(Date) < 10 Then
aux1 = "0"
End If
aux2 = ""
If Day(Date) < 10 Then
aux2 = "0"
End If

fileN = "Salary Slip of " & Workbooks.Application.Sheets("Salary Slip").Cells(10, 5).Value
fileD = Format(Sheets("Salary Slip").Cells(6, 2).Value, "mmm-yy")

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & fileN & " for " & fileD & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

End Sub

1 ответ1

2

Как указано в комментарии, нет прямого способа достичь этого без внешних инструментов. Потребовалась бы полноценная библиотека PDF, которая, вероятно, слишком велика и сложна, чтобы ее можно было включить в файл Excel.

Чтобы предотвратить изменения PDF , вы можете использовать такие инструменты, как PDFtk, чтобы зашифровать файл и ограничить разрешения. Вы можете вызвать PDFtk из VBA, используя функцию Shell . Используйте pdftk --help чтобы узнать все параметры.

Пример:

call Shell("pdftk.exe myfile.pdf output protected.pdf encrypt_128bit")

В примере предполагается, что pdftk.exe можно найти в поисковой PATH . Добавьте двойные кавычки, если ваши пути к файлам содержат пробелы.

PDFtk запрещает печать зашифрованных файлов, если это явно не разрешено. В противном случае было бы довольно легко обойти такое ограничение, используя трюк печати в файл.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .