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でアドインのダイアログ操作した方がマシかも?、なんて思いもしますが、いつかどこかで使う機会があるかもしれませんので、一応残しておきます。
この記事へのコメントはありません。