4年ほど前に書いた、下記記事のマクロがWordでも使えるか?との質問を頂きました。
残念ながら、上記記事のコードをWordでそのまま使うことはできません。
そこで今回は、Excelに限定せず、WordやPowerPointファイルにも対応したマクロを書いてみました。
※下記コードはAcrobat PDFMakerを利用してPDFファイルへの変換を行います。Acrobatをインストールした上で、各Officeアプリケーション上でPDFMakerアドインを有効にする必要があります。
Option Explicit Public Sub Sample() 'Wordファイルを読み取り・権限パスワード付のPDFに変換 ConvertPdfUsingPDFMaker "C:\Test\Conv\Test.docx", "C:\Test\Conv\Test.pdf", "passr", "passw" End Sub Public Sub Sample2() 'Word,PowerPoint,Excelファイルを読み取り・権限パスワード付のPDFに一括変換 Dim in_files, out_files Dim i As Long Const ReadPassWord As String = "1234" Const WritePassWord As String = "7777" in_files = Array("C:\Test\Conv\TestDOC.docx", _ "C:\Test\Conv\TestPPT.pptx", _ "C:\Test\Conv\TestXLS.xlsx") out_files = Array("C:\Test\Conv\TestDOC.pdf", _ "C:\Test\Conv\TestPPT.pdf", _ "C:\Test\Conv\TestXLS.pdf") For i = LBound(in_files) To UBound(in_files) ConvertPdfUsingPDFMaker in_files(i), out_files(i), ReadPassWord, WritePassWord Next End Sub Private Sub ConvertPdfUsingPDFMaker(ByVal InputFilePath As String, _ ByVal OutputFilePath As String, _ Optional ByVal ReadPassWord As String = "", _ Optional ByVal WritePassWord As String = "") Dim pm As Object 'PDFMAKERAPILib.PDFMakerApp Dim cset As Object 'PDFMAKERAPILib.ConversionSettings Dim sset As Object 'PDFMAKERAPILib.securitySettings Dim appType As Long Dim settingsName As String Dim prms As Long Dim ret As Long 'PDFMAKERAPILib.SupportedApps Const kAppUnknown = 0 'PDFMAKERAPILib.PDFMakerRetVals Const kPDFMSuccess = 0 Const kPDFMErrorPDFMakerUnavailable = -10 Const kPDFMErrorFileOpenInAnotherApp = -24 'PDFMAKERAPILib.tagPrintingModesAllowedEnum Const kPrintingAllowedNone = 0 Const kPrintingAllowedLowRes = 1 Const kPrintingAllowedHighRes = 2 'PDFMAKERAPILib.tagAllowedChangesEnum Const kAllowChangesNone = 0 Const kAllowChangesInsertDeleteRotatePages = 1 Const kAllowChangesFormfillsSign = 2 Const kAllowChangesCommentingFormfillsSign = 6 Const kAllowChangesLayoutTouchupFormfillSign = 10 Const kAllowChangesAnyExceptPageExtraction = 14 Const kAllowChangesAll = 15 On Error Resume Next Set pm = CreateObject("PDFMakerAPI.PDFMakerApp") On Error GoTo 0 If pm Is Nothing Then MsgBox "PDFMakerを取得できませんでした。" & vbNewLine & _ "処理を中止します。", vbCritical + vbSystemModal Exit Sub End If 'ファイル判定 appType = pm.GetSupportedAppType(InputFilePath) Select Case appType Case kAppUnknown MsgBox "サポートされていないファイルです。" & vbNewLine & _ "処理を中止します。", vbCritical + vbSystemModal Exit Sub End Select '変換設定 ※アプリケーションの設定に依存 '細かく設定する場合は下行のようにPDFMakerSettingsで指定 'prms = kCreateDocInfo Or kCreateComments Or kCreateLinks Set cset = CreateObject("PDFMakerAPI.ConversionSettings") cset.GetAppConversionDefaults appType, prms, settingsName cset.SetConversionParameters prms 'セキュリティ設定 Set sset = cset.GetSecuritySettings 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 = False 'True:チェックON / False:チェックOFF End If End With cset.SetSecuritySettings sset 'PDF作成 ret = pm.CreatePDF(srcFilePath:=InputFilePath, _ pdfFilePath:=OutputFilePath, _ pSettings:=cset, _ bConvertSilent:=True, _ bShowProgress:=True, _ bConvertAsync:=False) Select Case ret Case kPDFMErrorFileOpenInAnotherApp MsgBox "対象ファイルが別のアプリケーションによって開かれています。" & vbNewLine & _ "ファイルを閉じてから、再度実行してください。", vbCritical + vbSystemModal Case kPDFMErrorPDFMakerUnavailable MsgBox "PDFMakerアドインが有効になっていません。" & vbNewLine & _ "アドインを有効にしてから、再度実行してください。", vbCritical + vbSystemModal Case kPDFMSuccess Debug.Print "正常終了:" & InputFilePath '確認用 Case Else MsgBox "処理が失敗しました。" & vbNewLine & _ "code:" & Hex(ret), vbCritical + vbSystemModal End Select End Sub
「Sample」は1ファイルのみ変換を行い、「Sample2」は複数のファイルを一括して変換するサンプルです。
例えば、Excelのシートに元ファイルのパスや出力先、パスワードを記載しておけば、まとめてパスワード付のPDFを作成することができるので、出番は割と多いのではないかと思います。
なお、本マクロは、Excelだけでなく、WordやPowerPointでも実行することができます。
本マクロを作成するにあたり、下記サイトを参考にしました。
情報量が少ないPDFMakerを使った処理について詳細にまとめられており、大変助かりました。
この場を借りてお礼申し上げます。
この記事へのコメントはありません。