TOP > AcroExch.PDDoc > Create [...]
説明
空のPDFドキュメント(AcroExch.PDDocインスタンス)を作成します。
形式
VARIANT_BOOL Create();
引数
- 無し。
戻り値
- -1:成功。作成出来た。
- 0:失敗。またはAcrobatアプリケーションがその機能をサポートしていない。
動作するバージョン
Version | Adobe 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 |
8 | OK | Acrobat 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
< 戻る >
始めまして、フクイです。
'空のPDFファイルを作成する
lRet = AcroPDDocNew.Create()
この行で「サーバーの実行に失敗しました。」や「メモリリソースが不足しているため、実行出来ませんでした。」とエラーが出ます。
変数の宣言等はしっかり出来ていると思います。今までは実行出来ていたのに急に出来なくなりました。
解決策等あれば、よろしくお願いします。
フクイ さん はじめまして。
>・・今までは実行出来ていたのに急に・・
色々と考えられます。
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未処理を解決します。これに関する詳細な説明は長くなるので今は省略。
管理人さん
即行の返信ありがとうございます。
早速1.~3.を確認してみましたが、どれも当てはまりません(素人目で見てですが、、、)。
lRet = objAcroApp.CloseAllDocs
を挿入すると実行出来ましたが、2回目の実行が出来ないです。
やはり、PCの問題なのでしょうか。
追伸.
今度は lRet = objAcroApp.CloseAllDocsの行でエラーが出るようになりました。
管理人さん
即行の返信ありがとうございます。
早速1.~3.までの項目を確認しましたがどれも違う様です(素人目で見てですが、、、)。そこで、 lRet = objAcroApp.CloseAllDocs を追加したところ実行する事ができましたが、2回目はこの行で同じエラーがでる様になりました。やはりPCの問題なのでしょうか。
フクイ さんへ。
これはソースコードを見てみないと分からないです。
**<非表示>**。
そこで、
lRet = objAcroApp.CloseAllDocs
な感じで、全ての半角文字を無条件で全角に変換してコメントしてください。不要なロジックは削除しても構いませんが、全体の流れやループ状態はできるだけ元の状態でお願いします。公開できる部分だけで結構です。こちらで半角に戻して見てみます。
処理の流れに問題が有る「かも?」しれません。
管理人さん
コメントの連投すいません。不慣れな者で色々と勘違いしていました。
今、使用しているコードを記載します。ワークシートと連動しているので見づらい部分があるかとは思いますがよろしくお願いします。
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
フクイ さんへ。
083 行目の後に以下を追加してみてください。
'★アプリケーションの終了
lRet = objAcroApp.Hide
lRet = objAcroApp.Exit
Set objAcroApp = Nothing
以上で、再度テストをお願いします。
テスト結果を見てから、上記理由の解説をします。
それと、PDF処理とは関係ないですが、標準モジュールの先頭には
Option Explicit
を入れた方がイイと思います。
管理人さん
083行目以降に3行追加しましたが、032行目で同じエラーが出ました。また、032行目をコメントアウトして実行すると、追加した行でエラーが出ました。ちなみに、別PCでは実行する事が出来ました。タスクマネージャAcrobatアプリケーション・プロセスが終了する事を確認することも出来ました。
エラーが出るPCのバージョン情報です。
OS:windows 11 pro 21H2
Acrobat:2022.001.20169
Excel:Excel2019 64ビット
会社内PCを使用しているので変なシステムエラーが出ないか若干不安です。
フクイ さんへ。
>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秒以上)かかる場合が有るので注意してください。
今は細かいところをクリアにして行くしか、手がない状態です。
管理人さん
連日の対応ありがとうございます。感謝です。
両方とも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年間はエラーが出ずに実行することが出来ていた
フクイ さんへ。
>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等)も再テストをお願いします。
ん~~、分からない。
まだ、些細なことでもイイので、気になることが有れば書いてください。
管理人さん
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文を追加する前は、しっかり実行出来ていました。
フクイさんへ
書きたい事は沢山有るのですが。その前に。
エラーが出るExcelファイルのVBAソースとシート上のデータをクリップボード経由で新しいExcelファイルへコピーし、そして新しいExcelファイルで再テストをお願いします。
理由ですが。古~いMs Officeは使うほど不要なデータが内部に残り、不可解なエラーが出る事が多々有りました。それを解消する方法として、クリップボード経由、又はメモ帳経由のテキスト形式で新しいOfficeファイルへコピーすることで解消していました。
最近のMs Officeは試してないので(実は経費が無いので買えない!)分かりませんが、多分その手の悪い状態はいくらか残っていると想像しています。
>・・043行目にif文で・・
その悪い状態をヤヤ感じます。上記のテストをお願いします。
管理人さん
メモ帳経由でコピペしましたが、同じ行でエラーが出ました。
リソース不足のエラーを確認した後、少し時間をおいて実行するとサーバーの実行に失敗しましたとエラーの内容が変わります。
ちなみに、別のPCでは実行することが出来ました。
フクイさんへ
最初から、見直しました。
以下は要点と思っています。
>・・今までは実行出来ていたのに急に・・
>別PCでは実行する事が出来ました。
>・・Acrobatプロセスを消して再度実行するもエラーが・・
>・・PCを再起動して、・・056行目でエラーが・・
>・・043行目にif文で・・
可能ならば、エラーが出るPCのAcrobat DCの再インストール(アンインストール後にインストール)を希望します。作業の区切りではOSの再起動も入れてください。これでエラーが出なくなるとは思えないのですが、今できることはコレぐらいです。
>メモリ(アクティブなプライベートワーキングセット)の値が
>異なる2つのAcrobat.exeが消えずに残っています。
Win10+Office 2019 64bit(英語版、体験版?)+Acrobat XI 環境で動作確認しましたが、プロセスは1つでした。この部分は後回しです。