
以前こちらで質問させて頂きました。
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) Vba LongPtrについて教えてください 2 2022/08/19 11:14
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ホルダー内の印刷
-
Docuworks(ドキュワークス)の不...
-
Webページの見えてない部分も含...
-
outlook2016のアドレス帳の印刷...
-
スマホでcsvからpdfへの変換と印刷
-
Google Apps Scriptで自動印刷
-
Excelのファイルを複数印...
-
Wordのテキストボックスの文が...
-
コマンドプロンプト 閉じた時の...
-
フォルダの削除について
-
EmEditorを右クリックから起動
-
内蔵HDDを認識させない方法...
-
IE6をIE7にダウンロードし...
-
swapfile.sysとpagefile.sys
-
ATOKをはずしたいアンインスト...
-
コマンドプロンプトが一瞬で消える
-
画像をデスクトップに貼り付け...
-
削除済みアイテムを一気に空す...
-
Windows Media Player10でライ...
-
DVD shrinkでのISOファイル作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Docuworks(ドキュワークス)の不...
-
Webページの見えてない部分も含...
-
Google Apps Scriptで自動印刷
-
Outlook メールの添付ファイル...
-
スマホでcsvからpdfへの変換と印刷
-
エクセルVBAでPDFを作成したい
-
ワードで作ったものをペイント...
-
メールアドレス一覧表を印刷したい
-
Outlook Express未送信メールの...
-
ShellExcuteの"print”がExcel20...
-
EXCEL ファイル更新日時...
-
PDF文書を拡大してコンビニで印...
-
Excel VBA Backstageビューでの...
-
outlook2016のアドレス帳の印刷...
-
PDFファイルをWORDファイルにし...
-
プリンターで印刷しようとした...
-
フラッシュメモリからの印刷
-
パソコン画面をコンビニなどの...
-
PM-770Cによる、ホームページ印...
-
Wordの差し込み印刷について(表...
おすすめ情報