エクセルマクロで保存ダイアログを非表示にして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
