
お世話になります。
以前、以下のリンク先の質問でA1セルに入力されたファイル名(フルパスの)を取得し
PDFを開くマクロを頂きました。
※ご解答頂いたWindFallerさん、maiko0333さん、ありがとうございました。
このマクロはすごくシンプルで使いやすいので今でも仕事で使っております。
で、、、今回、これをカスタマイズして「印刷もしたい」と思ったのですが、
印刷するためのコードの追加方法がわかりませんでした。
このコードに固執してないので、別の方法でもかまいません。
ですが、ネットで調べたところ複雑なコードばかりでした。
リンク先のようなシンプルなコードでPDFファイルを開いて
印刷することって出来ないのでしょうか?
すいませんが詳しい方、説明の上手な方、
直接、コードで説明できる方、マクロでPDFファイルを開いて印刷するための
コードを教えて下さい。よろしくお願いします。
リンク先:PDFファイルを開くマクロ
「PowerShellを使って関連付けられたアプリケーションでファイルを開く時のエラー」
https://oshiete.goo.ne.jp/qa/9338065.html
追記
1)開いたPDFファイルを閉じる必要はありません。
開けっ放しでOKです
2)前述していますし、リンク先を見て頂ければわかると思いますが、
A1セルに入力するファイル名はフルパスです。
※詳細はリンク先の説明、画像をご覧ください
3)PDFファイルはどれも1枚だけです。
※複数ページのPDFはありません。
以上です。すいませんがよろしくお願いします。
No.3ベストアンサー
- 回答日時:
こちらを参考にして
https://www.moug.net/tech/acvba/0130005.html
こんな感じで動きました。(Windows7 64ビット , Excel2010 32ビット)
Option Explicit
Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
Public Sub PrintPDF()
Dim strPath As String
strPath = Range("A1").Value
' 現在の位置とサイズで表示 5(SW_SHOW)
Call ShellExecute(Application.hwnd, "open", strPath, vbNullString, vbNullString, 5)
' 印刷
Call ShellExecute(Application.hwnd, "print", strPath, vbNullString, vbNullString, 5)
End Sub
改めましてご解答ありがとうございます。
リンク先も読んでみたのですが、
残念ですが今の私の知識で半分くらいしか理解出来ませんでした。
ですが、丁寧にコードを書いて頂いているので、
私の知識でもパスを書き代えてコードを自分の環境で使えるように
カスタマイズできました。
こんなシンプルなコードで出来てしまうなんてびっくりです。
仕事で使うのですが職場のみんなも喜ぶと思います。
今回はシンプルで実用的なコードを書いて頂きありがとうございます。
機会がありましたら、またお願いします。
No.5
- 回答日時:
#2で書いた内容は、いろんなものを省いてしまった結果で、Excel VBAの依存性を低くしたということです。
Wscript のことは気にしなくてよいです。行きがかりで書いただけの話ですが、つまり、Excelはなくても使えるレベルのコードだということです。そして、また改良型も、そのこだわりはなくしていません(^^;。それで、WinAPIを使わないで、WMIを使いました。
まったく想像とは違う範囲の問題でした。#2のコードは、省いてしまった中に、その問題に対処していた部分がありましたが、ただ、昔のコードのままでは、やはりダメだったことは間違いなさそうです。
今回は、何度も試してみましたが、Wait の部分をなくしてしまうと、コードが素通りして、印刷しないことがありました。2秒が最適かは分かりません。少し遅めでもよいかもしれません。
Application.Wait Now + TimeSerial(0, 0, 2) <-2秒の意味
これで、うまくいかないと、暗礁に乗り上げそうな気がします。
'//
Sub PdfPrintingR()
Dim strComputer
Dim objWMIService
Dim wShell
Dim pdfPath
Dim File
Dim oExec
Dim colProcessList
Dim objProcess
strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
If Range("A1").Value = "" Then Exit Sub
File = Range("A1").Value
If Dir(File) = "" Then MsgBox "ファイルが見つかりません。", vbExclamation: Exit Sub
Set wShell = CreateObject("Wscript.Shell")
pdfPath = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
Set oExec = wShell.Exec("""" & pdfPath & """ /p /h /o """ & File & """")
Application.Wait Now + TimeSerial(0, 0, 2)
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where ProcessID =" & oExec.processId)
For Each objProcess In colProcessList
objProcess.Terminate
Next
Set oExec = Nothing
Set wShell = Nothing
Set objWMIService = Nothing
End Sub
ご解答ありがとうございます。
試してみたのですが、、、やっぱり同じエラーメッセージでマクロが動作しませんでした。
こちらの環境はWindows7(64bit版)とEXCL2010です。
WindFallerさんのOSやEXCELのバージョンがわかりませんが、
そちらのPC環境ではEXCEL上で動作するんですね。
残念ですが、今回はPC環境の相性のような気がします。
何度もコードを書いて頂いてありがとうございます。
機会がありましたら、またお願いします。
No.4
- 回答日時:
#2の回答者です。
>「ファイル名または番号が不正です。」というメッセージで動きませんでした。
これは経験のないエラーでしたが、意味が分かりました。古いコードで可能だと思っていましたが、当時と今ではアクロバットの仕様も変わりました。それに加えて、こちらのコードを簡約化したことも原因でした。簡約化しないでも、同じくエラーはでるはずです。
原因は分かりましたので、すぐに追っつけ修正します。
>1)開いたPDFファイルを閉じる必要はありません。
>開けっ放しでOKです
試してはいないのですが、PDFファイルは閉じないといけないかもしれません。
何度もご解答ありがとうございます。
とりあえずNo.3さんのご解答で動作しました。
※PDFのファイルは開けっ放しで問題ありませんでした。
今夜以降に改めて頂いたNo.5のコードを確認し、
改めて内容の確認とお礼を入力させて頂きます。
ご解答ありがとうございます。
No.2
- 回答日時:
こんにちは。
以下のコードは、昔、私が収録したコードで、内容的にみると、Wscript 対応になっています。
それを私なりに解釈して書き換えてみましたので、試してみださい。
私は、最近入れたばかりですから、pdf のAcrobat Reader の場所は、キメウチですが、大丈夫だと思います。
ファイル名はフルパスになっていますから、必要に応じて、分かち書き(Path + File名)のほうが見栄えがよいかもしれません。
以下は、数回の印刷試験済みです。
ほとんど書き換えずに、Excelのいらない Wscript プログラムになります。
'//
Sub PdfPrinting()
Dim wShell
Dim pdfPath
Dim File
Dim ret
If Range("A1").Value = "" Then Exit Sub
File = Range("A1").Value
If Dir(File) = "" Then MsgBox "ファイルが見つかりません。", vbExclamation: Exit Sub
Set wShell = CreateObject("Wscript.Shell")
pdfPath = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
Set ret = wShell.Exec("""" & pdfPath & """ /n /p /h """ & File & """")
Set wShell = Nothing
End Sub
ご解答頂きありがとうございます。
返答が遅くなりすいません。
せっかく頂いたコードなのですが、、、、。
こちらの知識不足のせいで動かせませんでした。
詳細は以下の通りです。
>ほとんど書き換えずに、Excelのいらない Wscript プログラムになります。
とのことですが、Wscriptの知識が全くないのと、もともとEXCEL上で動作させるのが
目的ですので、頂いたコードをエクセル、開発、から標準モジュールに貼り付けてみました。
すると「ファイル名または番号が不正です。」というメッセージで動きませんでした。
普段見慣れたエクセルのマクロのコードと比較すると気になる部分がいくつかあります。
なので以下の通りに書き換えてみましたが、やはり同じエラーメッセージで動作しませんでした。
確認
1)pdfのパスは私の環境でも「C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe」
でした。
2)EXCELのEXCEL2010です
3)Wscriptの意味がわかりません。
私はてっきりVBAのオブジェクトの1つだと思っていました。
ネットで調べたところ以下のサイトがヒットしました。
読んだのですが、私の実力で意味がわかりませんでした。
とりあえずダウンロードしようとしたのですが、
ダウンロードできるページも見つかりませんでした。
↓
ダウンロードしても意味がわからないので、結局、使いこなせないと思いますが、、、。
せっかくご解答頂いたのに、使いこなせずにすいません。
お手数でなければ、頂いたコードをエクセル上で動作確認をして頂き、
こちらの間違いを教えて頂ければ嬉しいです。
※ご面倒でしたら、スルーでOKです。
今回はご解答頂き、ありがとうございます。
機会がありましたらまたよろしくお願いします。
※文字数がオーバしたので、コードは補足に貼り付けておきます。
No.1
- 回答日時:
こんにちは。
今度の答えは、前回のような曖昧な解答にはならないと思います。
私自身、昔教わったことがある技術かもしれません。
まず、pdf拡張子で自動的に立ち上がるソフトウェアは何ですか?
Acrobat reader なら、可能だと思います。
もしも、Win10 で、pdf ファイルで立ち上がるソフトは、Microsoft Edge でしたら、私の知る範囲では、seleniumVBAというインターフェイスが、Edgeとマッチしていないようですので、無理かもしれません。(私の範囲だけの情報で、作者は、この件は触れていません)
ご解答ありがとうございます。返答が遅れてすいません。
前回はありがとうございました。順番に返答していきますね。
>まず、pdf拡張子で自動的に立ち上がるソフトウェアは何ですか?
Acrobat reader なら、可能だと思います。
↓
ソフトはAcrobat readerです。
工場内のタブレットPCで図面の閲覧専用で使用してます。
ソフトも現状ではAcrobat readerとEXCELしかインストールしていません。
※必要なら他のものもインストールしてもOKです。
※Microsoft Edge はプレインストールされていますが、アンインストールしても問題ありません。
いろいろ調べてみたのですが、複雑なコードや解説ばかりなので、
こちらで相談してみました。
プリンターのドライバーを呼び出す必要があるようでしたら、
手に負いかねるのでその時は諦めようと思っています。
という状況です。
今回はご解答頂きありがとうございました。
頂いたコードは毎日使っており、現場の者も喜んでおります。
この場をお借りして、改めてお礼申し上げます。
もし続きがあるようでしたら、出来ない理由、etc.でも
構わないので、ご解答を頂けたら嬉しいです。
ご解答ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Excel(エクセル) 【VBA】PDF出力に任意のファイル名前を付ける方法 3 2023/07/21 10:55
- Excel(エクセル) 【マクロ】webアドレスにて指定されたCSVファイル【excelソフト表示】を印刷する件 1 2023/02/15 01:52
- Excel(エクセル) エクセルVBA、間違っているコード内容を正して頂けませんか? エクセルワークシートに納品書を作ったの 2 2023/08/02 21:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください マクロを実行して 作業フォルダの中にある PDFファイル名を 3 2023/07/01 15:16
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Excel(エクセル) 【マクロ】ファイル名の日付によって、保管するフォルダを、自動選択したい 4 2023/08/16 11:24
このQ&Aを見た人はこんなQ&Aも見ています
-
EXCEL VBAでPDFファイルを開いて印刷
Visual Basic(VBA)
-
VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません
Visual Basic(VBA)
-
PDFファイルを開き、印刷し、閉じるマクロ
Visual Basic(VBA)
-
-
4
vbaでPDFファイルが印刷されない
Visual Basic(VBA)
-
5
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
6
PowerShellを使って関連付けられたアプリケーションでファイルを開く時のエラー
Excel(エクセル)
-
7
Excel VBAでPDFファイルをMicrosoft Print to PDFで出力したい
Visual Basic(VBA)
-
8
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
9
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
10
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
11
vbaでpdfを開いて1ページ目のみ印刷する。
PDF
-
12
フォルダ内にあるPDFファイルを一括で印刷する方法※右クリック→印刷はNG
PDF
-
13
エクセルのvbaにて thisworkbookに記載のマクロを他のブックにマクロにて自動コピー出来る
Excel(エクセル)
-
14
VBAでホルダー内のPDFを一括印刷したい
Excel(エクセル)
-
15
他のアプリケーションの終了処理
Visual Basic(VBA)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
18
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
19
Adobe Reader を閉じる
その他(Microsoft Office)
-
20
ShellExcuteのprint”がExcel2016で実行されない"
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】PasteSpecialメソッ...
-
VBA ダブルクリックするたびに...
-
【HULFT】 utllist とutladmin
-
ギターのTAB譜の記号 N.C....
-
コタツのコード取り換えについて
-
Am7の省略コード(m7の省略コー...
-
電気コードから銅線を取り出したい
-
Amazonギフト券から相手に住所...
-
マイクロソフト 一時使用コード...
-
リアルガチで耳コピ無双→コード...
-
ヘアードライヤーの電線がよじれる
-
○7+5のコードの意味がわかり...
-
Excel VBA Tabコードの出力
-
CODE関数から他の文字コードの...
-
【EXCEL-VBA】PDFファイルを開...
-
Gmailを開いた状態でもうひとつ...
-
◎PPMのコードをお教えいただ...
-
CreateEventProc()2回目実行す...
-
JAN コードとITFコードの違い...
-
DLookupがうまく出来ません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ギターのTAB譜の記号 N.C....
-
【マクロ】PasteSpecialメソッ...
-
Gmailを開いた状態でもうひとつ...
-
マイクロソフト 一時使用コード...
-
ドライアーのコードから煙が出...
-
CODE関数から他の文字コードの...
-
VBA ダブルクリックするたびに...
-
DLookupがうまく出来ません
-
ギターで2弦2フレットと3弦2フ...
-
◎PPMのコードをお教えいただ...
-
【EXCEL-VBA】PDFファイルを開...
-
JOBコードってなんでしょうか?
-
【HULFT】 utllist とutladmin
-
マイナーの裏コードは存在する?
-
流用の定義について
-
Dadd11というコードについて
-
実行時エラー3251対応処理方法
-
Em7onA 。GonB。 GonAのおさ...
-
Accessに対するGrep検索
-
ベンダーコードについて教えて...
おすすめ情報
文字数制限で途中までしか入りません。
後半は画像を見て下さい。
'//
Sub PdfPrinting()
Dim wShell
Dim pdfPath
Dim File
Dim ret
If Range("A1").Value = "" Then Exit Sub
File = Range("A1").Value
If Dir(File) = "" Then
MsgBox "ファイルが×", vbExclamation: Exit Sub
Else
bonaronさんへ
今回はご解答ありがとうございます。
こんなシンプルなコードでプリント出来るなんてスゴイですね。
取り急ぎ、動作確認させて頂きました。
今夜以降にリンク先の確認、etc.も含め
改めてお礼を入力させて頂きます。
※もしかしたら何か質問させて頂くかもしれないです。
今回はご解答頂きありがとうございます。