お世話になります。
以前、以下のリンク先の質問で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も見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
ギリギリ行けるお一人様のライン
おひとり様需要が増えているというニュースも耳にしますが、 あなたが「ギリギリ一人でも行ける!」という場所や行為を教えてください
-
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
PowerShellを使って関連付けられたアプリケーションでファイルを開く時のエラー
Excel(エクセル)
-
VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません
Visual Basic(VBA)
-
-
4
EXCEL VBAでPDFファイルを開いて印刷
Visual Basic(VBA)
-
5
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
6
vbaでpdfを開いて1ページ目のみ印刷する。
PDF
-
7
PDFファイルを開き、印刷し、閉じるマクロ
Visual Basic(VBA)
-
8
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
9
vbaでPDFファイルが印刷されない
Visual Basic(VBA)
-
10
Excel VBAでPDFファイルをMicrosoft Print to PDFで出力したい
Visual Basic(VBA)
-
11
ファイルのパス指定での印刷方法
Visual Basic(VBA)
-
12
Adobe Reader を閉じる
その他(Microsoft Office)
-
13
ハイパーリンクの抽出・印刷について
その他(ソフトウェア)
-
14
【VBA】ファイルパスに半角スペースが入ると、VBAが動かない
Excel(エクセル)
-
15
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
16
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
17
Excel VBA の印刷後の判定
Excel(エクセル)
-
18
VBのフォーム上にPDF文書を表示したい
Visual Basic(VBA)
-
19
エクセルVBAで、PDFファイルを開きたい
Excel(エクセル)
-
20
差込印刷で顧客別に複数行のデータを印刷する方法で困っています
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Hey!Say!のCDについている、ユ...
-
CODE関数から他の文字コードの...
-
ギターのTAB譜の記号 N.C....
-
【マクロ】PasteSpecialメソッ...
-
Em7onA 。GonB。 GonAのおさ...
-
【HULFT】 utllist とutladmin
-
【EXCEL-VBA】PDFファイルを開...
-
JOBコードってなんでしょうか?
-
草刈の際に電源ケーブルを切断...
-
「恋は皆のもの」コードを教え...
-
VBA ダブルクリックするたびに...
-
流用の定義について
-
音楽のコードのお話です。オー...
-
Dadd11というコードについて
-
ドライアーのコードから煙が出...
-
見苦しい電気コードを短くすっ...
-
『車の中でかくれてキスをしよ...
-
ピアノとギターのコードって
-
マイクロソフト 一時使用コード...
-
Excel VBA Tabコードの出力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ギターのTAB譜の記号 N.C....
-
【マクロ】PasteSpecialメソッ...
-
VBA ダブルクリックするたびに...
-
草刈の際に電源ケーブルを切断...
-
CODE関数から他の文字コードの...
-
ギターで2弦2フレットと3弦2フ...
-
ドライアーのコードから煙が出...
-
Hey!Say!のCDについている、ユ...
-
【HULFT】 utllist とutladmin
-
マイナーの裏コードは存在する?
-
電源コードをござの下にくぐら...
-
JISコードがわからない
-
◎PPMのコードをお教えいただ...
-
ベンダーコードについて教えて...
-
VBAのフォーム上にTextBoxたく...
-
先日、電気コードに熱いお湯か...
-
コードを白く塗りたい
-
マイクロソフト 一時使用コード...
-
電気コードがスルスルと巻き戻...
-
実行時エラー3251対応処理方法
おすすめ情報
文字数制限で途中までしか入りません。
後半は画像を見て下さい。
'//
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.も含め
改めてお礼を入力させて頂きます。
※もしかしたら何か質問させて頂くかもしれないです。
今回はご解答頂きありがとうございます。