終了

EXCELのシートをVBAを使用して、PDFのしおりに出来るプログラムはありますか?

Community Beginner ,
Apr 05, 2021 Apr 05, 2021

Adobe Acrobat Pro DCについて、

エクセルのVBA機能を利用して、「Adobe PDFとして保存」をしたいのですが

サンプルコードみたいなものは無いでしょうか?

 「Adobe PDFとして保存」は、エクセルのVBAでは不可でしょうか?

 

もし、可の場合、ファイルの中にある2つのファイルを結合する

サンプルコードもあれば御教授頂きたくお願い致します。

 

もし、不可の場合、手動で「Adobe PDFとして保存」で対応する以外の方法は無いでしょうか?

キーワード
PDF の編集と変換
8.2K
翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 05, 2021 Apr 05, 2021

こちらはExcelのサポートではありませんのでExcelのVBAの情報は無いです。
検索エンジンで「Excel VBA PDF保存」等のキーワードで検索すると沢山情報が引っかかって来ると思います。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Apr 05, 2021 Apr 05, 2021

ありがとうございます。

 

通常のPDF保存方法のプログラミングは解決しています。

officeエクセル側では、恐らく上記同様な回答Adobe側でとなると思います。

 

しおり化するためには、「Adobe PDFとして保存」、

adobeの機能としてのPDFmakerとしての機能ですので、こちらに問合せさせて頂きました。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 05, 2021 Apr 05, 2021

Acrobatを利用する開発案件については公開されているSDKがすべてです。

https://helpx.adobe.com/jp/x-productkb/policy-pricing/5267.html

 

個々の開発にかかわるものは通常、ユーザーサポートで行われるものではありません。

また本コミュニティはサポートそのものではなく、ユーザー同士の情報交換の場になっています。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Apr 05, 2021 Apr 05, 2021

Acrobat SDKの情報ありがとうございます。

勉強する必要がありそうですね。もしくは、有償サポートに依頼するかですかね。

検討させて頂きます。

 

<追伸>

上記HP、ほとんどリンクが切れております。

 

また、情報収集が必要なため、初めにアドビカスタマーサポートに問合せをしたところ

こちらに案内された次第です。

>サポートコミュニティは掲示板のようになっており、

>弊社スタッフだけでなく一般のユーザー様も回答ができるようになっております。

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 06, 2021 Apr 06, 2021

リンクのほう、失礼しました。

直接のSDKページは確か下記だと思います。

https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/

 

改めて確認すると現在の日本語ページが下記でそのリンク先は上記でした。

https://helpx.adobe.com/jp/acrobat/kb/2558.html

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Apr 05, 2021 Apr 05, 2021

Excel経由での操作となるとOLE経由での処理になりますが、資料はほとんどありませんので機能の確認自体がトライ&エラーで進めるしかないのが現状です。PDFの処理を考えるのであれば、Excelから一旦PDFを書き出した上でAcrobat上でJavaScriptまたはワークフローを利用したバッチ処理を通すのが楽なように思います。また、このJavaScriptで操作ができないようであればOLE経由でも操作が不可能なはずです。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Apr 07, 2021 Apr 07, 2021

ありがとうございます。

 

資料がほとんどないとのこと、承知致しました。

Acrobat上でJavaScriptでの操作も検討致します。

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Apr 11, 2021 Apr 11, 2021

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

 

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Apr 25, 2021 Apr 25, 2021

御連絡が遅くなり、申し訳ございません。


検証致しました。思い通りに動きました。
ありがとうございます!
これをもとに意図したプログラムにします!


このあたりの知識はどこから身に着けることが出来るのでしょうか?

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Apr 26, 2021 Apr 26, 2021
quote

このあたりの知識はどこから身に着けることが出来るのでしょうか?

 

やはり、好奇心と試してみる機会を増やすって感じでしょうか。

これを繰り返す事で、解決したい課題の辺りをつけやすくなり、情報にもたどり着きやすくなると思います。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Apr 26, 2021 Apr 26, 2021

印刷時に1シート内にある複数の頁が纏めて1頁に印刷されてしまうため、
頁ごとに印刷は出来るでしょうか?
また、もし出来るのであれば
開いているエクセルファイルへに対して、下記処理をしたいのですが可能でしょうか?
retVal = pdfMakerApp.CreatePDF("C:\Work\Text.xlsx", "C:\Work\Test.pdf", pdfConvertSetting)

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Apr 26, 2021 Apr 26, 2021
quote

印刷時に1シート内にある複数の頁が纏めて1頁に印刷されてしまうため、
頁ごとに印刷は出来るでしょうか?

 

PDFMakerのパラメータが以下の状態になっているからではないでしょうか?

戻り橋_0-1619482757662.png

この変換オプションを、「100%表示」にすればOKでしょうか?

 

quote開いているエクセルファイルへに対して、下記処理をしたいのですが可能でしょうか?
retVal = pdfMakerApp.CreatePDF("C:\Work\Text.xlsx", "C:\Work\Test.pdf", pdfConvertSetting)

 

Excelの[Acrobatタブ]↓[PDFを作成]では良くない理由を教えてもらえないでしょうか?

たとえば、「複数の人がExcelからPDFを作成するけど、設定画面とか出さずに、統一パラメータで1クリックで出力したい」とかです。

 

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
Apr 26, 2021 Apr 26, 2021

その領域に達するのは、なかなかの道のりだと容易に想像出来てしまうので、

本当すごいと思います。ありがとうございます。

 

御推察通り、

特に不慣れな人のケースを考えて1クリックで処理したく考えています。

 

上記難しいかなと思い、[Acrobatタブ]↓[PDFを作成]でのプログラムを作成し、

今、デバック作業をしつつ、「メモリ不足」さらに「そのあとの処理でFORMが閉じる」という

症状に対して悩んでいるところです。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
参加者 ,
Apr 29, 2021 Apr 29, 2021

Excelのリボン([アドイン]タブ)にボタンを追加して出力するマクロを記載します。

個人用マクロブックに記載して下さい。

(C:\Users\<ユーザー>\AppData\Roaming\Microsoft\Excel\XLSTART\personal.xlsb)

 

  • ThisWorkbook
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

 

  • Module1
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を設定して下さい。

 

 

 

 

 

 

 

 

 

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Beginner ,
May 05, 2021 May 05, 2021
最新

プログラム走らせました。問題なく希望通りの動きをしました。
こちらの意を組んでいただきありがとうございます。
アドイン機能追加、また細部までお気遣いを頂きありがとうございます。
本当に、感謝申し上げます。

<追記>
他ユーザへの記録として、.xlsx ⇒ .xlsmに変更致しました。

翻訳
レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines