AcroExch.PDDoc: Create メソッド

TOP > AcroExch.PDDoc > Create      [...]


説明

空のPDFドキュメント(AcroExch.PDDocインスタンス)を作成します。

形式

VARIANT_BOOL Create();

引数

  1. 無し。

戻り値

  • -1:成功。作成出来た。
  • 0:失敗。またはAcrobatアプリケーションがその機能をサポートしていない。

動作するバージョン

VersionAdobe
Acrobat
備考
4-Acrobat 4.0    ※Windows 98SE + Excel 2000
5
-
Acrobat 5.0.5
6
-
Acrobat 6.0.3 Pro
7-Acrobat 7.0.9 Pro
Acrobat 7.1.4 Pro
8OKAcrobat 8.1.2 Pro
9-Acrobat 9.3.2 Extended
10-Acrobat X (10.1.8) Extended
11-Acrobat XI (11.0.04) Extended
  • OK = 動作する。
  • NO = 動作しない。 戻り値が0を返す。
  • - = 未確認。

サンプル:ExcelのVBA

説明:空のPDFファイルを作成し、それにTest01_1.pdfファイルの最初から裏表紙の前のページまでを挿入する。
そしてTest01_NEW.pdfファイルとして出力する。しおりも同時に入れる。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定を事前にする。

 

 

001 Sub AcroExch_PDDoc_Create() 002 003 Dim AcroPDDocNew As New Acrobat.AcroPDDoc 004 Dim AcroPDDocAdd As New Acrobat.AcroPDDoc 005 Dim lRet As Long 006 Dim lGetNumPages As Long 007 008 '空のPDFファイルを作成する 009 lRet = AcroPDDocNew.Create() 010 011 '空のPDFファイルに追加する 012 lRet = AcroPDDocAdd.Open("E:\Test01_1.pdf") 013 lGetNumPages = AcroPDDocAdd.GetNumPages() 014 '1ページ目から裏表紙の前のページまでを最初のページの前に挿入。 015 lRet = AcroPDDocNew.InsertPages(-1, _ 016 AcroPDDocAdd, 0, lGetNumPages - 1, True) 017 Debug.Print "AcroPDDocNew.GetNumPages=" & _ 018 AcroPDDocNew.GetNumPages 019 lRet = AcroPDDocAdd.Close() 020 021 '新しいPDFファイルを別名で保存する 022 lRet = AcroPDDocNew.Save(1, "E:\Test01_NEW.pdf") 023 lRet = AcroPDDocNew.Close() 024 025 'オブジェクトを強制開放する 026 Set AcroPDDocAdd = Nothing 027 Set AcroPDDocNew = Nothing 028 029 End Sub


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 

補足

  • 上記サンプルはサイレント(Acrobat本体が画面に表示されない)で実行されます。
  • Create メソッドの後に、Saveメソッド、そしてCloseメソッドを実行すれば0ページのPDFドキュメントが作成されます。
     
    例)
    001 Sub AcroExch_PDDoc_Create2() 002 Dim AcroPDDocNew As New Acrobat.AcroPDDoc 003 Dim AcroPDDocAdd As New Acrobat.AcroPDDoc 004 Dim lRet As Long 005 Dim lGetNumPages As Long 006 007 '空のPDFファイルを作成する 008 lRet = AcroPDDocNew.Create() 009 '空のPDFファイルを保存する 010 lRet = AcroPDDocNew.Save(1, "E:¥Test01_NEW.pdf") 011 lRet = AcroPDDocNew.Close() 012 013 'オブジェクトを強制開放する 014 Set AcroPDDocAdd = Nothing 015 Set AcroPDDocNew = Nothing 016 End Sub

動作確認環境

  • WindowsXP Pro(+ SP3) +
    Acrobat 8.1.2 Pro + Office 2003 + フルMicrosoftUpdate

戻る

「AcroExch.PDDoc: Create メソッド」への16件のフィードバック

  1. 始めまして、フクイです。

    '空のPDFファイルを作成する
    lRet = AcroPDDocNew.Create()

    この行で「サーバーの実行に失敗しました。」や「メモリリソースが不足しているため、実行出来ませんでした。」とエラーが出ます。
    変数の宣言等はしっかり出来ていると思います。今までは実行出来ていたのに急に出来なくなりました。
    解決策等あれば、よろしくお願いします。

  2. フクイ さん はじめまして。

    >・・今までは実行出来ていたのに急に・・

    色々と考えられます。
    1.タスクマネージャーを起動する。不要なアプリが起動していないかを詳細に確認します。
    2.OLEの起動(Open等)操作に問題が有る。
     2-1.多重Open操作している。Closeが漏れている。
     2-2.多数のPDFを開いている。Closeが漏れている。
     この部分はデバックモードでステップ実行して確認する必要が有ります。
    3.OSの再起動。<ー但し、上記(1と2)の状態を確認した後で。そうしないと原因を特定できない。これで直る場合はOSが不安定だった可能性有りです。この手の原因追求は難しいです。

    エラーメッセージから判断すると「実行環境の問題」と予想されます。この場合は、PDF操作以外の実行環境も隅々まで調べないといけないです。

    <追加1>
    多数のPDFを処理するときもマレに出ます。
    lRet = objAcroApp.CloseAllDocs
    を全ての処理を開始する前に実行して見てください。連続処理をする一番最初に入れます。これで強制的にメモリ上に(Acrobatの)OLEを乗せる操作をします。同時にClose未処理を解決します。これに関する詳細な説明は長くなるので今は省略。

  3. 管理人さん

    即行の返信ありがとうございます。
    早速1.~3.を確認してみましたが、どれも当てはまりません(素人目で見てですが、、、)。
    lRet = objAcroApp.CloseAllDocs 
    を挿入すると実行出来ましたが、2回目の実行が出来ないです。
    やはり、PCの問題なのでしょうか。

  4. 追伸.
    今度は lRet = objAcroApp.CloseAllDocsの行でエラーが出るようになりました。

  5. 管理人さん

    即行の返信ありがとうございます。
    早速1.~3.までの項目を確認しましたがどれも違う様です(素人目で見てですが、、、)。そこで、 lRet = objAcroApp.CloseAllDocs を追加したところ実行する事ができましたが、2回目はこの行で同じエラーがでる様になりました。やはりPCの問題なのでしょうか。

  6. フクイ さんへ。
    これはソースコードを見てみないと分からないです。

    **<非表示>**。

    そこで、
     lRet = objAcroApp.CloseAllDocs
    な感じで、全ての半角文字を無条件で全角に変換してコメントしてください。不要なロジックは削除しても構いませんが、全体の流れやループ状態はできるだけ元の状態でお願いします。公開できる部分だけで結構です。こちらで半角に戻して見てみます。
    処理の流れに問題が有る「かも?」しれません。

  7. 管理人さん
    コメントの連投すいません。不慣れな者で色々と勘違いしていました。

    今、使用しているコードを記載します。ワークシートと連動しているので見づらい部分があるかとは思いますがよろしくお願いします。

    001 Sub PDF結合()
    002 Set ws = Worksheets("PDF変換")
    003 Dim buf As String
    004 Dim cnt As Integer
    005 Dim fpath As String
    006
    007 cnt = 1
    008
    009 fpath = ThisWorkbook.Path
    010
    011 'PDFファイルの個数をカウント
    012 buf = Dir(fpath & "¥*.pdf")
    013 Do While buf <> ""
    014 cnt = cnt + 1
    015 buf = Dir()
    016 Loop
    017
    018 Dim folderPath As String
    019 Dim objAcroApp As New Acrobat.AcroApp
    020 Dim acrobatObjUnion As New Acrobat.AcroPDDoc
    021 Dim acrobatObjInsert As New Acrobat.AcroPDDoc
    022 Dim pdfID_Union As Long
    023 Dim pdfID_Insert As Long
    024 Dim OutputFileName As String
    025 Dim OutputFilePath As String
    026 Dim InputFileName(1) As String
    027 Dim InputFilePath As String
    028 Dim UnipageNum As Long
    029 Dim InsPageNum As Long
    030 Dim i As Integer
    031
    032 pdfID_Union = objAcroApp.CloseAllDocs
    033
    034 For j = 1 To (cnt - 1) / 2
    035
    036 'ファイルのパス
    037 folderPath = ThisWorkbook.Path
    038
    039 '保存したいファイル名
    040 OutputFileName = Cells(j + 1, "B").Value
    041
    042 '保存したいファイルのパス
    043 OutputFilePath = folderPath & "¥" & Range("G3").Value & "¥" & OutputFileName
    044
    045 'デバック
    046 Debug.Print OutputFilePath
    047
    048 '結合したいファイル名を保存
    049 InputFileName(0) = Cells(2 * j, "A").Value
    050 InputFileName(1) = Cells(2 * j + 1, "A").Value
    051
    052 '結合したファイルのページ数
    053 UnipageNum = 0
    054
    055 '空のファイルを作成
    056 pdfID_Union = acrobatObjUnion.Create()
    057
    058 '2つのファイルを結合
    059 For i = 0 To 1
    060 '空のファイルに結合したいファイルのパス
    061 InputFilePath = folderPath & "¥" & InputFileName(i)
    062
    063 '空のファイルに追加
    064 pdfID_Insert = acrobatObjInsert.Open(InputFilePath)
    065 InsPageNum = acrobatObjInsert.GetNumPages()
    066 pdfID_Union = acrobatObjUnion.InsertPages(UnipageNum - 1, acrobatObjInsert, 0, InsPageNum, True)
    067 pdfID_Insert = acrobatObjInsert.Close()
    068
    069 'ページ数を更新
    070 UnipageNum = UnipageNum + InsPageNum
    071
    072 Next i
    073
    074 '結合したファイルを保存する
    075 pdfID_Union = acrobatObjUnion.Save(PDSaveFull, OutputFilePath)
    076
    077 '結合したファイルを閉じる
    078 pdfID_Union = acrobatObjUnion.Close
    079
    080 'オブジェクトの強制開放
    081 Set acrobatObjInsert = Nothing
    082 Set acrobatObjUnion = Nothing
    083 Next j
    084
    085 MsgBox "結合が終わりました。" & Chr(13) & Range("G3").Value & "のファイルに保存します。"
    086
    087 End Sub

  8. フクイ さんへ。
    083 行目の後に以下を追加してみてください。

    '★アプリケーションの終了
    lRet = objAcroApp.Hide
    lRet = objAcroApp.Exit
    Set objAcroApp = Nothing

    以上で、再度テストをお願いします。
    テスト結果を見てから、上記理由の解説をします。

    それと、PDF処理とは関係ないですが、標準モジュールの先頭には
    Option Explicit
    を入れた方がイイと思います。

  9. 管理人さん

    083行目以降に3行追加しましたが、032行目で同じエラーが出ました。また、032行目をコメントアウトして実行すると、追加した行でエラーが出ました。ちなみに、別PCでは実行する事が出来ました。タスクマネージャAcrobatアプリケーション・プロセスが終了する事を確認することも出来ました。

    エラーが出るPCのバージョン情報です。
    OS:windows 11 pro 21H2
    Acrobat:2022.001.20169
    Excel:Excel2019 64ビット

    会社内PCを使用しているので変なシステムエラーが出ないか若干不安です。

  10. フクイ さんへ。

    >Excel:Excel2019 64ビット

    タスクマネージャーを起動して、Excelプロセスが本当に64ビットで動いている事の再確認をお願いします。
    それと、エラーが出なかったPCのExcelも同様に確認してください。
    VBAの実行トラブルを避けるために私は32ビット版のOfficeをインストールする事にしています。
    この件については「excel 32bit 64bit 違い VBA」でネット検索するとイロイロと出てきます。
    64ビット版では駄目と言う訳ではないですが、私には未知の体験となるので、確認したいです。
    それとAcrobatプロセスも何ビットで動いているかもタスクマネージャーで確認してください。

    次に、再度、エラーが出るPCで以下の手順でテストをお願いします。

    1.Windowsを再起動する。
     これは以前のエラー状態を消す為です。
    2.032行目をコメント、083行目以降に追加したVBAで再度、テストする。
    3.正常終了時:
     タスクマネージャーでAcrobatプロセスが無い事を確認する。
    4.エラー発生時:
     タスクマネージャーでAcrobatプロセスの有り無しを確認する。

    Acrobatプロセスの数も見てください。エラーが出ると、次回に別のAcrobatプロセスが起動し、Windowsのシャットダウンまで残る場合が有ります。
    なお、AcrobatプロセスはPC環境により、メモリ上から消えるのに数秒(5,6秒以上)かかる場合が有るので注意してください。

    今は細かいところをクリアにして行くしか、手がない状態です。

  11. 管理人さん
    連日の対応ありがとうございます。感謝です。

    両方ともExcelのプロセスは64ビット、Acrobatプロセスは32ビットで動いていました。

    エラーが出るPCで手順通りにテストをしました。
    1回目は実行する事ができて、Acrobatプロセスも2つ現れたものの実行終了して数秒間残ってメモリ上から消えました。成功です。

    2回目の実行で056行目で同じエラーが出ました。Acrobatプロセスも同名のものが2つ消えずに残っていました。Acrobatプロセスを消して再度実行するもエラーが起こるようになりました。失敗です。

    それからPCを再起動して、Acrobatプロセスが残っていないことを確認し、再度実行しても056行目でエラーが出る様になりました。
    メモリ(アクティブなプライベートワーキングセット)の値が異なる2つのAcrobat.exeが消えずに残っています。

    実行する事が出来るPCでも同様の流れを試しましたが、エラーは出ず、Acrobatプロセスも残ることはありませんでした。

    後、気になる?ことは下の2つです
    USB2.0に保存しているxlsmを開いて実行している
    去年1年間はエラーが出ずに実行することが出来ていた

  12. フクイ さんへ。

    >1回目は・・・、Acrobatプロセスも2つ現れ・・・
    >・・・、成功です。

    Q1)
    2つですか・・。頂いたロジックで計4PDFの結合をステップ実行で確認しましたが、最後までプロセスは1つでした。Excelが64ビット環境だから?、とは想像できないです。
    どの時点でAcrobatプロセスが2つになるのかをVBAのステップ実行(F8)で確認していただけませんか? 多分、034行目だと思うんですが。ループの何回目かもお願いします。

    Q2)
    それとエラーが出るタイミングはループ(034行)の何回目かも教えてください。

    >PCを再起動して、・・・、056行目でエラーが出る・・・。

    OSの再起動でもエラーが出るなんて・・・。(涙目

    >メモリの値が異なる2つのAcrobat.exeが・・

    こちらは1つなんだけど・・。

    >USB2.0に保存してい・・

    Q3)
    エラーが出ないPCはUSB上で実行しているのならば、エラーが出るPCと同じ(C、D、・・)ドライブ上で実行してみてください。

    Q4)
    エラーが出るPCの実行フォルダのドライブはCドライブですか?
    もしそうなら、Cドライブ以外(USB等)も再テストをお願いします。

    ん~~、分からない。
    まだ、些細なことでもイイので、気になることが有れば書いてください。

  13. 管理人さん

    Q1)Q2)
    ループ1回目の056行目でエラーが出ました。プロセスを確認するとエラーが出たタイミングでadobe Acrobat DC(32ビット)が2つ現れました。

    Q3)Q4)
    今まで全てどのPCでもUSB上の実行でした。USBに保存してあるファイルを開いて実行しています。エラーの出るPCのディスクトップ上で実行しても結果はエラーでした。

    気になること

    そういえば、USBを新しい物に替えてます。(関係ないと思いますが)

    参照設定として7つチェックが入っています。
    Visual Basic For Applications
    Microsoft Excel 16.0 Object Library
    OLE Automation
    Microsoft Office 16.0 Object Library
    Microsoft Scripting Runtime
    Adobe Acrobat 10.0 Type Library
    Windows Script Host Object Model

    コメントのコードにはないのですが、実は、043行目にif文でOutputFilePathを割り当てる処理を入れて、試しに実行してみたところ、初めてのエラー(リソース不足の為、、、以下略)が現れました。それから、ずっとエラーが出っぱなしという感じです。このif文を追加する前は、しっかり実行出来ていました。

  14. フクイさんへ
    書きたい事は沢山有るのですが。その前に。

    エラーが出るExcelファイルのVBAソースとシート上のデータをクリップボード経由で新しいExcelファイルへコピーし、そして新しいExcelファイルで再テストをお願いします。

    理由ですが。古~いMs Officeは使うほど不要なデータが内部に残り、不可解なエラーが出る事が多々有りました。それを解消する方法として、クリップボード経由、又はメモ帳経由のテキスト形式で新しいOfficeファイルへコピーすることで解消していました。
    最近のMs Officeは試してないので(実は経費が無いので買えない!)分かりませんが、多分その手の悪い状態はいくらか残っていると想像しています。

    >・・043行目にif文で・・

    その悪い状態をヤヤ感じます。上記のテストをお願いします。

  15. 管理人さん

    メモ帳経由でコピペしましたが、同じ行でエラーが出ました。

    リソース不足のエラーを確認した後、少し時間をおいて実行するとサーバーの実行に失敗しましたとエラーの内容が変わります。

    ちなみに、別のPCでは実行することが出来ました。

  16. フクイさんへ
    最初から、見直しました。
    以下は要点と思っています。

    >・・今までは実行出来ていたのに急に・・

    >別PCでは実行する事が出来ました。

    >・・Acrobatプロセスを消して再度実行するもエラーが・・

    >・・PCを再起動して、・・056行目でエラーが・・

    >・・043行目にif文で・・

    可能ならば、エラーが出るPCのAcrobat DCの再インストール(アンインストール後にインストール)を希望します。作業の区切りではOSの再起動も入れてください。これでエラーが出なくなるとは思えないのですが、今できることはコレぐらいです。

    >メモリ(アクティブなプライベートワーキングセット)の値が
    >異なる2つのAcrobat.exeが消えずに残っています。

    Win10+Office 2019 64bit(英語版、体験版?)+Acrobat XI 環境で動作確認しましたが、プロセスは1つでした。この部分は後回しです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください