前提
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オブジェクトに関しては初めて使うため見様見真似でやっております。
ご教授いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/24 09:25
2022/08/24 10:51
2022/08/26 01:14
2022/08/26 01:23