Toggle FullScreen
More Info

PDFMakerAPIを使ってパスワード付きPDFを作成する

COM AddinのPDFMakerをスクリプトで操作してみる

OfficeのファイルをPDFに変換する方法はいろいろありますが、よく使われるものとして、仮想プリンタ(Adobe PDF)を使う方法と、アドインのAcrobat PDFMakerを使う方法があります。

特にワードをはじめとするOfficeファイルをPDFに変換するときには、PDFMakerを使うとみだしからしおりを作ったり、リンクをそのまま活かしたりと、高品質なPDFを作れます。パスワードを設定したPDFも作れます。

VBAをつかってPDFファイルを作るには、デフォルトのプリンタを仮想プリンタ(Adobe PDF)に設定して印刷させたり、PostScriptファイルを作って、Acrobat DistillerライブラリのFileToPDFメソッドを使う方法がよく知られています。

しかし、せっかくアドインがあるのだから、ここは、PDFMakerを使ってVBAでPDFを作る方法にトライです。
今回の記事では、PDFMakerAPI 1.0 Type Library を単独で使って、VBAでPDFファイルを作成するサンプルスクリプトとその概要を示します。その後、他の2つのライブラリ AdobePDFMakerForOffice と AdobePDFMakerX について若干言及しつつ、最後に資料としてPDFMAKERAPILibのPDFMakerSettings列挙体とsecuritySettingsクラスのプロパティ、それにAdobePDFMakerForOfficeのISettingsクラスのプロパティをオブジェクトブラウザから転載します。
ただし、この記事で述べる方法は、Adobeの公式なドキュメントもなくサポート対象外なので、動作保証もありません。自己責任で。

動作確認環境

  • OS windows XP SP3
  • Word 2002 SP3
  • Excel 2002 SP3
  • Access 2002 SP3

私のPC環境では、Wordのメニューバーに「Adobe PDF」があり、そのメニューは次のようになっています。
01_word_toolbar

設定メニューは次のとおり。
Word。
タブ1
02_word_PDFMaker_Setting_tab1

タブ2
03_word_PDFMaker_Setting_tab2

タブ3
04_word_PDFMaker_Setting_tab3

タブ4
05_word_PDFMaker_Setting_tab4

Excelでは次のとおり。
メニューバー
06_excel_toolbar

タブ1
07_excel_PDFMaker_Setting_tab1

タブ2
08_excel_PDFMaker_Setting_tab2

Officeのアプリケーションによって、設定項目が違います。

この環境のPDFMakerは、Docuworksと同時にインストールされている様なので、一般的な環境とは若干違うかもしれません。



VBAから単独で使えるのは PDFMakerAPI ぐらいか?

※一応、AdobePDFMakerForOfficeも使えます。

PC内にあるAdobeのものらしきライブラリをいろいろ試してみました。私の環境では、PDFMaker関連と思われるライブラリは、次の3つがあります。

  • PDFMakerAPI 1.0 Type Library(PDFMakerAPI.tlb)
  • AdobePDFMakerX(AdobePDFMakerX.tlb)
  • AdobePDFMakerForOffice(AcrobatPDFMakerForOffice.tlb)

PDFMakerAPI.tlbとAdobePDFMakerX.tlbは C:\Program Files\Adobe\Acrobat 8.0\PDFMaker\Common に、

AcrobatPDFMakerForOffice.tlbは C:\Program Files\Adobe\Acrobat 8.0\PDFMaker\Office にありました。

名称から察するに、PDFMakerの本体がPDFMakerAPIでそのラッパーがAdobePDFMakerX、Office用のオプションがAdobePDFMakerForOfficeってとこでしょうか。勝手な推測です。

補足ですが、C:\Program Files\Adobe\Acrobat 8.0\PDFMaker\Common フォルダには PDFMakerAPI.dll というファイルもあり、プロパティを開くと、PDFMakerAPI Module 8.1.0.0 となっていて、著作権の項目は、Copyright 1984-2007 Adobe Systems Incorporated and its licensors. All rights reserved. と記されています。



PDFMakerAPI 1.0 Type Libraryの PDFMakerApp オブジェクトを使ってPDFを作る

PDFMakerAPI 1.0 Type Library 内のPDFMakerApp オブジェクトの CreatePDF メソッドを使って、PDFファイルを作ります。
ただし、この方法にもいくつか注意点があります。
まず、既に開いているファイルのPDFは作れません。CreatePDFメソッドの第1引数 srcFilePathに指定したファイルが開いていると、CreatePDFメソッドは kPDFMErrorOpeningFile (= -8 (&HFFFFFFF8))を返してエラーになります。
また、このスクリプトをWordファイルで走らせたときは、他のWordファイルからPDFを作ると、スクリプトがそのWordファイルを閉じるときに「このファイルはすでに開かれているため、保存できません」エラーが出ます。

CreatePDFメソッドを使うと、
対応したアプリケーションを立ち上げる→ファイルを開く→PDFファイルを作る→ファイルを閉じる→アプリケーションを閉じる
の一連の作業をするからでしょう。
ひょっとしたら、PDFMAKERAPILibライブラリ内の PDFMakerDriver オブジェクトの一連のメソッドが動いているのかもしれません。

なので、この方法がとれるのは、

  • Excelのファイルに記述して、WordファイルからPDFを作る。
  • Wordのファイルに記述して、ExcelファイルからPDFを作る。
  • Accessに記述して、WordやExcelファイルからPDFを作る。

といったところでしょうか。

サンプルスクリプト

このサンプルスクリプトでは、srcFilePathで指定したファイルを、pdfFilePath指定したPDFファイルに変換します。PDF変換のオプションとして設定した項目は、以下のとおり。


セキュリティ関連

  • ファイルを開く時のパスワードは「0000」
  • 印刷は不許可とし、権限設定を変更する時のパスワードは「1111」

しおりやリンクなど

  • PDFファイルにしおりを追加
  • 文書情報を追加
Sub PDFMakerAPI_test()
'===============================================================
'自身のアプリケーション以外のファイルをPDFに変換する際は、有用。
'参照設定 PDFMakerAPI 1.0 Type Library(PDFMakerAPI.tlb)
'convert closed office file to PDF with PDFMAKERAPILib
'===============================================================
Dim myPDFMakerApp As PDFMAKERAPILib.PDFMakerApp
Dim myConversionSettings As PDFMAKERAPILib.ConversionSettings   '変換設定
Dim mySecuritySettings As PDFMAKERAPILib.securitySettings   'セキュリティ設定
Dim srcFilePath As String, pdfFilePath As String    'ファイルパス
Dim myMsg As String
Dim settingsFile As String
Dim appType As Long
Dim bitField  As Long
Dim settings As Long
Dim PDFMRetVals As Long
    
    srcFilePath = "D:\test.doc" 'input office file
'    srcFilePath = "D:\test.xls"
    pdfFilePath = "D:\test.pdf" 'output PDF file

    'set PDFMakerApp,ConversionSettings and SecuritySettings objects
    Set myPDFMakerApp = New PDFMAKERAPILib.PDFMakerApp
    Set myConversionSettings = New PDFMAKERAPILib.ConversionSettings
    Set mySecuritySettings = myConversionSettings.GetSecuritySettings   'Get SecuritySettings
    
        'Get File Application Type
        appType = myPDFMakerApp.GetSupportedAppType(srcFilePath)
    
        'Make Security Parameters
        With mySecuritySettings
            'Set Opening Password
            .OpenDocPasswd = "0000"
            .OpenDocPasswdNeeded = True
            
            'Set Printing Password
            .PrintingModeAllowed = kPrintingAllowedNone
            .PermsPasswd = "1111"
            .PermsPasswdNeeded = True
        End With
        
        With myConversionSettings
            .LoadDefaultSettings
            .GetAppConversionDefaults appType, bitField, settingsFile
            .GetConversionParameters settings               'If applied default setting,it returns -1
            
                'Show Conversion settings
                myMsg = "bitField : " & bitField & " &H" & Hex(bitField)
                myMsg = myMsg & vbCrLf & "settingsFile : " & settingsFile
                myMsg = myMsg & vbCrLf & "Defaultsettings : " & settings & " &H" & Hex(settings)
                
            'Set Security Paramaters
            .SetSecuritySettings mySecuritySettings
            
                'Make ConversionParamaters
                bitField = kCreateBookmarks + kCreateDocInfo + kCreateTextNotes
            
            'Set ConversionParameters
            .SetConversionParameters (bitField)
            
            'Check ConversionSettings
                myMsg = myMsg & vbCrLf & "bitField : " & bitField & " &H" & Hex(bitField)
            .GetConversionParameters settings
                myMsg = myMsg & vbCrLf & "settings : " & settings & " &H" & Hex(settings)
        End With
                
        'Get PDF!
        'return PDFMakerRetVals Enum
        PDFMRetVals = myPDFMakerApp.CreatePDF(srcFilePath, pdfFilePath, myConversionSettings)
                myMsg = myMsg & vbCrLf & "PDFMakerRetVals : " & PDFMRetVals & " &H" & Hex(PDFMRetVals)
        Debug.Print myMsg
    
    Set mySecuritySettings = Nothing
    Set myConversionSettings = Nothing
    Set myPDFMakerApp = Nothing
End Sub

作成したPDFファイルのプロパティ

ファイルを開くと、パスワードを求められる。
09_PDF_Property_1

PDFを作成したアプリケーションは、「Word用Acrobat PDFMaker 8.1」となっています。
10_PDF_Property_2

セキュリティタブの表示
11_PDF_Property_3_1

文書のセキュリティの詳細情報
12_PDF_Property_4_1

上記の制限内であれば、自由に使えそうです。



PDFMakerAPI 1.0 Type Library (PDFMakerAPI.tlb)について

参照設定でPDFMakerAPI 1.0 Type LibraryのチェックボックスをONにすると、オブジェクトブラウザでクラスやメソッドを参照できます。

オブジェクトブラウザで確認すると、このライブラリには5つのクラスがあります。

  • ConversionSettings
  • IDirectSink
  • PDFMakerApp
  • PDFMakerDriver
  • securitySettings

興味のある方は実際にオブジェクトブラウザで確認していただくとして、PDF変換のメソッドはPDFMakerAppクラスにありそうです。

PDFMakerAppクラスには、次の5つメソッドがあります。

  • CreatePDF    (Create PDF)
  • CreatePDFFromConfigXML    (Create PDF From XML Config File)
  • CreatePDFFromMultipleFiles    (Create PDF from multiple files)
  • CreatePDFFromObject    (Create PDF from object within file)
  • GetSupportedAppType

上記リストのカッコ内は、オブジェクトブラウザで示されている説明です。それぞれ名称どおりの働きをするのでしょうが、私はCreatePDFとGetSupportedAppTypeしか使っていません。

CreatePDFメソッドの定義は次のようになっています。

Function CreatePDF(srcFilePath As String, pdfFilePath As String, [pSettings], [bConvertSilent], [bShowProgress], [bConvertAsync], [pClientHandle]) As Long

返値はLong型となっており、使ってみると、PDFMakerRetVals 列挙型を返すようです。

第1引数のsrcFilePathには、PDFに変換するファイル 要はWordやExcelファイルのフルパス、第2引数のpdfFilePathには、出力するPDFファイルのフルパスを指定します。

第3引数のpSettingsには、ConversionSettings オブジェクトを指定します。第4引数以下は、私が使っている限りでは動作確認できませんでした。

ConversionSettings オブジェクトで変換設定する

PDFファイルに「しおり」や「みだし」をつけるかどうか、またパスワードの設定など、PDFの変換設定にはConversionSettings オブジェクトを使います。サンプルスクリプトで行った主な作業は以下のとおり。

  1. ConversionSettingsオブジェクトにGetSecuritySettingsメソッドを適用して、securitySettingsオブジェクトを取得する。
  2. securitySettings オブジェクトの各種プロパティを操作して、パスワードなどを設定する。
  3. ConversionSettingsオブジェクトのSetSecuritySettings メソッドで、変更後の securitySettings オブジェクトを適用する。
  4. ConversionSettingsオブジェクトのGetAppConversionDefaults メソッドで変換元ファイルの種類に応じた bitField を取得する。
  5. bitFieldを任意に変更する(PDFMakerSettings 列挙型の和)。
  6. SetConversionParameters メソッドで、変更後の bitFieldを適用する。

PDFのセキュリティ項目を変更するときに扱うsecuritySettings オブジェクトには14のプロパティがあります。参考資料として下に一覧を示してあるので、ご覧ください。

内容はオブジェクトブラウザでも確認できますし、自動メンバ表示も動作しますので、プロパティ名とオブジェクトブラウザに表示される説明からどんな項目か、ほぼ見当がつくでしょう。

なお、オブジェクトブラウザに表示される securitySettings クラスの説明に

Structure containing the security settings (Second Tab of Conversion Settings Dialog)

とあるように、このプロパティはセキュリティタブの設定項目と対応しているようです。

サンプルスクリプトでも分かると思いますが、ファイルを開くときにパスワードを要求するときは、OpenDocPasswdNeeded に True を設定し、OpenDocPasswd にパスワードを設定します。今回は、「0000」としました。また、サンプルスクリプトでは印刷を不許可にして、権限設定を変更する際のパスワードを「1111」にしてあります。私のPCにはAdobe Readerしかインストールされていないので、権限パスワードは確認できていませんが。

PDF変換設定を変更する

PDFの変換設定を変更するには、ConversionSettings オブジェクトの SetConversionParameters メソッドを実行します。引数として長整数型 settings をとりますが、これは PDFMakerSettings 列挙型の和であり、足算結果を16進数で解釈しているようです。

PDFMakerAPI 1.0 Type Libraryで変換設定を操作するときは、いちいちPDFMakerSettings 列挙型の和を指定しないといけないので、若干面倒です。

PDFMakerSettings 列挙型 の一覧も下の参考資料に示しましたので、ご覧ください。

全ての設定が使えるわけではない

おそらくいくつかのライブラリを組み合わせて使うことを想定しているものを、単体で使おうとしているので、思い通りに動作しないこともあります。

今回全ての設定を使い込んだわけでないのですが、少なくともExcelファイルをPDFに変換する際、kPromptForSheetSelection すなわち、「Excelのシートを確認するダイアログを表示する」をONにしても、ダイアログは表示されませんでした。Excelアプリケーションの標準ConversionParametersを読み込んで、値が&H8400017であることを確認しているのですが。

複数のワークシートを含んだブックを、今回の方法でPDFに変換すると、ファイルを開いた時にアクティブなワークシートだけがPDFに変換されます。



AdobePDFMakerForOfficeライブラリのPDFMakerオブジェクトを使ってPDFを作る

実は、PDFMakerAPIを単独で使うよりも、AdobePDFMakerForOfficeライブラリのPDFMakerオブジェクトと一緒に使う、下のサンプルスクリプトの方が使いやすい場面があるかもしれません。
変換設定の方法は、AdobePDFMakerForOfficeライブラリのISettingsオブジェクトの各プロパティを設定するだけ。
ただ、Officeの各アプリケーションを意識しないといけないのが、若干面倒かも。ま、お好みに応じて。

制限はPDFMakerAPIを単独で使うときと、ほぼ同じ。
以下に、いくつかサンプルスクリプトを示します。

WordのNormal.dotの標準モジュールに記述して、開いているファイルをPDF変換する

次に示すサンプルスクリプトは、Wordファイルに記述して起動すると、開いているWordファイルのPDFを同じフォルダに作成します。PDF Maker アドインの設定にかかわらず、PDFファイルには、ファイルを開く時のパスワード(0000)が設定されます。またPDFの作成後、PDFは表示されません。

Sub AdobePDFMakerForOffice_testSecurity()
'===============================================================
'アクティブなドキュメントをPDF変換するには、AdobePDFMakerForOfficeライブラリを使う。
'参照設定 PDFMakerAPI 1.0 Type Library(PDFMakerAPI.tlb)
'     AdobePDFMakerForOffice(AcrobatPDFMakerForOffice.tlb)
'convert active document to PDF with AdobePDFMakerForOffice
'===============================================================
Dim myPDFMaker As AdobePDFMakerForOffice.PDFMaker
Dim myISettings As AdobePDFMakerForOffice.ISettings
Dim myConversionSettings As PDFMAKERAPILib.ConversionSettings
Dim mySecuritySettings As PDFMAKERAPILib.securitySettings
Dim myObj As Variant
Dim pdfFilePath As String

'not saved document cannot be converted
If Not Application.ActiveDocument.Saved Then
    MsgBox "PDFに変換する前に、ファイルを保存してください。"
    Exit Sub
End If

'get PDFMaker COMAddIn Object
Set myPDFMaker = Nothing
For Each myObj In Application.COMAddIns
    If InStr(UCase(myObj.Description), "PDFMAKER") > 0 Then
        Set myPDFMaker = myObj.Object
        Exit For
    End If
Next

If myPDFMaker Is Nothing Then
    MsgBox "PDFMaker add-in が見つかりませんでした。", vbAbortRetryIgnore
    Exit Sub
End If

'set output PDF filepath
    pdfFilePath = Application.ActiveDocument.FullName
    pdfFilePath = Left(pdfFilePath, InStrRev(pdfFilePath, ".") - 1) & ".pdf"

'get SecuritySettings object and set security parameters (PassWord)
Set myConversionSettings = New PDFMAKERAPILib.ConversionSettings
Set mySecuritySettings = myConversionSettings.GetSecuritySettings
    mySecuritySettings.OpenDocPasswd = "0000"
    mySecuritySettings.OpenDocPasswdNeeded = True

'set Converion parameters and securitySettings object
    myPDFMaker.GetCurrentConversionSettings myISettings
    myISettings.OutputPDFFileName = pdfFilePath
    myISettings.ShouldShowProgressDialog = False
    myISettings.ViewPDFFile = False
    myISettings.securitySettings = mySecuritySettings
    
'create PDF
    myPDFMaker.CreatePDFEx myISettings, 0
    
Set myConversionSettings = Nothing
Set mySecuritySettings = Nothing
Set myPDFMaker = Nothing

End Sub

Accessの標準モジュールに記述して、WordファイルをPDF変換

Sub AdobePDFMakerForOffice_Word()
'===============================================================
'ドキュメントをPDF変換するには、AdobePDFMakerForOfficeライブラリを使う。
'参照設定 PDFMakerAPI 1.0 Type Library(PDFMakerAPI.tlb)
'     AdobePDFMakerForOffice(AcrobatPDFMakerForOffice.tlb)
'          Microsoft Word 10.0 Object Library
'convert a document to PDF with AdobePDFMakerForOffice
'===============================================================
Dim myPDFMaker As AdobePDFMakerForOffice.PDFMaker
Dim myISettings As AdobePDFMakerForOffice.ISettings
Dim myConversionSettings As PDFMAKERAPILib.ConversionSettings
Dim mySecuritySettings As PDFMAKERAPILib.securitySettings
Dim myObj As Variant
Dim wdFilePath As String
Dim pdfFilePath As String

Dim myWD As Word.Application
Set myWD = CreateObject("Word.Application")


'get PDFMaker COMAddIn Object
Set myPDFMaker = Nothing
For Each myObj In myWD.COMAddIns
    If InStr(UCase(myObj.Description), "PDFMAKER") > 0 Then
        Set myPDFMaker = myObj.Object
        Exit For
    End If
Next

If myPDFMaker Is Nothing Then
    MsgBox "PDFMaker add-in が見つかりませんでした。", vbAbortRetryIgnore
    Exit Sub
End If

'set filepath
    wdFilePath = "D:¥test.doc"
    pdfFilePath = "D:¥test.pdf"
    
    myWD.Documents.Open wdFilePath

'get SecuritySettings object and set security parameters (PassWord)
Set myConversionSettings = New PDFMAKERAPILib.ConversionSettings
Set mySecuritySettings = myConversionSettings.GetSecuritySettings
    mySecuritySettings.OpenDocPasswd = "0000"
    mySecuritySettings.OpenDocPasswdNeeded = True

'set Converion parameters and securitySettings object
    myPDFMaker.GetCurrentConversionSettings myISettings
    With myISettings
        .OutputPDFFileName = pdfFilePath
        .ShouldShowProgressDialog = False
        .ViewPDFFile = False
        .securitySettings = mySecuritySettings
    End With
    
'create PDF
    myPDFMaker.CreatePDFEx myISettings, 0
    
Set myConversionSettings = Nothing
Set mySecuritySettings = Nothing
Set myPDFMaker = Nothing

    myWD.Quit wdDoNotSaveChanges
Set myWD = Nothing

End Sub

Accessの標準モジュールに記述して、ExcelファイルをPDF変換

(全てのワークシートを変換する設定にしてあります。)

Sub AdobePDFMakerForOffice_Excel()
'===============================================================
'ドキュメントをPDF変換するには、AdobePDFMakerForOfficeライブラリを使う。
'参照設定 PDFMakerAPI 1.0 Type Library(PDFMakerAPI.tlb)
'     AdobePDFMakerForOffice(AcrobatPDFMakerForOffice.tlb)
'          Microsoft Excel 10.0 Object Library
'convert a document to PDF with AdobePDFMakerForOffice
'===============================================================
Dim myPDFMaker As AdobePDFMakerForOffice.PDFMaker
Dim myISettings As AdobePDFMakerForOffice.ISettings
Dim myConversionSettings As PDFMAKERAPILib.ConversionSettings
Dim mySecuritySettings As PDFMAKERAPILib.securitySettings
Dim myObj As Variant
Dim wdFilePath As String
Dim pdfFilePath As String

Dim myXls As Excel.Application
Set myXls = CreateObject("Excel.Application")


'get PDFMaker COMAddIn Object
Set myPDFMaker = Nothing
For Each myObj In myXls.COMAddIns
    If InStr(UCase(myObj.Description), "PDFMAKER") > 0 Then
        Set myPDFMaker = myObj.Object
        Exit For
    End If
Next

If myPDFMaker Is Nothing Then
    MsgBox "PDFMaker add-in が見つかりませんでした。", vbAbortRetryIgnore
    Exit Sub
End If

'set filepath
    wdFilePath = "D:¥test.doc"
    pdfFilePath = "D:¥test.pdf"
    
    myXls.Workbooks.Open wdFilePath

'get SecuritySettings object and set security parameters (PassWord)
Set myConversionSettings = New PDFMAKERAPILib.ConversionSettings
Set mySecuritySettings = myConversionSettings.GetSecuritySettings
    mySecuritySettings.OpenDocPasswd = "0000"
    mySecuritySettings.OpenDocPasswdNeeded = True

'set Converion parameters and securitySettings object
    myPDFMaker.GetCurrentConversionSettings myISettings
    With myISettings
        .OutputPDFFileName = pdfFilePath
        .ShouldShowProgressDialog = False
        .ViewPDFFile = False
        .PrintActivesheetOnly = False   '全てのワークシートを変換
        .PromptForSheetSelection = False '「Adobe PDF に含める Excel ワークシートを選択」ダイアログを非表示
        .securitySettings = mySecuritySettings
    End With
    
'create PDF
    myPDFMaker.CreatePDFEx myISettings, 0
    
Set myConversionSettings = Nothing
Set mySecuritySettings = Nothing
Set myPDFMaker = Nothing

    myXls.Quit
Set myXls = Nothing

End Sub

これらのスクリプトのポイントは、AdobePDFMakerForOffice.PDFMakerオブジェクトを、アプリケーションのCOMAddInsコレクションから参照しているところです。したがって、WordのNormal.dotの標準モジュールに記述するときは別として、AdobePDFMakerForOffice_WordやAdobePDFMakerForOffice_Excelのように、ほかのアプリケーションからPDF変換する時は、それぞれ変換するファイルのアプリケーションのインスタンスを明示的に作らなくてはいけません。
(既に開いているアプリケーションがあるなら、GetObject関数でそれを操作するのも一つの方法です。)

この、AdobePDFMakerForOfficeライブラリを使う方法は、Web上で見つけたコードに少し手を加えたものです。
ハック的な方法として出回っているのですが、変換元のファイルを明確に指定しずらい所や、特にワードの場合は他にインスタンスが開いているとNormal.dotの関係で思い通りの操作をするのが難しかったり(Wordのウィンドウを閉じられない)して、個人的にはあまり好みではありません。でも、コードとして分かりやすいのはこちらかな。


AdobePDFMakerX はうまく使えない(おまけ)

最後に残った AdobePDFMakerX ライブラリですが、これはどうにも活用できませんでした。

オブジェクトブラウザで見ている限りでは、オブジェクトの数も多く、差し込み印刷をPDFに変換するオブジェクトや、メール送信するオブジェクトもあるので、おそらくAdobePDFMakerXが活用できればいろいろできそうなのですが、どうにも思ったとおりに動かない。ひょっとしたら、いくつかのオブジェクトをうまく順番に使っていくとできるのかもしれません。誰か腕に覚えのある方、チャレンジしてみません?



読者の方のおかげです

実は、記事の公開当初、AdobePDFMakerForOfficeライブラリを使った方法は、CreatePDFExメソッドで異常終了しているようで、上手く動かないと書いていました。
その後、2013年2月下旬に、問い合わせフォームから、下記のようなメッセージをいただいたのです(一部抜粋)。


 さて、「私の環境では完璧には動きません。」とありましたが、「Wordファイルにコードを書いて、そのファイルのPDFを作る場合」に「myPDFMaker.CreatePDFExのところでスクリプトが異常終了」するのは当然のことと思われますが、如何でしょうか!? というのは、WordファイルをPDFMakerでpdf化する過程では、pdf化するWordファイルを一度閉じて再度開くという操作が行われるので、その文書にPDFMakerを呼び出すVBAモジュールが組み込まれていると、PDFMakerでの処理が済んでVBAに制御が戻そうとしても戻せないからです。例えば、Normal.dotのようにWordアプリケーションが起動している間はずっと開かれたままのファイルにpdf化モジュールを組み込んでみてはどうでしょうか。多分、問題なくと動作すると思うのですが… 一度御試し下さい。因みに、当方ではそのような方法で問題なく動作しました。

いやー、全くそのとおり。一人でモンモンとやっていると、気づかないものです。
遅まきながら、2013年3月11日、後半を大幅に書き直しました。ご指摘、ありがとうございました。

こんなふうに、おかしなことを書いていることがあるかもしれないので、お気づきの際は about and comments から教えていただけると助かります。



参考資料

Enum PDFMakerSettings

PDFMAKERAPILib
Enum PDFMakerSettings
オブジェクトブラウザから転記 メモは推測です
Definition Name 10進数 Decimal 16進数 Hexadecimal Word Default Setting
29360151
(&H1C00017)
Excel Default Setting
138412055
(&H8400017)
Memo
Const kConversionRoute = -2147483648 (&H80000000) kConversionRoute -2147483648 &H80000000      
Const kAllEnabled = -1 (&HFFFFFFFF) kAllEnabled -1 &HFFFFFFFF      
Const kCreateLinks = 1 kCreateLinks 1 &H1 TRUE TRUE リンクを追加
Const kCreateBookmarks = 2 kCreateBookmarks 2 &H2 TRUE TRUE しおりを追加
Const kCreateDocInfo = 4 kCreateDocInfo 4 &H4 TRUE TRUE 文書情報を追加
Const kCreateComments = 8 kCreateComments 8 &H8     表示されたコメントをノート注釈に変換
Const kCreateTags = 16 (&H10) kCreateTags 16 &H10 TRUE TRUE タグ付けの詳細設定を有効
Const kCreateLayers = 32 (&H20) kCreateLayers 32 &H20      
Const kCreateMetadata = 64 (&H40) kCreateMetadata 64 &H40      
Const kAttachSource = 128 (&H80) kAttachSource 128 &H80      
Const kFitToOnePage = 256 (&H100) kFitToOnePage 256 &H100      
Const kPreserveSpotColor = 512 (&H200) kPreserveSpotColor 512 &H200      
Const kUseSavedLayerSettings = 512 (&H200) kUseSavedLayerSettings 512 &H200      
Const kEmbedScale = 1024 (&H400) kEmbedScale 1024 &H400      
Const kPrintCropMarks = 1024 (&H400) kPrintCropMarks 1024 &H400      
Const kAllowBleeds = 2048 (&H800) kAllowBleeds 2048 &H800      
Const kPrintBleedMarks = 4096 (&H1000) kPrintBleedMarks 4096 &H1000      
Const kConvertMultimedia = 8192 (&H2000) kConvertMultimedia 8192 &H2000      
Const kConvertHiddenSlides = 16384 (&H4000) kConvertHiddenSlides 16384 &H4000      
Const kSaveSlideTransitions = 32768 (&H8000) kSaveSlideTransitions 32768 &H8000      
Const kSaveAnimations = 65536 (&H10000) kSaveAnimations 65536 &H10000      
Const kLayoutBasedOnPrinterSettings = 131072 (&H20000) kLayoutBasedOnPrinterSettings 131072 &H20000      
Const kAlwaysFlattenLayers = 262144 (&H40000) kAlwaysFlattenLayers 262144 &H40000      
Const kConvertSpeakerNotes = 524288 (&H80000) kConvertSpeakerNotes 524288 &H80000      
Const kCreateTextNotes = 524288 (&H80000) kCreateTextNotes 524288 &H80000      
Const kOpenLayerPane = 1048576 (&H100000) kOpenLayerPane 1048576 &H100000      
Const kConvertAllPages = 2097152 (&H200000) kConvertAllPages 2097152 &H200000 TRUE    
Const kCreateXrefLinks = 4194304 (&H400000) kCreateXrefLinks 4194304 &H400000 TRUE TRUE 相互参照と目次をリンクに変換
Const kCreateThreads = 8388608 (&H800000) kCreateThreads 8388608 &H800000 TRUE   見出しをしおりに変換?
Const kCreateFootnoteLinks = 16777216 (&H1000000) kCreateFootnoteLinks 16777216 &H1000000 TRUE   脚注と文末脚注のリンクを変換
Const kPreserveTransparency = 33554432 (&H2000000) kPreserveTransparency 33554432 &H2000000      
Const kExcludeObjectsWithoutMetadata = 67108864 (&H4000000) kExcludeObjectsWithoutMetadata 67108864 &H4000000      
Const kPromptForSheetSelection = 134217728 (&H8000000) kPromptForSheetSelection 134217728 &H8000000   TRUE Excelのシートを確認
Const kAdvancedTagging = 268435456 (&H10000000) kAdvancedTagging 268435456 &H10000000      
Const kPDFACompliance = 536870912 (&H20000000) kPDFACompliance 536870912 &H20000000      
Const kEmbed3DContent = 1073741824 (&H40000000) kEmbed3DContent 1073741824 &H40000000      




Class securitySettings

Structure containing the security settings (Second Tab of Conversion Settings Dialog)

PDFMAKERAPILib
Class securitySettings
オブジェクトブラウザから転記
Definition Note
Property AllowedChanges As tagAllowedChangesEnum Types of Changes Allowed for this Document
Property AllowedPermissionsBits As AllowedPermissions Bit Fields of Allowed Changes

Property AttachmentPasswd As String The File Attachment Password
Property AttachmentPasswdNeeded As Boolean Is the File Attachment Password Set?

Property EnableCopyingContent As Boolean

Enable Copying of text, Images and other Contents

Property EnablePlaintextMetadata As Boolean Enable Plain Text Metadata (Acrobat >= 6.0)

Property EnableTextAccessibility As Boolean Enable text access for visually impaired

Property EncryptAttachmentsOnly As Boolean Should we encrypt only Attachments?

Property KeyLen As tagKeyLengthEnum The Security Strength

Property OpenDocPasswd As String The Open Document Password

Property OpenDocPasswdNeeded As Boolean Is the Document Open Password Set?

Property PermsPasswd As String The Permissions Password

Property PermsPasswdNeeded As Boolean Is the Permissions Password Set?

Property PrintingModeAllowed As tagPrintingModesAllowedEnum Types of Printing Allowed for this Document



Class ISettings

AdobePDFMakerForOffice
Class ISettings
オブジェクトブラウザから転記
Name Note
Property AddBookmarks Boolean

Property AddLinks Boolean

Property AddTags Boolean

Property AdvancedTagging Boolean

Property AllowBleeds Boolean

Property AlwaysFlattenLayers Boolean

Property AttachSourceFile Boolean

Property ConversionRoute Boolean

Property ConvertAllPages Boolean

Property ConvertComments Boolean

Property ConvertHiddenSlides Boolean

Property ConvertMultimedia Boolean

Property ConvertSpeakerNotes Boolean

Property CreateDocInfo Boolean

Property CreateFootnoteLinks Boolean

Property CreateLayers Boolean

Property CreateMetadata Boolean

Property CreateTextNotes Boolean

Property CreateThreads Boolean

Property CreateXrefLinks Boolean

Property FitToOnePage Boolean

Sub GetConversionRange(pvRange) conversion range

Property InvokedFromFeat Boolean

Property IsAutomation Boolean

Property IsConversionSilent Boolean

Property JobOptions String

Property LayoutBasedOnPrinterSettings Boolean

Property OpenLayerPane Boolean

Property OutputPDFFileName String

Property PDFACompliance Boolean

Property PreserveSpotColor Boolean

Property PreserveTransparency Boolean

Property PrintActivesheetOnly Boolean

Property PrintBleedMarks Boolean

Property PrintCropMarks Boolean

Property PromptForPDFFilename Boolean

Property PromptForSheetSelection Boolean

Property Reserved Long

Property SaveAnimations Boolean

Property SaveSlideTransitions Object

Property SendForReview Boolean

Property SendViaEmail Boolean

Sub SetConversionRange(pvRange) conversion range

Property ShouldShowProgressDialog Boolean

Property ViewPDFFile Boolean



Twitter from tokidokidokin
アーカイブ
Portfolio Categories
  • カテゴリーなし
Portfolio Tags