
Excel VBAで指定してフォルダのPDFファイルを開いて印刷したいです(できれば閉じるところまで)。
開くところまではできたのですが、その先に印刷するのはどのようにしたら良いか教えてください。
安直な考えで開いた後のコードに何か付け足せばいけるのかと思って色々調べてはみたのですが、
そもそも開く段階で別のコマンドを指定しないといけないのでしょうか。
ちなみに、フォルダは変動しませんがファイル名はA1に入っている文言を拾うようにしています。
現在のコード
Sub printpdf()
Dim keyword As String
Dim myPath As String
Dim fName As String
keyword = Worksheets("Sheet1").Range("A1").Value
myPath = "\\フォルダのパス\"
fName = Dir(myPath & keyword & ".pdf")
If fName = "" Then
MsgBox ("該当するファイルが存在しません。")
Exit Sub
End If
Shell ("explorer.exe " & myPath & fName)
fName = Dir()
End Sub
No.6ベストアンサー
- 回答日時:
#4の回答者です。
>ちなみにプリンターバッファの問題とはバッファにデータが残ってしまうのでしょうか?
ある一定量を越えると、プリンターがうんともすんとも反応しなくなってしまうことがありました。マクロはすごく速く処理してしまうのに、プリンターのほうは、実際に印刷時間がありますから、ギャップがあるのです。
Sleep 1000 '1秒
------------------
cnt = cnt + 1
If cnt > 100 Then Exit Sub
で、ほんのちょっとの時間稼ぎはしています。
ちなみに、
If cnt > 100 Then Exit Sub
これは、ハンドルが取れない時の保護処理です。
なお、sendkeys は、例えば、エクセルで発生させると、エクセル内に関しては、うまくいくこともありますが、外部には働かないことが多いです。
もし、Sendkeys を試すなら、
CreateObject("Wscript.Shell").SendKeys "%{F4}"
を試してみることですね。
>キーワードが頭に無い為調べ方すら分からないレベルだったので勉強になりました。
そういう私も、もう一度勉強し直します。WMで始まる命令って4個ぐらいしかないのですが、実は、他の定数で、もっと一杯あることを最近知りました。ネット検索でも、ぜんぜん出てこないのですね。(探し方にVB限定で検索するのが、問題があるようです)
頂いたコードを理解するのに時間がかかったためお礼が遅くなって申し訳ありません。
とはいってもまだ完全には理解できていないのでお恥ずかしいですが…
Sleep関数も知りませんでしたのでただただ頭が下がります。1秒は1000と表記するのか…!というレベルなので頑張ります。
PDFは大量に印刷するわけではなく、Excelの複数のシートをマクロで印刷した最後に1枚PDFを足すような感じなので、そこまで問題は出ないかもしれません。
VBA以外の言語がわかるともっと幅が広がるということなんでしょうね。
本当にありがとうございました。
No.5
- 回答日時:
不確実性が高くなりますが、sendkeysの対応は不可でしょうか?
開いた後に、
1.開いたpdfをアクティブにする(しなくてもなってるかも)
2.ctrl + pで印刷画面を開く
3.Enterなど印刷
4.Alt + F4で閉じる
時間をどれくらいあけるかや、パソコン性能によって失敗率が変わりますが、手っ取り早いかと思います。
失敗が許されない場面では適用できませんが。
Sendkeysとは他のアプリケーションを開いた後に押すキーボードを指定するという感じでしょうか。
そういったやり方があるとは全く知らなかったので勉強になります。
実際に使用するのは私よりも更にパソコンが分からない人たち(しかも複数)で、PCスペックも様々なので実用性は低いかもしれませんが、これも試してみたいと思います。
回答ありがとうございました。
No.4
- 回答日時:
ちょっと作ってみました。
ただ、あまりこのマクロを頻繁に続けると、プリンターバッファの問題が出て来るので、プリンター側の調整が必要だと思います。
'標準モジュール
Private Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hWnd&, _
ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, _
ByVal nShowCmd&) As Long
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_CLOSE As Long = &H10
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub OpenPdf()
Dim FileName As String
Dim retval As Long
Dim hWnd As Long
Dim cnt As Long
Const myFOLDER As String = "\\フォルダのパス\"
Const ACR_CLASSNAME As String = "AcrobatSDIWindow"
FileName = myFOLDER & Worksheets("Sheet1").Range("A1").Value & ".pdf"
If Dir(FileName) <> "" Then
retval = ShellExecute(0&, "print", FileName, vbNullString, vbNullString, 1)
End If
If retval = 0 Then Exit Sub
Sleep 1000
Do
hWnd = FindWindow(ACR_CLASSNAME, vbNullString)
DoEvents
cnt = cnt + 1
If cnt > 100 Then Exit Sub
Loop Until hWnd <> 0
Call SendMessage(hWnd, WM_CLOSE, 0&, 0&)
End Sub
おおすごい!できました!ありがとうございます。
Private Const WM_CLOSE As Long = &H10 ここの部分がウィンドウを閉じる動作なんですね。
キーワードが頭に無い為調べ方すら分からないレベルだったので勉強になりました。
ちなみにプリンターバッファの問題とはバッファにデータが残ってしまうのでしょうか?
No.3
- 回答日時:
印刷だけなら
Shell ("explorer.exe " & myPath & fName)
Call ShellExecute(Application.hwnd, "print", myPath & fName, vbNullString, vbNullString, 0)
でいけます。
閉じるのはかなり難しそうです。
https://www.google.co.jp/search?hl=ja&source=hp& …
組み合わせれば何とかなるかもしれませんが。
https://www.moug.net/tech/acvba/0010014.html
http://www.gizcollabo.jp/vbtomo/log/archive/chos …
http://mrxray.on.coocan.jp/Delphi/plSamples/722_ …
いや、十分です!とても助かりました!
あと、プロシージャの外に
Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
を入れないと動かないので備忘録として記しておきます。
No.2
- 回答日時:
PDFを開くだけなのと、開いたPDFを操作することは別です。
関連付けされたもので開くことは簡単ですが、[印刷]や[閉じる]などは
簡単には設定できるものではないので、複数の環境にて使うのなばら、
別方法を検討したほうが良いかもしれませんね。
PDFを印刷
http://pdf-dde.nnn2.com/?p=16
readerを閉じる
http://pdf-dde.nnn2.com/?p=38
その他
http://pdf-dde.nnn2.com/
https://helpx.adobe.com/jp/acrobat/kb/2558.html
お礼したつもりが投稿ボタンを押し忘れたようで遅くなり申し訳ありません。
印刷するまでは他の方が教えてくださったので、閉じるところは別方法を検討しようと思います。
さすがに考えが安直すぎたようで反省です。回答ありがとうございました。
No.1
- 回答日時:
過去ログで探してみましたか?
https://oshiete.goo.ne.jp/qa/8346776.html
同じようなことをしたい質問がありましたよ。
Adobe Readerを指定して、印刷する必要があるようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAでホルダー内のPDFを一括印刷したい
Excel(エクセル)
-
PDFファイルを開き、印刷し、閉じるマクロ
Visual Basic(VBA)
-
【EXCEL-VBA】PDFファイルを開いて印刷したい
Excel(エクセル)
-
-
4
VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません
Visual Basic(VBA)
-
5
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
6
vbaでpdfを開いて1ページ目のみ印刷する。
PDF
-
7
vbaでPDFファイルが印刷されない
Visual Basic(VBA)
-
8
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
9
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
10
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
11
印刷要求順番と印刷出力順番が違う。
Visual Basic(VBA)
-
12
フォルダ内のexcelファイルを順に開いて印刷して閉じるマクロを作りたいのでご教授お願いします。
Excel(エクセル)
-
13
【マクロ】フォルダ内にあるPDFを合体させるには?有料版adobe必要?
Excel(エクセル)
-
14
エクセルVBAで、PDFファイルを開きたい
Excel(エクセル)
-
15
印刷マクロ【エクセル】エクセルからワードを印刷する
その他(Microsoft Office)
-
16
Adobe Reader を閉じる
その他(Microsoft Office)
-
17
ShellExcuteのprint”がExcel2016で実行されない"
Excel(エクセル)
-
18
フォルダ内にあるPDFファイルを一括で印刷する方法※右クリック→印刷はNG
PDF
-
19
pdfをvbaで開いて、さらにサイズを指定する
Excel(エクセル)
-
20
Excel VBAでPDFファイルをMicrosoft Print to PDFで出力したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS VBA レポートプレビュー...
-
EXCEL VBA 印刷プレビューダイ...
-
googleマップのストリートビュ...
-
ホームページをA4で印刷できる...
-
IE7の印刷サイズの設定について
-
印刷用スタイルシートの無効化...
-
WEBでのフォーム入力後の印刷
-
サイト全体を縮小して印刷する...
-
ページの一部が消える印刷プレ...
-
印刷ダイアログの印刷ボタンを...
-
印刷用スタイルシートがXPで反...
-
(できる方)エクセルVBA印刷済...
-
CSSを使用しているページで印刷...
-
Excel VBAで文字列の可視長を得...
-
印刷時に2ページ以上になる時CS...
-
Excel VBA 「印刷中」メッセー...
-
印刷時ヘッダーとフッターを挿入
-
EXCEL VBAでPDFファイルを開い...
-
IE11でCtrl+Pを禁止する方法に...
-
webの印刷で、デフォルトでA3を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCEL VBA 印刷プレビューダイ...
-
PDFファイルを開かずに印刷...
-
Excel VBAで文字列の可視長を得...
-
ページ内にスクロールバーのあ...
-
ACCESS VBA レポートプレビュー...
-
EXCEL VBAでPDFファイルを開い...
-
phpについてですかね、印刷ボタ...
-
ヘッダやフッタの印刷をしたくない
-
excelにて各シートの総印刷ペー...
-
印刷時ヘッダーとフッターを挿入
-
コマンドプロンプトでフォルダ...
-
インラインフレームの印刷について
-
ページ内の画像印刷について
-
印刷プレビュー表示後ユーザー...
-
C# 印刷可能領域と余白範囲...
-
VBAで印刷ページ最終行にページ...
-
エクセルVBAで印刷する書式をク...
-
ACCESSで印刷プレビューをした...
-
サイト全体を縮小して印刷する...
-
横に長いWeb画面を一枚の用紙に...
おすすめ情報
そちらの質問も拝見しました。
ただ、複数のPCから共有のデータを開くので(pdfビューワーもAcrobat readerとAcrobat Proの人がいる)、できれば関連付けられたアプリケーションで開く今の状態に何か足してできればと思ったのですが、甘い考えだったかもしれません。