Office関連

Office文書をパスワード付きPDFに変換するVBAマクロ

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を使った処理について詳細にまとめられており、大変助かりました。
この場を借りてお礼申し上げます。

Office製品のフィードバックって本当に反映されるの?前のページ

[Google Apps Script]Google フォームとkintoneを連携させる方法次のページ

関連記事

  1. Office関連

    Excel 2013で駅すぱあとWebサービス APIの「経路探索」を使ってみました。

    「「駅すぱあとWebサービス API無償提供」を利用してみました。」で…

  2. アイコン一覧

    Office 365アイコン(imageMso)一覧(X,Y,Z)

    Office 365のデスクトップ版Officeアプリケーション(Wo…

  3. Office関連

    Yahoo!翻訳で文字列を翻訳するマクロ

    「Google翻訳で文字列を翻訳するマクロ」ではGoogle翻訳を利用…

  4. アイコン一覧

    Office 2013 アイコン一覧(H)

    ・Office 2013 アイコン一覧 NUM…

  5. Office関連

    Custom UI Editorの最新版がGitHubで公開されました。

    下記記事等で紹介している、リボンUIをカスタマイズするためのツール「C…

  6. Office関連

    「いちばんやさしいPowerPoint VBAの教本」レビュー

    「インストラクターのネタ帳」で有名な伊藤さんが執筆された書籍第二弾、「…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP