アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
以前、以下のリンク先の質問でA1セルに入力されたファイル名(フルパスの)を取得し
PDFを開くマクロを頂きました。
※ご解答頂いたWindFallerさん、maiko0333さん、ありがとうございました。
このマクロはすごくシンプルで使いやすいので今でも仕事で使っております。

で、、、今回、これをカスタマイズして「印刷もしたい」と思ったのですが、
印刷するためのコードの追加方法がわかりませんでした。

このコードに固執してないので、別の方法でもかまいません。
ですが、ネットで調べたところ複雑なコードばかりでした。
リンク先のようなシンプルなコードでPDFファイルを開いて
印刷することって出来ないのでしょうか?

すいませんが詳しい方、説明の上手な方、
直接、コードで説明できる方、マクロでPDFファイルを開いて印刷するための
コードを教えて下さい。よろしくお願いします。


リンク先:PDFファイルを開くマクロ
「PowerShellを使って関連付けられたアプリケーションでファイルを開く時のエラー」
https://oshiete.goo.ne.jp/qa/9338065.html

追記
1)開いたPDFファイルを閉じる必要はありません。
開けっ放しでOKです

2)前述していますし、リンク先を見て頂ければわかると思いますが、
A1セルに入力するファイル名はフルパスです。
※詳細はリンク先の説明、画像をご覧ください

3)PDFファイルはどれも1枚だけです。
※複数ページのPDFはありません。

以上です。すいませんがよろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    文字数制限で途中までしか入りません。
    後半は画像を見て下さい。

    '//
    Sub PdfPrinting()

    Dim wShell
    Dim pdfPath
    Dim File
    Dim ret

    If Range("A1").Value = "" Then Exit Sub
    File = Range("A1").Value
    If Dir(File) = "" Then
    MsgBox "ファイルが×", vbExclamation: Exit Sub

    Else

    「【EXCEL-VBA】PDFファイルを開」の補足画像1
      補足日時:2017/01/19 00:04
  • HAPPY

    bonaronさんへ

    今回はご解答ありがとうございます。
    こんなシンプルなコードでプリント出来るなんてスゴイですね。

    取り急ぎ、動作確認させて頂きました。
    今夜以降にリンク先の確認、etc.も含め
    改めてお礼を入力させて頂きます。
    ※もしかしたら何か質問させて頂くかもしれないです。

    今回はご解答頂きありがとうございます。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/01/19 14:22

A 回答 (5件)

こちらを参考にして


https://www.moug.net/tech/acvba/0130005.html
こんな感じで動きました。(Windows7 64ビット , Excel2010 32ビット)

Option Explicit

Declare Function ShellExecute Lib "SHELL32" Alias "ShellExecuteA" (ByVal hwnd&, ByVal lpOperation$, ByVal lpFile$, ByVal lpParameters$, ByVal lpDirectory$, ByVal nShowCmd&) As Long

Public Sub PrintPDF()
 Dim strPath As String

 strPath = Range("A1").Value
 ' 現在の位置とサイズで表示 5(SW_SHOW)
 Call ShellExecute(Application.hwnd, "open", strPath, vbNullString, vbNullString, 5)
 ' 印刷
 Call ShellExecute(Application.hwnd, "print", strPath, vbNullString, vbNullString, 5)
End Sub
この回答への補足あり
    • good
    • 1
この回答へのお礼

改めましてご解答ありがとうございます。

リンク先も読んでみたのですが、
残念ですが今の私の知識で半分くらいしか理解出来ませんでした。

ですが、丁寧にコードを書いて頂いているので、
私の知識でもパスを書き代えてコードを自分の環境で使えるように
カスタマイズできました。
こんなシンプルなコードで出来てしまうなんてびっくりです。
仕事で使うのですが職場のみんなも喜ぶと思います。

今回はシンプルで実用的なコードを書いて頂きありがとうございます。
機会がありましたら、またお願いします。

お礼日時:2017/01/19 20:49

#2で書いた内容は、いろんなものを省いてしまった結果で、Excel VBAの依存性を低くしたということです。

Wscript のことは気にしなくてよいです。行きがかりで書いただけの話ですが、つまり、Excelはなくても使えるレベルのコードだということです。そして、また改良型も、そのこだわりはなくしていません(^^;。
それで、WinAPIを使わないで、WMIを使いました。

まったく想像とは違う範囲の問題でした。#2のコードは、省いてしまった中に、その問題に対処していた部分がありましたが、ただ、昔のコードのままでは、やはりダメだったことは間違いなさそうです。

今回は、何度も試してみましたが、Wait の部分をなくしてしまうと、コードが素通りして、印刷しないことがありました。2秒が最適かは分かりません。少し遅めでもよいかもしれません。

Application.Wait Now + TimeSerial(0, 0, 2) <-2秒の意味

これで、うまくいかないと、暗礁に乗り上げそうな気がします。

'//

Sub PdfPrintingR()
Dim strComputer
Dim objWMIService
Dim wShell
Dim pdfPath
Dim File
Dim oExec
Dim colProcessList
Dim objProcess

strComputer = "."
Set objWMIService = GetObject _
  ("winmgmts:\\" & strComputer & "\root\cimv2")

If Range("A1").Value = "" Then Exit Sub
File = Range("A1").Value
If Dir(File) = "" Then MsgBox "ファイルが見つかりません。", vbExclamation: Exit Sub
Set wShell = CreateObject("Wscript.Shell")
pdfPath = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
Set oExec = wShell.Exec("""" & pdfPath & """ /p /h /o """ & File & """")
Application.Wait Now + TimeSerial(0, 0, 2)
Set colProcessList = objWMIService.ExecQuery _
  ("Select * from Win32_Process Where ProcessID =" & oExec.processId)

For Each objProcess In colProcessList
  objProcess.Terminate
Next
Set oExec = Nothing
Set wShell = Nothing
Set objWMIService = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ご解答ありがとうございます。

試してみたのですが、、、やっぱり同じエラーメッセージでマクロが動作しませんでした。
こちらの環境はWindows7(64bit版)とEXCL2010です。

WindFallerさんのOSやEXCELのバージョンがわかりませんが、
そちらのPC環境ではEXCEL上で動作するんですね。

残念ですが、今回はPC環境の相性のような気がします。

何度もコードを書いて頂いてありがとうございます。
機会がありましたら、またお願いします。

お礼日時:2017/01/19 20:34

#2の回答者です。



>「ファイル名または番号が不正です。」というメッセージで動きませんでした。
これは経験のないエラーでしたが、意味が分かりました。古いコードで可能だと思っていましたが、当時と今ではアクロバットの仕様も変わりました。それに加えて、こちらのコードを簡約化したことも原因でした。簡約化しないでも、同じくエラーはでるはずです。

原因は分かりましたので、すぐに追っつけ修正します。

>1)開いたPDFファイルを閉じる必要はありません。
>開けっ放しでOKです
試してはいないのですが、PDFファイルは閉じないといけないかもしれません。
    • good
    • 0
この回答へのお礼

何度もご解答ありがとうございます。

とりあえずNo.3さんのご解答で動作しました。
※PDFのファイルは開けっ放しで問題ありませんでした。

今夜以降に改めて頂いたNo.5のコードを確認し、
改めて内容の確認とお礼を入力させて頂きます。

ご解答ありがとうございます。

お礼日時:2017/01/19 14:18

こんにちは。



以下のコードは、昔、私が収録したコードで、内容的にみると、Wscript 対応になっています。
それを私なりに解釈して書き換えてみましたので、試してみださい。
私は、最近入れたばかりですから、pdf のAcrobat Reader の場所は、キメウチですが、大丈夫だと思います。
ファイル名はフルパスになっていますから、必要に応じて、分かち書き(Path + File名)のほうが見栄えがよいかもしれません。

以下は、数回の印刷試験済みです。
ほとんど書き換えずに、Excelのいらない Wscript プログラムになります。

'//
Sub PdfPrinting()
Dim wShell
Dim pdfPath
Dim File
Dim ret
If Range("A1").Value = "" Then Exit Sub
File = Range("A1").Value
If Dir(File) = "" Then MsgBox "ファイルが見つかりません。", vbExclamation: Exit Sub
Set wShell = CreateObject("Wscript.Shell")
pdfPath = "C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe"
Set ret = wShell.Exec("""" & pdfPath & """ /n /p /h """ & File & """")
Set wShell = Nothing
End Sub
    • good
    • 1
この回答へのお礼

ご解答頂きありがとうございます。
返答が遅くなりすいません。

せっかく頂いたコードなのですが、、、、。
こちらの知識不足のせいで動かせませんでした。
詳細は以下の通りです。


>ほとんど書き換えずに、Excelのいらない Wscript プログラムになります。

とのことですが、Wscriptの知識が全くないのと、もともとEXCEL上で動作させるのが
目的ですので、頂いたコードをエクセル、開発、から標準モジュールに貼り付けてみました。

すると「ファイル名または番号が不正です。」というメッセージで動きませんでした。

普段見慣れたエクセルのマクロのコードと比較すると気になる部分がいくつかあります。
なので以下の通りに書き換えてみましたが、やはり同じエラーメッセージで動作しませんでした。

確認
1)pdfのパスは私の環境でも「C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe」
でした。

2)EXCELのEXCEL2010です

3)Wscriptの意味がわかりません。

私はてっきりVBAのオブジェクトの1つだと思っていました。
ネットで調べたところ以下のサイトがヒットしました。
読んだのですが、私の実力で意味がわかりませんでした。

とりあえずダウンロードしようとしたのですが、
ダウンロードできるページも見つかりませんでした。

ダウンロードしても意味がわからないので、結局、使いこなせないと思いますが、、、。

せっかくご解答頂いたのに、使いこなせずにすいません。

お手数でなければ、頂いたコードをエクセル上で動作確認をして頂き、
こちらの間違いを教えて頂ければ嬉しいです。

※ご面倒でしたら、スルーでOKです。

今回はご解答頂き、ありがとうございます。
機会がありましたらまたよろしくお願いします。

※文字数がオーバしたので、コードは補足に貼り付けておきます。

お礼日時:2017/01/18 23:48

こんにちは。



今度の答えは、前回のような曖昧な解答にはならないと思います。
私自身、昔教わったことがある技術かもしれません。
まず、pdf拡張子で自動的に立ち上がるソフトウェアは何ですか?
Acrobat reader なら、可能だと思います。

もしも、Win10 で、pdf ファイルで立ち上がるソフトは、Microsoft Edge でしたら、私の知る範囲では、seleniumVBAというインターフェイスが、Edgeとマッチしていないようですので、無理かもしれません。(私の範囲だけの情報で、作者は、この件は触れていません)
    • good
    • 2
この回答へのお礼

ご解答ありがとうございます。返答が遅れてすいません。
前回はありがとうございました。順番に返答していきますね。

>まず、pdf拡張子で自動的に立ち上がるソフトウェアは何ですか?
Acrobat reader なら、可能だと思います。

ソフトはAcrobat readerです。

工場内のタブレットPCで図面の閲覧専用で使用してます。
ソフトも現状ではAcrobat readerとEXCELしかインストールしていません。

※必要なら他のものもインストールしてもOKです。
※Microsoft Edge はプレインストールされていますが、アンインストールしても問題ありません。

いろいろ調べてみたのですが、複雑なコードや解説ばかりなので、
こちらで相談してみました。

プリンターのドライバーを呼び出す必要があるようでしたら、
手に負いかねるのでその時は諦めようと思っています。
という状況です。


今回はご解答頂きありがとうございました。
頂いたコードは毎日使っており、現場の者も喜んでおります。
この場をお借りして、改めてお礼申し上げます。

もし続きがあるようでしたら、出来ない理由、etc.でも
構わないので、ご解答を頂けたら嬉しいです。
ご解答ありがとうございます。

お礼日時:2017/01/17 17:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています