質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

2770閲覧

ExcelVBAでPDFファイルを印刷したい

mutsu_o

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2022/08/24 05:23

編集2022/08/24 05:30

前提

VBAを使ってマクロボタンを押すとExcelの選択したシートとPDF・ワードが印刷されるようにしたいと考えています。
Excelのシートとワードを印刷するところはできましたが、
shellObj.Run (exeStm) でエラーメッセージが発生しました。

実現したいこと

Excelから指定したファイルに入っているPDFをすべて印刷する

発生している問題・エラーメッセージ

実行時エラー’2147024894(80070002)’ ’Run’メソッドは失敗しました ′IWshSheLL3’オブジェクト

該当のソースコード

Dim activePrinter As String activePrinter = Application.activePrinter '取得できなかった時の処理 If activePrinter = "" Then MsgBox "プリンター情報が取得できませんでした" & Chr(13) & "プリンターが接続されていることを確認してください" End End If Dim intPoint1 As Long 'プリンタ名を切り出す為の文字数 'ファイル名(" on"の前まで)とポート名("on "の後から最後まで)を切り出す '※プリンタによって形式が異なるかもしれませんので、お使いの環境に合わせてください intPoint1 = InStr(activePrinter, "on") - 2 Dim usePrinter As String 'ポートを除いたプリンタ名 usePrinter = Left(activePrinter, intPoint1) 'フォルダに格納しているserchFileファイル名を取得する Dim strPdfName() As String 'PDFファイルのフルパス配列 ReDim strPdfName(0) 'まず0で初期化 Dim serchFile As String serchFile = Dir(ThisWorkbook.Path & "\印刷書類\*.pdf") '指定のフォルダに置き換えてください '拡張子がpdfのファイルを検索 Do While serchFile <> "" strPdfName(UBound(strPdfName)) = ThisWorkbook.Path & "\印刷書類\" & serchFile 'パス+ファイル名追加 ReDim Preserve strPdfName(UBound(strPdfName) + 1) '配列を拡張 serchFile = Dir() '次のファイル名を取得 Loop If UBound(strPdfName) > 0 Then ReDim Preserve strPdfName(UBound(strPdfName) - 1) '余分な要素を削除 End If Dim shellObj As Object Set shellObj = CreateObject("WScript.shell") Dim itm As Variant Dim exeStm As String '先ほど取得したPDFファイルのフルパス配列をforeachで回す For Each itm In strPdfName exeStm = "" 'コマンドラインの文字列を作成する exeStm = "AcroRd32.exe /t" & " " & itm & " " & usePrinter  ** shellObj.Run (exeStm) '印刷する** '1秒待機(不要かもしれない) Application.Wait [Now() + "0:00:01"] Next itm 'お片づけ Set shellObj = Nothing End Sub

試したこと

ファイルパス等に空白が含まれていることが原因というのが主に出てきたので以下のように””””を追加したりしました。

exeStm = "AcroRd32.exe /t""" & " " & itm & """ """ & usePrinter & """"

exeStmの値をコマンドプロンプトにいれたところ以下のようなエラーが出ます。

'AcroRd32.exe' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

以下の場合はファイル AcroRd32 が見つかりません。となります。

start "" AcroRd32 /t "C:\Users\(フルパス)"

簡略化した以下のマクロではオートメーションエラーとなり指定されたファイルが見つからないとなります。

Sub print1() Dim wshShellObj As IWshRuntimeLibrary.WshShell Set wshShellObj = New IWshRuntimeLibrary.WshShell Dim printFilePath As String Dim strShellCommand As String Dim FolderPath As String strShellCommand = "AcroRd32.exe /t """ & "(フルパス)" & """ """ & "(プリンタ名)" & """" wshShellObj.Run (strShellCommand) Set wshShellObj = Nothing End Sub

補足情報(FW/ツールのバージョンなど)

以下のサイトを参考に作成しています。

https://oshiete.goo.ne.jp/qa/6740812.html
https://qiita.com/shimayu22/items/5a7b1078340aeeb09d01
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13216845423
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12229286832

印刷したい書類はExcelと同じフォルダに印刷書類というフォルダを作りその中に入れてあります。

ローカルウィンドウ上ではexeStmは以下の通りになっています。
"AcroRd32.exe /t C:\Users\(フルパス).pdf (プリンタ名)"
プリンタ名にのみ空白が含まれています。

Shellオブジェクトに関しては初めて使うため見様見真似でやっております。
ご教授いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

普通は、AcroRd32.exeはPATHの通ったところには無いと思うので、ファイルをフルパスで指定すれば良いかと思います。
手元の環境では"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"ですね。
空白を含むので"(つまり"")で囲む必要があります。

投稿2022/08/24 06:15

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mutsu_o

2022/08/24 09:25

ご回答ありがとうございます。 確認してみたところそもそも AcroRd32.exe が私のパソコンには入っておりませんでした。 再度Adobe以下よりダウンロードをしたのですがやはり入っておりません。 https://get.adobe.com/jp/reader/ こちらは環境によって名前が変わるのでしょうか? なお、C:\Program Files\Adobe には Acrobat DC というファイルのみでございました。
otn

2022/08/24 10:51

では、Acrobat.exe では?手元の環境では、 C:\Program Files\Adobe\Acrobat DC\Acrobat\Acrobat.exe ですね。 > こちらは環境によって名前が変わるのでしょうか? 環境による違いじゃなくて、インストールしたものが違うので名前が違います。
mutsu_o

2022/08/26 01:14

Acrobat.exeに変更することでできました。 ありがとうございます!
otn

2022/08/26 01:23

調べると64bit版(Acrobat.exe)が出来たのは意外と最近で去年のようですね。 それ以前だと32bit版(AcroRd32.exe)しか無かった。 それ以降だと特に意識してないと64bit版をインストールしているはずです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問