リンクをクリップボードにコピー
コピー完了
Adobe Acrobat Pro DCについて、
エクセルのVBA機能を利用して、「Adobe PDFとして保存」をしたいのですが
サンプルコードみたいなものは無いでしょうか?
「Adobe PDFとして保存」は、エクセルのVBAでは不可でしょうか?
もし、可の場合、ファイルの中にある2つのファイルを結合する
サンプルコードもあれば御教授頂きたくお願い致します。
もし、不可の場合、手動で「Adobe PDFとして保存」で対応する以外の方法は無いでしょうか?
リンクをクリップボードにコピー
コピー完了
こちらはExcelのサポートではありませんのでExcelのVBAの情報は無いです。
検索エンジンで「Excel VBA PDF保存」等のキーワードで検索すると沢山情報が引っかかって来ると思います。
リンクをクリップボードにコピー
コピー完了
ありがとうございます。
通常のPDF保存方法のプログラミングは解決しています。
officeエクセル側では、恐らく上記同様な回答Adobe側でとなると思います。
しおり化するためには、「Adobe PDFとして保存」、
adobeの機能としてのPDFmakerとしての機能ですので、こちらに問合せさせて頂きました。
リンクをクリップボードにコピー
コピー完了
Acrobatを利用する開発案件については公開されているSDKがすべてです。
https://helpx.adobe.com/jp/x-productkb/policy-pricing/5267.html
個々の開発にかかわるものは通常、ユーザーサポートで行われるものではありません。
また本コミュニティはサポートそのものではなく、ユーザー同士の情報交換の場になっています。
リンクをクリップボードにコピー
コピー完了
Acrobat SDKの情報ありがとうございます。
勉強する必要がありそうですね。もしくは、有償サポートに依頼するかですかね。
検討させて頂きます。
<追伸>
上記HP、ほとんどリンクが切れております。
また、情報収集が必要なため、初めにアドビカスタマーサポートに問合せをしたところ
こちらに案内された次第です。
>サポートコミュニティは掲示板のようになっており、
>弊社スタッフだけでなく一般のユーザー様も回答ができるようになっております。
リンクをクリップボードにコピー
コピー完了
リンクのほう、失礼しました。
直接のSDKページは確か下記だと思います。
https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/
改めて確認すると現在の日本語ページが下記でそのリンク先は上記でした。
https://helpx.adobe.com/jp/acrobat/kb/2558.html
リンクをクリップボードにコピー
コピー完了
Excel経由での操作となるとOLE経由での処理になりますが、資料はほとんどありませんので機能の確認自体がトライ&エラーで進めるしかないのが現状です。PDFの処理を考えるのであれば、Excelから一旦PDFを書き出した上でAcrobat上でJavaScriptまたはワークフローを利用したバッチ処理を通すのが楽なように思います。また、このJavaScriptで操作ができないようであればOLE経由でも操作が不可能なはずです。
リンクをクリップボードにコピー
コピー完了
ありがとうございます。
資料がほとんどないとのこと、承知致しました。
Acrobat上でJavaScriptでの操作も検討致します。
リンクをクリップボードにコピー
コピー完了
PDFMakerAPIを使った、Excel VBAコードを記載しておきます。
Sub Exec_Click()
Dim pdfMakerApp As Object
Dim pdfConvertSetting As Object
Dim bitField As Long
Dim retVal
Set pdfMakerApp = CreateObject("PDFMakerAPI.PDFMakerApp")
Set pdfConvertSetting = CreateObject("PDFMakerAPI.ConversionSettings")
' デフォルト設定
pdfConvertSetting.LoadDefaultSettings
pdfConvertSetting.GetConversionParameters bitField
'しおりOFF
'bitField = bitField And (Not 2)
'しおりON
bitField = bitField Or 2
pdfConvertSetting.SetConversionParameters bitField
' PDF保存
retVal = pdfMakerApp.CreatePDF("C:\Work\Text.xlsx", "C:\Work\Test.pdf", pdfConvertSetting)
Set pdfConvertSetting = Nothing
Set pdfMakerApp = Nothing
End Sub
リンクをクリップボードにコピー
コピー完了
御連絡が遅くなり、申し訳ございません。
検証致しました。思い通りに動きました。
ありがとうございます!
これをもとに意図したプログラムにします!
このあたりの知識はどこから身に着けることが出来るのでしょうか?
リンクをクリップボードにコピー
コピー完了
このあたりの知識はどこから身に着けることが出来るのでしょうか?
やはり、好奇心と試してみる機会を増やすって感じでしょうか。
これを繰り返す事で、解決したい課題の辺りをつけやすくなり、情報にもたどり着きやすくなると思います。
リンクをクリップボードにコピー
コピー完了
印刷時に1シート内にある複数の頁が纏めて1頁に印刷されてしまうため、
頁ごとに印刷は出来るでしょうか?
また、もし出来るのであれば
開いているエクセルファイルへに対して、下記処理をしたいのですが可能でしょうか?
retVal = pdfMakerApp.CreatePDF("C:\Work\Text.xlsx", "C:\Work\Test.pdf", pdfConvertSetting)
リンクをクリップボードにコピー
コピー完了
印刷時に1シート内にある複数の頁が纏めて1頁に印刷されてしまうため、
頁ごとに印刷は出来るでしょうか?
PDFMakerのパラメータが以下の状態になっているからではないでしょうか?
この変換オプションを、「100%表示」にすればOKでしょうか?
開いているエクセルファイルへに対して、下記処理をしたいのですが可能でしょうか?
retVal = pdfMakerApp.CreatePDF("C:\Work\Text.xlsx", "C:\Work\Test.pdf", pdfConvertSetting)
Excelの[Acrobatタブ]↓[PDFを作成]では良くない理由を教えてもらえないでしょうか?
たとえば、「複数の人がExcelからPDFを作成するけど、設定画面とか出さずに、統一パラメータで1クリックで出力したい」とかです。
リンクをクリップボードにコピー
コピー完了
その領域に達するのは、なかなかの道のりだと容易に想像出来てしまうので、
本当すごいと思います。ありがとうございます。
御推察通り、
特に不慣れな人のケースを考えて1クリックで処理したく考えています。
上記難しいかなと思い、[Acrobatタブ]↓[PDFを作成]でのプログラムを作成し、
今、デバック作業をしつつ、「メモリ不足」さらに「そのあとの処理でFORMが閉じる」という
症状に対して悩んでいるところです。
リンクをクリップボードにコピー
コピー完了
Excelのリボン([アドイン]タブ)にボタンを追加して出力するマクロを記載します。
個人用マクロブックに記載して下さい。
(C:\Users\<ユーザー>\AppData\Roaming\Microsoft\Excel\XLSTART\personal.xlsb)
Option Explicit
' Workbook Open
Private Sub Workbook_Open()
Dim cmdBarCtrl As CommandBarControl
Dim cmdBarBtn As CommandBarButton
Dim cmdBar As CommandBar
Set cmdBar = Application.CommandBars("Worksheet Menu Bar")
For Each cmdBarCtrl In cmdBar.Controls
cmdBarCtrl.Delete
Next
Set cmdBarCtrl = ThisWorkbook.Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
Set cmdBarBtn = cmdBarCtrl
cmdBarBtn.Caption = "PDF出力"
cmdBarBtn.TooltipText = "PDFとして出力"
cmdBarBtn.Style = msoButtonCaption
cmdBarCtrl.OnAction = "CostomPDFExport"
Set cmdBarCtrl = Nothing
End Sub
Option Explicit
' カスタムPDF出力
Sub CostomPDFExport()
Dim objFso As Object
Set objFso = CreateObject("Scripting.FileSystemObject")
' アクティブブックが保存されているか
If IsSavedBook(ActiveWorkbook.FullName) = False Then
MsgBox "Excelブックを保存して下さい。"
Exit Sub
End If
' アクティブブックの変更が保存されているか
If ActiveWorkbook.Saved = False Then
MsgBox "Excelブックを保存して下さい。"
Exit Sub
End If
' 保存ファイル名
Dim posExt As Long
Dim baseFilePath As String
Dim initOutPath As String
initOutPath = objFso.GetParentFolderName(ActiveWorkbook.FullName) & "\" & objFso.GetBaseName(ActiveWorkbook.FullName) & ".pdf"
' PDF保存ダイアログボックス
Dim PDFPath As Variant
PDFPath = Application.GetSaveAsFilename(InitialFileName:=initOutPath, FileFilter:="PDFファイル,*.pdf")
If PDFPath = False Then
Exit Sub
End If
' テンポラリファイル保存
Dim TempPath As String
TempPath = objFso.GetSpecialFolder(2) & "\" & objFso.GetBaseName(objFso.GetTempName) & ".xlsx"
ActiveWorkbook.SaveCopyAs TempPath
' PDFMaker出力
OutPDFMaker TempPath, PDFPath
Kill TempPath
Set objFso = Nothing
End Sub
' Bookが保存されているか
Function IsSavedBook(filePath) As Boolean
' パス区切り文字が入っていれば保存済みとみなす
If (InStr(1, filePath, "\") > 0) Then
IsSavedBook = True
Else
IsSavedBook = False
End If
End Function
' PDFMaker出力
Sub OutPDFMaker(inPath, outPath)
Dim pdfMakerApp As Object
Dim pdfConvertSetting As Object
Dim settingsFile As String
Dim bitField As Long
Dim retVal
Set pdfMakerApp = CreateObject("PDFMakerAPI.PDFMakerApp")
Set pdfConvertSetting = CreateObject("PDFMakerAPI.ConversionSettings")
' デフォルト設定
pdfConvertSetting.GetAppConversionDefaults 2, bitField, settingsFile
' しおりOFF/ON
'bitField = bitField And (Not 2)
bitField = bitField Or 2
' ページフィット
bitField = bitField And (Not 256)
'bitField = bitField Or 256
' 全ページ
'bitField = bitField And (Not 2097152)
bitField = bitField Or 2097152
pdfConvertSetting.SetConversionParameters bitField
' PDF保存
retVal = pdfMakerApp.CreatePDF(inPath, outPath, pdfConvertSetting)
Set pdfConvertSetting = Nothing
Set pdfMakerApp = Nothing
End Sub
パラメーターは、bitField にフラグON/OFFを設定して下さい。
リンクをクリップボードにコピー
コピー完了
プログラム走らせました。問題なく希望通りの動きをしました。
こちらの意を組んでいただきありがとうございます。
アドイン機能追加、また細部までお気遣いを頂きありがとうございます。
本当に、感謝申し上げます。
<追記>
他ユーザへの記録として、.xlsx ⇒ .xlsmに変更致しました。