VBAから
・ブックの内容を
・PDFファイル(パスワードあり)として出力
できます!
VBAから
・無料ツール「QPDF」を呼び出す
ことで実現します!
※無料ツール「QPDF」の実行ファイルの取得(ダウンロード)が必要です。
残念ながら
・VBAだけでは実現できない様子
です…。
※もしかしたら実現できるかもです。
※私では実現方法を見つけられないだけかもです。
QPDFの取得(ダウンロード)
以下のURLにアクセスする。
最新バージョンをクリックする。
※2023/10/26時点の最新バージョンは「11.6.3」ため、今回は「11.6.3」をクリックします。
Windows用である「qpdf-XX.X.X-mingw64.zip」をクリックし、ダウンロードする。
※今回は「qpdf-11.6.3-mingw64.zip」をクリックします。
※クリックにより「qpdf-11.6.3-mingw64.zip」がダウンロードされます。
ダウンロードされた「qpdf-XX.X.X-mingw64.zip」を任意の場所に展開する。
※今回はデスクトップ配下へ展開します。
「bin」フォルダの中に、「QPDF」の実行ファイル「qpdf.exe」が存在することを確認する。
※後述するVBAコードに、「QPDF」の実行ファイル「qpdf.exe」のパスを記載します。
VBAコード
ここでは例として
・本VBAを実行しているブックの内容を
・PDF(パスワードあり)として出力
します。
ブックには以下の3シートがあるとします。
・Sheet1
・Sheet2
・Sheet3
Option Explicit
Sub sample()
Dim qpdfExePath As String
Dim tempPdfFilePath As String
Dim passwordPdfFilePath As String
Dim pdfPassword As String
Dim fso As Object
Dim execCommand As String
Dim wsh As Object
Dim result As Integer
'qpdfの実行ファイルのパス
qpdfExePath = "C:\Users\user\Desktop\qpdf-11.6.3-mingw64\bin\qpdf.exe"
'tempなPDFのパス
tempPdfFilePath = "C:\Users\user\Desktop\temp.pdf"
'出力するPDF(パスワードあり)のパス
passwordPdfFilePath = "C:\Users\user\Desktop\パスワード付きファイル.pdf"
'PDFに設定するパスワード
pdfPassword = "password12345"
Set fso = CreateObject("Scripting.FileSystemObject")
'既にtempなPDFが存在したら削除
If fso.FileExists(tempPdfFilePath) Then
fso.DeleteFile tempPdfFilePath, True
End If
'既にPDF(パスワードあり)が存在したら削除
If fso.FileExists(passwordPdfFilePath) Then
fso.DeleteFile passwordPdfFilePath, True
End If
'本VBAを実行しているブックの内容をtempなPDFとして出力
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=tempPdfFilePath
'コマンドを組み立て【「tempなPDF」から「PDF(パスワードあり)」を作成するコマンド】
execCommand = qpdfExePath & " --encrypt " & pdfPassword & " " & pdfPassword & " 256 -modify=none --print=full -- " & tempPdfFilePath & " " & passwordPdfFilePath
'コマンドを同期実行
Set wsh = CreateObject("WScript.Shell")
result = wsh.Run(Command:="%ComSpec% /c " & execCommand, WindowStyle:=0, WaitOnReturn:=True)
'コマンドの実行結果を確認
If (result = 0) Then
MsgBox ("正常終了しました。")
Else
MsgBox ("異常終了しました。")
End If
'後片付け
fso.DeleteFile tempPdfFilePath, True
Set wsh = Nothing
Set fso = Nothing
End Sub
実行結果
ブックの内容をPDFファイル(パスワードあり)として出力できました。
出力されたPDFファイル(パスワードあり)を開くと、パスワードの入力を求められます。
パスワードを入力すると、ちゃんと開けました。
ブックの内容が出力されていることを確認できました。
参考①
上記のVBAコードは以下の記事を参考にして作成しました。
●シートの内容をPDFファイルとして出力する
●コマンドプロンプトのコマンドを実行する
参考②
バッチファイルでもPDFにパスワードを設定できます。
※VBAと同様に無料ツール「QPDF」を使用します。
詳細は以下の記事をご確認ください。
参考③
無料ツール「QPDF」のマニュアルは、展開したフォルダ配下の「share」-「doc」-「qpdf」フォルダの中にあります。
※マニュアルは英語で記載されています。
参考④
本記事の内容は
・いただいた問い合わせを参考にして作成
しました。