Office関連

パスワード付のPDFファイルを作成するExcelマクロ

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

関連記事

  1. Office関連

    Faviconをダウンロードするマクロ

    WebサイトからFaviconを抜き出すAPIがあったので早速使ってみ…

  2. Office関連

    PDFファイル上のフィールドの値を操作するVBAマクロ

    「PDFファイルに差し込み印刷するVBAマクロ」で、Acrobatを操…

  3. Office関連

    Word 2013のアクセス キー一覧

    2013/10/24 追記:下記一覧表をPDFファイルにしました。…

  4. Office関連

    Word 2013の「個人用テンプレート」はどこ?

    Word 2010では、から「個人用テンプレート」(カスタム テンプレ…

  5. Office関連

    [Office]シンプルリボンのアンケートへの回答でAmazonギフト券が当たるチャンス

    「Office の新しい外観」にある通り、一部のOffice環境では、…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP