Office関連

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

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

選択したセルに連続行番号を振るWordマクロ前のページ

Office 2016関連資料のリンク次のページ

関連記事

  1. Office関連

    オフィス祭り 2018 in 東京に参加しました。

    先日書いた下記記事の通り、9月15日(土)に品川にある日本マイクロソフ…

  2. Office アドイン

    [Office用アプリ]選択範囲変更時のイベントを利用する。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  3. Office関連

    Word 2013では簡単にウィンドウ ハンドルを取得できるようになりました。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  4. Office アドイン

    [Office用アプリ]辞書アプリを作成する。

    Word 2013で、文字列を選択して校閲タブの文章校正グループから「…

  5. Office関連

    起動中のMicrosoft EdgeからタイトルとURLを取得するVBAマクロ(UI Automat…

    当ブログでは、Microsoft Edgeを外部から操作するプログラム…

  6. Office関連

    名前付きセル(範囲)にコメントを付けるVBAマクロ

    Excelでマニュアルを作成する際、名前付きセル範囲を明記する必要があ…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

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

Translate

最近の記事

アーカイブ

PAGE TOP