
Excel 2003 VBAにて、
PDFファイルを開き、印刷し、閉じるマクロを作りたいと思っています。
Dim AA, AAA
AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\20131101160734050_001.pdf"
AAA = Shell(AA, vbNormalFocus)
にて、PDFファイルを開くことは出来ました。
このPDFファイルを、「印刷し、閉じる」ためには、
このPDFファイルを指定する必要があると思いますが、
その構文が判りません。
知っている方、教えて下さい。
No.4ベストアンサー
- 回答日時:
#3です。
WShell.Execを使うと閉じる事ができる様ですが、色々と気難しくて苦労しました。
まず、なぜかAdobe Reader/Acrobatのフルパスを与えないと、ファイルがみつからないとゴネます。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test()
printPdf2 GetDesktopPath & "\test.pdf", "DocuWorks Printer", "DocuWorks Printer Driver"
' printPdf2 GetDesktopPath & "\test.pdf"
End Sub
Sub printPdf2(pdfDocument As String, Optional printerName As Variant, Optional printerDriver As Variant)
Dim cmdLine As String
Dim WShell As Object
Dim oExec As Object
'ここは調整の必要がありそう
Const waitTime As Long = 1000
'Windows7 Home 64bitの場合です
Const pgmFullPath As String = "C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe"
Set WShell = CreateObject("WScript.Shell")
If IsMissing(printerName) Or IsMissing(printerDriver) Then
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
Else
cmdLine = "pgmFullPath /n /s /o /h /t ""pdfFullPath"" ""printerName"" ""printerDriver"""
cmdLine = Replace(cmdLine, "pgmFullPath", pgmFullPath)
cmdLine = Replace(cmdLine, "pdfFullPath", pdfDocument)
cmdLine = Replace(cmdLine, "printerName", printerName)
cmdLine = Replace(cmdLine, "printeDriver", printerDriver)
End If
Debug.Print cmdLine
Set oExec = WShell.exec(cmdLine)
Sleep waitTime
'Windows7Home/64bit環境ではここで実行時エラーが出るので無理矢理先に進めていますが
'Adobe Readerは閉じられる様です
On Error Resume Next
oExec.Terminate
Set WShell = Nothing
End Sub
Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function
Terminateで原因不明のエラーが出るのでWebを漁っいて下記をみつけました。64bit環境でエラーが出るのはこれも関係しているのでしょうか?少々無理をしている様なので、ご使用時はご注意下さい。
Terminate メソッドは最後の手段としてのみ使用します。これは、アプリケーションによっては適切にクリーンアップできない場合があるためです。通常は、プロセスを途中で中断せず、プロセス自身で実行を終了させるようにします。Terminate メソッドは WM_CLOSE メッセージを使ってプロセスを終了しようとします。これで終了できない場合は、通常のシャットダウン手順を実行せずに、プロセスを強制終了します。
http://msdn.microsoft.com/ja-jp/library/cc364387 …
度重なるご教示ありがとうございました。
やっと完成しました。
お答えいただいたtest()とPrivate Function GetDesktopPath() As Stringの意味が理解できず正直苦しみました。
VBAの参照設定のなかで、
Windows Script Host Object Model
を追加せよとのことなんですよね。
Sleep関数の使い方は以前より知っていたのですぐ理解できました。
完成品を見て頂きたく、記載させてもらいます。
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub PDF()
Dim AA, BB, CC, DD
Dim AAA, BBB
AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe /t "
BB = "C:\Scan\MX-4111FN_20131003_162711.pdf"
CC = "RICOH MP C6003 白黒"
DD = AA & """" & BB & """" & " " & """" & CC & """"
Set AAA = CreateObject("WScript.Shell")
Set BBB = AAA.exec(DD)
Sleep 1000
On Error Resume Next
BBB.Terminate
Set BBB = Nothing
Set AAA = Nothing
End Sub
本当にありがとうございました。
No.3
- 回答日時:
このViewの中に同様の質問が二つあるのに、灯台もと暗しというか面白いですね。
質問者様のコードに、コマンドラインオプションを追加するだけなのですが、関数化したので使いやすいかもしれません。プリンター及び同ドライバ名は環境に合わせて下さい。指定しなければWindowsの標準プリンタに出力されます。
Sub test()
printPdf (GetDesktopPath & "\" & "test.pdf")
End Sub
Sub printPdf(pdfFullPath As String)
Dim objWShell As Object
Dim cmdLine As String
Dim printerName As String
Dim driverName As String
printerName = Chr(34) & "DocuWorks Printer" & Chr(34)
driverName = Chr(34) & "DocuWorks Printer Driver" & Chr(34)
Set objWShell = CreateObject("WScript.Shell")
cmdLine = "AcroRd32.exe /n /s /o /h /t " & pdfFullPath & " " & printerName & " " & driverName
objWShell.Run cmdLine, VbNormalFocus, True '連続実行時の誤動作が少ないことを期待して同期動作にしています。
Set objWShell = Nothing
End Sub
'これは試験の便宜上
Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function
参考URL:http://pdf-file.nnn2.com/?p=222
貴重なマクロ構文を教えていただきありがとうございます。
試したところ、印刷まではできましたが
アクロバットリーダー本体が閉じてくれません。
No2の方へのお礼欄に書きましたマクロ「SSS」と同じ状況です。
今一度ご教示をお願いします。
No.2
- 回答日時:
参照先が繋がっていた
No1回答の
Adobe Reader で PDF ファイルを表示 / 印刷する方法
http://pdf-file.nnn2.com/?p=752http://www.f3.dio …
↓
http://pdf-file.nnn2.com/?p=752
http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
です
2度に渡るご回答ありがとうございます。
色々な関係サイトをご紹介頂き勉強になりました。
Sub SSS()
Dim AA, AAA
AA = "C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe C:\Scan\MX-4111FN_20131003_162711.pdf"
AAA = Shell(AA, vbNormalFocus)
SendKeys ("^P"), True
SendKeys "{ENTER}"
SendKeys "%{F4}"
End Sub
では、PDFファイルが開くのみで、SendKeysが機能しませんでした。
そこで、知恵を絞りbatファイルを利用することにして、
Sub TTT()
Dim AA, AAA
AA = "START AcroRd32.exe /t ""C:\Scan\MX-4111FN_20131003_162711.pdf"" ""RICOH MP C6003 白黒"" ""50.28.99.211"""
AAA = "C:\XXX.bat"
Open AAA For Output As #5
Print #5, AA
Close #5
AAA = Shell(AAA, vbNormalFocus)
End Sub
を作りました。
印刷まではできましたが、アクロバットリーダー本体を閉じることができません。
いま少し、お知恵を拝借させてください。
No.1
- 回答日時:
PDFファイルの印刷はReader上で行うので、Excelから直接実行はできません
VBAから実行するにはSendKeysでReaderを操作するのが一番簡単な方法
Readerがアクティブの状態で
SendKeys "^p", True
SendKeys "{ENTER}"
この2つを実行すれば印刷が始まります
SendKeysに関しては下記サイト参照
http://officetanaka.net/excel/vba/statement/Send …
http://www.moug.net/tech/exvba/0150016.html
終了動作もReaderがアクティブの状態で
SendKeys "%{F4}"
で終了できます
-----
その他の方法として
Adobe Reader で PDF ファイルを表示 / 印刷する方法
http://pdf-file.nnn2.com/?p=752http://www.f3.dio …
標準モジュール AdobeReaderは
https://app.box.com/shared/jisind0q7l
↑
ココでダウンロードしたエクセルファイルに組み込まれています
私も、はじめ内容がよくわからなかったけど、Reader開かずにVBA上から直接印刷できるなど、理解できると結構便利に使えます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- PDF PDF印刷後に「変更を保存しますか?」と訊かれる 2 2023/04/28 17:35
- PDF Acrobat Reader PDFで注釈をいれて印刷すると、縦と横が逆さまになって印刷されています 3 2023/01/30 07:31
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- PDF EXCEL ページを指定してPDF出力するVBAを教えてください。 2 2023/02/09 10:27
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
- Visual Basic(VBA) DisplayAlertsブロパティで ”実行時エラー424オブジェクトが必要です” 5 2022/05/15 18:02
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- PDF PDFファイルを開くことができません。 4 2022/06/26 18:08
- PDF pdfファイルのjpgファイルへの変換 5 2022/06/03 10:13
このQ&Aを見た人はこんなQ&Aも見ています
-
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
Adobe Reader を閉じる
その他(Microsoft Office)
-
-
4
EXCEL VBAでPDFファイルを開いて印刷
Visual Basic(VBA)
-
5
VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません
Visual Basic(VBA)
-
6
VBAでホルダー内のPDFを一括印刷したい
Excel(エクセル)
-
7
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
8
vbaでPDFファイルが印刷されない
Visual Basic(VBA)
-
9
PDFファイルを印刷後、自動でファイルが閉じる方法を教えてください。
その他(ソフトウェア)
-
10
【EXCEL-VBA】PDFファイルを開いて印刷したい
Excel(エクセル)
-
11
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
12
vbaでpdfを開いて1ページ目のみ印刷する。
PDF
-
13
vbaから他のアプリを終了
Visual Basic(VBA)
-
14
PDFファイルをコピーしてエクセルブックにはりつけるVBA
Excel(エクセル)
-
15
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
16
印刷要求順番と印刷出力順番が違う。
Visual Basic(VBA)
-
17
エクセルVBAでプリンタプロパティを操作したい
Visual Basic(VBA)
-
18
フォルダ内のexcelファイルを順に開いて印刷して閉じるマクロを作りたいのでご教授お願いします。
Excel(エクセル)
-
19
EXCEL ページを指定してPDF出力するVBAを教えてください。
PDF
-
20
印刷ダイアログを表示させない方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
[teraterm] waitコマンドで停止...
-
VBscriptが起動しない?
-
複数のbatファイルを自動実行し...
-
ActiveXコントロールの使用許可...
-
VBScriptでコマンドプロンプト...
-
バッチファイルの内容を表示さ...
-
「読み取りと実行」と「読み取...
-
Windows System32 Security Hea...
-
これってパソコンの最適化が完...
-
vbscriptを用いて他のVBSファイ...
-
exeファイルを実行するとコマン...
-
.cshrcについて教えてください。
-
「command not found」メッセー...
-
VScodeのエラー解決法 Pythonの...
-
自前サーバでCGIを~
-
PDFファイルを開き、印刷し、閉...
-
Software Distribution folder ...
-
Excel(エクセル) VBA プロシー...
-
cpadでプログラムが実行できない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトのエラーに...
-
[teraterm] waitコマンドで停止...
-
バッチファイルの内容を表示さ...
-
exeファイルを実行するとコマン...
-
VBscriptが起動しない?
-
これってパソコンの最適化が完...
-
「読み取りと実行」と「読み取...
-
複数のbatファイルを自動実行し...
-
Windows System32 Security Hea...
-
ネットワーク名が見つかりません
-
エクセル フォルダの画像を画...
-
Excel(エクセル) VBA プロシー...
-
PDFファイルを開き、印刷し、閉...
-
Access の VBA 実行中に他の操...
-
バッチファイルが不正終了して...
-
VScodeのエラー解決法 Pythonの...
-
VBScriptでコマンドプロンプト...
-
pythonスクリプトを管理者権限...
-
VB.NETでのDOSコマンドを実行に...
-
batからexeを実行し戻り値を受...
おすすめ情報