![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
以前こちらで質問させて頂きました。
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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
EXCEL VBAでPDFファイルを開いて印刷
Visual Basic(VBA)
-
ShellExecuteの使い方について
JavaScript
-
PDFファイルを開かずに印刷したい
Visual Basic(VBA)
-
-
4
VBで「.tif」または「.pdf」形式のファイル印刷
Visual Basic(VBA)
-
5
PDFファイルを開き、印刷し、閉じるマクロ
Visual Basic(VBA)
-
6
VBA PDFファイル印刷後のAcrobatReaderDCの起動画面を閉じたい
Excel(エクセル)
-
7
印刷要求順番と印刷出力順番が違う。
Visual Basic(VBA)
-
8
ExcelVBAでPDFを閉じるソース
その他(Microsoft Office)
-
9
VB.netでShellExecuteがしたい
Visual Basic(VBA)
-
10
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
11
YES/NO型の値
Excel(エクセル)
-
12
ShellExecuteってなんで関数?
Access(アクセス)
-
13
vbaでPDFファイルが印刷されない
Visual Basic(VBA)
-
14
【EXCEL-VBA】PDFファイルを開いて印刷したい
Excel(エクセル)
-
15
Excel VBAでPDFファイルをMicrosoft Print to PDFで出力したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Google Apps Scriptで自動印刷
-
PDFファイルを印刷すると白い紙が
-
PDF文書を拡大してコンビニで印...
-
Docuworks(ドキュワークス)の不...
-
EXCEL印刷時「ファイルへ出力」...
-
メールアドレス一覧表を印刷したい
-
マイピクチャやドキュメントの...
-
Outlook メールの添付ファイル...
-
ワードで作ったものをペイント...
-
コンビニのコピー機で何をコピ...
-
ShellExcuteの"print”がExcel20...
-
フォルダ内のファイル一覧を印...
-
Excel で作ったチラシを JPG に...
-
私のパソコン~Word2007の画像...
-
Webページの見えてない部分も含...
-
花子2013 ウィンドウズ10で印...
-
自宅にプリンターがないのでセ...
-
ファイルの背表紙に印刷したい
-
スマホでcsvからpdfへの変換と印刷
-
Wordの差し込み印刷について(表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google Apps Scriptで自動印刷
-
Outlook メールの添付ファイル...
-
Docuworks(ドキュワークス)の不...
-
PDFファイルを印刷すると白い紙が
-
PDF文書を拡大してコンビニで印...
-
エクセルVBAでPDFを作成したい
-
ワードで作ったものをペイント...
-
ShellExcuteの"print”がExcel20...
-
スマホでcsvからpdfへの変換と印刷
-
お気に入りを印刷
-
メールアドレス一覧表を印刷したい
-
outlook2016のアドレス帳の印刷...
-
Excelのファイルを複数印...
-
EXCEL ファイル更新日時...
-
パソコン画面をコンビニなどの...
-
Outlook Express未送信メールの...
-
ファイルの背表紙に印刷したい
-
dxfファイルを開きたいです...
-
PDFファイルのAWP?
-
SDカードの資料を直接プリント...
おすすめ情報