
以前こちらで質問させて頂きました。
https://oshiete.goo.ne.jp/qa/9735053.html
Pdfファイルを開いて印刷する方法を教えて頂きましたが、お恥ずかしい限りなのですが今度はExcel2016で印刷できない現象にぶつかっています。
Excel2016でWindows10の環境が複数ありますが全て同じ現象です。(Windows7に2003を入れているPCも多数)
’宣言部分を分岐
#If Win64 Then
Private Declare PtrSafe Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As LongPtr
#Else
Private Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long
#End If
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
Call ShellExecute(Application.hwnd, "Print", myPath & fName, vbNullString, vbNullString, 0)
fName = Dir()
End Sub
Excel2003では問題なく印刷できるのですが、2016では印刷できません。
Application.hwnd, "Print"のPrintをOpenにすると2016でも開くところまではできるので、
何が問題なのでしょうか。
https://msdn.microsoft.com/ja-jp/library/cc42207 …
こちらのURLのprintの部分で「lpFile パラメータで指定したファイルを印刷します。lpFile パラメータで文書以外のファイルを指定すると、この関数は失敗します。」とありますが、何か関係ありますか?
いっそ全てのPCのExcel2016を32bitでインストールし直した方が手っ取り早いですかね…
何で全部64bitでインストールしたのか意味不明なのですが(遠い目)
宜しくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
見当させていただいたのですが、
>Call ShellExecute(Application.hwnd, "Print", myPath & fName, vbNullString, vbNullString, 0)
これは、Shell ですから、32bit と 64bit では呼び出しの手順が違うのだろうと思います。まちがなくAcrobat Reader? が呼び出されるとは限らないですね。AcroRd32.exeゆえの問題も残るのかもしれません。OLEの仕様が分かれば、そちらに移行したほうがよいでしょうね。
以下は、同じような仕組みではあっても、
https://helpx.adobe.com/jp/acrobat/kb/510705.html
ここで書かれてあるような、コマンドプロンプトを用いました。
うまくいくとは言い難いのは、オプションをつけても、自動終了しないので、こちらで終了させることにしました。
'//
#If VBA7 And Win64 Then
'64ビット版
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
'32ビット版
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub Sleep Lib "kernel32" (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
#End If
Private Const WM_CLOSE = &H10
Sub PDF_PrintTest()
Dim myPath As String
Dim oShell As Object
Dim fName As String
Dim Keyword As String
Dim CommandPdf As String
Dim cnt As Long
Dim hWnd As Long
Dim Ret As Long
'myPath = "\\フォルダのパス\"
Keyword = Worksheets("Sheet1").Range("A1").Value
fName = Dir(myPath & Keyword & ".pdf")
If fName = "" Then
MsgBox "該当するファイルが存在しません。", vbCritical
Exit Sub
End If
fName = myPath & fName
Set oShell = CreateObject("WScript.Shell")
CommandPdf = """C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"" " & " /t " & fName
Ret = oShell.Run(CommandPdf)
Do
Sleep 500
hWnd = FindWindow("AcrobatSDIWindow", vbNullString)
cnt = cnt + 1
If cnt > 50 Then Exit Sub
Loop Until hWnd > 0
Call SendMessage(hWnd, WM_CLOSE, 0&, 0&)
Sleep 500
hWnd = FindWindow("AcrobatSDIWindow", vbNullString)
If hWnd > 0 Then
Call SendMessage(hWnd, WM_CLOSE, 0&, 0&)
End If
End Sub
WindFallerさん、前回に引き続き回答ありがとうございます。
頂いたコードを使用するために四苦八苦していたところ、あっという間に時間が経ち自動的に質問が締め切られてしまったのでお返事が遅くなり大変申し訳ありません。
わざわざお時間割いて回答して頂き本当にありがとうございます。
まだうまく行ってないのですが、頂いたコードとURLを参考に推古していきたいと思います。
本当はちゃんと理解してからお返事したかったのですが、自分の力不足を実感したのと時間がかかりそうなため取り急ぎお礼とさせていただきます。
また何かありましたらご質問させてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Docuworks(ドキュワークス)の不...
-
Outlook メールの添付ファイル...
-
Webページの見えてない部分も含...
-
送られてきたPDFファイルがある...
-
ShellExcuteの"print”がExcel20...
-
Google Apps Scriptで自動印刷
-
ワードで作ったものをペイント...
-
スマホでcsvからpdfへの変換と印刷
-
フロッピーの印刷
-
花子2013 ウィンドウズ10で印...
-
エクセルVBAでPDFを作成したい
-
コマンドプロンプト 閉じた時の...
-
フォルダの削除について
-
内蔵HDDを認識させない方法...
-
VBA ファイルを開くダイアログ...
-
パワーポイントのスライドを1...
-
フォルダの名前が全部同じにな...
-
アイコン右下の盾を消す方法
-
VBAでキャッシュを削除するには
-
C:\\Windows\\SoftwareDistribu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Docuworks(ドキュワークス)の不...
-
Webページの見えてない部分も含...
-
Google Apps Scriptで自動印刷
-
Outlook メールの添付ファイル...
-
エクセルVBAでPDFを作成したい
-
スマホでcsvからpdfへの変換と印刷
-
PDF文書を拡大してコンビニで印...
-
outlook2016のアドレス帳の印刷...
-
Excel VBA Backstageビューでの...
-
ワードで作ったものをペイント...
-
Wordのテキストボックスの文が...
-
ファイルの背表紙に印刷したい
-
ShellExcuteの"print”がExcel20...
-
私のパソコン~Word2007の画像...
-
PDFの使い方
-
印刷ができない
-
メールアドレス一覧表を印刷したい
-
EXCELでのバージョンダウン
-
印刷しても・・・
-
ワード文書の縮小印刷方法
おすすめ情報