Skip to main content
Participant
May 26, 2024
質問

エクセルマクロで保存ダイアログを非表示にしてPDF出力をしたい

エクセルマクロで保存ダイアログを非表示にしてPDF出力をしたいと考えていますが
保存ダイアログが表示されてしまいます。

Windows11にAdobeAcrobatStandard2024をインストールしたPCのExcel2016で

以下のマクロを記述しています。

対処方法はありますでしょうか?

 

マクロの処理概要
1. レジストリキー:Software\Adobe\Acrobat Distiller\PrinterJobControl\EXCEL.EXE を作成
2. 名前"OutputFilePath"に"C:\Users\xxxx\Documents\test.pdf"を設定

3. 印刷処理


' Windows APIの宣言
Private Declare PtrSafe Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" ( _
ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, _
ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, _
ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long

Private Declare PtrSafe Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _
ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long

Private Declare PtrSafe Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _
ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, phkResult As Long) As Long

Private Declare PtrSafe Function RegCloseKey Lib "advapi32.dll" ( _
ByVal hKey As Long) As Long

' キーアクセス定数の定義
Private Const KEY_SET_VALUE As Long = &H2
Private Const KEY_WRITE As Long = &H20006

 

Sub ボタン_Click()

     Call SetAcrobatDistillerRegistry
     ActiveWindow.SelectedSheets.PrintOut ActivePrinter:="Adobe PDF"

End Sub


Sub SetAcrobatDistillerRegistry()
     ' 定数の定義
     Const HKEY_CURRENT_USER As Long = &H80000001

     Const REG_SZ As Long = 1

     ' レジストリパスの定義(ApplicationNameとして"EXCEL"を使用)
     Dim regPath As String
     regPath = "Software\Adobe\Acrobat Distiller\PrinterJobControl\EXCEL.EXE"

     ' 出力ファイルパスの定義
     Dim outputFilePath As String
     outputFilePath = "C:\Users\xxxx\Documents\test.pdf"

     ' レジストリキーの設定
     Call CreateRegistryKey(HKEY_CURRENT_USER, regPath)
     Call SetRegistryValue(HKEY_CURRENT_USER, regPath, "OutputFilePath", REG_SZ, outputFilePath)

     MsgBox "レジストリ設定が完了しました。", vbInformation
End Sub

Sub CreateRegistryKey(hKey As Long, subKey As String)
     'レジストリキーを作成する
     Dim regResult As Long
     Dim keyHandle As Long

     regResult = RegCreateKeyEx(hKey, subKey, 0, vbNullString, 0, KEY_WRITE, 0, keyHandle, 0)
     If regResult = 0 Then
          RegCloseKey keyHandle
     Else
          MsgBox "レジストリキーの作成に失敗しました。", vbCritical
     End If
End Sub

Sub SetRegistryValue(hKey As Long, subKey As String, valueName As String, valueType As Long, valueData As String)
     ' レジストリ値を設定する
     Dim regResult As Long
     Dim keyHandle As Long

     regResult = RegOpenKeyEx(hKey, subKey, 0, KEY_SET_VALUE, keyHandle)
     If regResult = 0 Then
          regResult = RegSetValueEx(keyHandle, valueName, 0, valueType, ByVal valueData, Len(valueData))
RegCloseKey keyHandle
          If regResult <> 0 Then
               MsgBox "レジストリ値の設定に失敗しました。", vbCritical
          End If
     Else
          MsgBox "レジストリキーのオープンに失敗しました。", vbCritical
     End If
End Sub

 

 

このトピックへの返信は締め切られました。

返信数 2

Uske_S
Community Expert
Community Expert
May 27, 2024

ExcelにはいくつかPDFを出力するやり方があると思いますが、Acrobatのプラグイン?から出力したいということでしょうか?

特にこだわる理由がないのであれば、下記のようなコードも見つかりました。

'Export as PDF
Application.DisplayAlerts = False
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    destinationPath & destinationFilename & ".pdf" _
    , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
    :=False, OpenAfterPublish:=False

参照:https://stackoverflow.com/questions/52938982/print-with-pdf-without-prompting-dialog-box

 

ただWindowsマシンが手元にないので試せていません。

参考になるとよいのですが。

Uske_S
Ten A
Community Expert
Community Expert
May 26, 2024

マクロについては良くわかんないんですけど、Excelの別名で保存からPDF書き出すとどうでしょう?