以前こちらで質問させて頂きました。
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も見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
EXCEL VBAでPDFファイルを開いて印刷
Visual Basic(VBA)
-
ShellExecuteの使い方について
JavaScript
-
ShellExecuteでエクセルファイルが起動しません。
Visual Basic(VBA)
-
-
4
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
5
VBで「.tif」または「.pdf」形式のファイル印刷
Visual Basic(VBA)
-
6
ShellExecuteってなんで関数?
Access(アクセス)
-
7
PDFファイルを開き、印刷し、閉じるマクロ
Visual Basic(VBA)
-
8
【EXCEL-VBA】PDFファイルを開いて印刷したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ワードで作ったものをペイント...
-
PDF文書を拡大してコンビニで印...
-
Google Apps Scriptで自動印刷
-
メールアドレス一覧表を印刷したい
-
EXCEL ファイル更新日時...
-
Excel VBA Backstageビューでの...
-
エクセルVBAでPDFを作成したい
-
コマンドプロンプト 閉じた時の...
-
内蔵HDDを認識させない方法...
-
デスクトップの場所
-
アイコン右下の盾を消す方法
-
PCのデスクトップに保存した画...
-
ファイル移動中にデータが消えた!
-
フォルダの削除について
-
EXIF情報の削除をした後、プロ...
-
読み取り専用を解除したいので...
-
パワーポイントのスライドを1...
-
WindowsImageBackupの削除方法
-
Cドライブに最低限必要なファイ...
-
アスキーアートを画像にして保...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google Apps Scriptで自動印刷
-
Docuworks(ドキュワークス)の不...
-
PDF文書を拡大してコンビニで印...
-
Outlook メールの添付ファイル...
-
Webページの見えてない部分も含...
-
スマホでcsvからpdfへの変換と印刷
-
ワードで作ったものをペイント...
-
ShellExcuteの"print”がExcel20...
-
エクセルVBAでPDFを作成したい
-
Outlook Express未送信メールの...
-
メールアドレス一覧表を印刷したい
-
EXCEL ファイル更新日時...
-
パソコン画面をコンビニなどの...
-
outlook2016のアドレス帳の印刷...
-
ファイルの背表紙に印刷したい
-
Excelのファイルを複数印...
-
印刷した結果、文字が小さすぎ...
-
メディアケイト社のまとめて瞬...
-
花子2013 ウィンドウズ10で印...
-
Excel で作ったチラシを JPG に...
おすすめ情報