2019/8/16 追記:
WordやPowerPointにも対応した、改良版のマクロにつて記事を書きました。
以前書いたマクロが出てきました。
Acrobat付属のOffice用COMアドイン「Acrobat PDFMaker Office COM Addin」を利用して、Excelファイルからパスワード(読み取り、書き込み)付のPDFファイルに変換するマクロです。
Option Explicit
Public Sub Sample()
ConvertPdfUsingPDFMaker "C:\Test\テストファイル.xlsx", _
"C:\Test\変換後.pdf", _
"read", _
"write"
End Sub
Public Sub ConvertPdfUsingPDFMaker(ByVal InputFilePath As String, _
ByVal OutputFilePath As String, _
Optional ByVal ReadPassWord As String = "", _
Optional ByVal WritePassWord As String = "")
'[Acrobat PDFMaker Office COM Addin]を使ってPDFファイルに変換(Excel)
'下記ライブラリ要参照
' - AdobePDFMakerForOffice(AcrobatPDFMakerForOffice.tlb)
' - PDFMakerAPI 1.0 Type Library(PDFMakerAPI.dll)
Dim pm As AdobePDFMakerForOffice.PDFMaker
Dim iset As AdobePDFMakerForOffice.ISettings
Dim sset As PDFMAKERAPILib.SecuritySettings
Dim wb As Excel.Workbook
Set pm = GetPDFMaker()
If pm Is Nothing Then
MsgBox "[Acrobat PDFMaker Office COM Addin]を取得できませんでした。" & vbNewLine & _
"処理を中止します。", vbExclamation + vbSystemModal
Exit Sub
End If
Set wb = Application.Workbooks.Open(InputFilePath)
wb.Activate '念のため開いたブックをアクティブにする
'環境設定(必要に応じてオプション変更)
pm.GetCurrentConversionSettings iset
With iset
.IsAutomation = True
.IsConversionSilent = True
.ShouldShowProgressDialog = True
.ViewPDFFile = False '結果の Adobe PDF を表示(Falseで非表示)
.PrintActivesheetOnly = False '変換範囲(Falseでブック全体)
.PromptForPDFFilename = False
.PromptForSheetSelection = False
.OutputPDFFileName = OutputFilePath
End With
'セキュリティ設定
If Len(Trim(ReadPassWord)) > 0 Or _
Len(Trim(WritePassWord)) > 0 Then
Set sset = New PDFMAKERAPILib.SecuritySettings
With sset
If Len(Trim(ReadPassWord)) > 0 Then
'文書を開くときのパスワード設定
.OpenDocPasswdNeeded = True
.OpenDocPasswd = ReadPassWord
End If
If Len(Trim(WritePassWord)) > 0 Then
'権限設定
.PermsPasswdNeeded = True
.PermsPasswd = WritePassWord
'印刷を許可
'.PrintingModeAllowed = kPrintingAllowedHighRes '高解像度
'.PrintingModeAllowed = kPrintingAllowedLowRes '低解像度 (150 dpi)
.PrintingModeAllowed = kPrintingAllowedNone '許可しない
'変更を許可
'.AllowedChanges = kAllowChangesAnyExceptPageExtraction 'ページの抽出を除くすべての操作
'.AllowedChanges = kAllowChangesCommentingFormfillsSign '注釈の作成、フォームフィールドの入力と既存の署名フィールドに署名
'.AllowedChanges = kAllowChangesFormfillsSign 'フォームフィールドの入力と既存の署名フィールドに署名
'.AllowedChanges = kAllowChangesInsertDeleteRotatePages 'ページの挿入、削除、回転
.AllowedChanges = kAllowChangesNone '許可しない
'テキスト、画像、およびその他の内容のコピーを有効にする
'.EnableCopyingContent = True 'True:チェックON / False:チェックOFF
End If
End With
iset.SecuritySettings = sset
End If
pm.CreatePDFEx iset, 0 'PDF作成
wb.Close SaveChanges:=False
End Sub
Private Function GetPDFMaker() As AdobePDFMakerForOffice.PDFMaker
'PDFMakerオブジェクト取得
Dim ad As Office.COMAddIn
Dim ret As AdobePDFMakerForOffice.PDFMaker
Set ret = Nothing '初期化
For Each ad In Application.COMAddIns
If ad.Connect = True Then
If LCase(ad.progID) = LCase("PDFMaker.OfficeAddin") Then
Set ret = ad.Object
Exit For
End If
End If
Next
Set GetPDFMaker = ret
End Function
コード中にも記載していますが、「AdobePDFMakerForOffice(AcrobatPDFMakerForOffice.tlb)」と「PDFMakerAPI 1.0 Type Library(PDFMakerAPI.dll)」の参照が必要です。
たしか、“kPrintingAllowedHighRes”とか“kAllowChangesCommentingFormfillsSign”といった値が何を指しているのかを調べるのが大変で放置したままになっていたのでした。
結局今になっても調べきれていません。
UIAでアドインのダイアログ操作した方がマシかも?、なんて思いもしますが、いつかどこかで使う機会があるかもしれませんので、一応残しておきます。




















この記事へのコメントはありません。