[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セル内に入力してあるPDFファイルのパスを参照して、エクセル上からPDFを印刷するマクロを作りたい』(ゆっく)
初めまして。マクロを触りたての初心者でいろいろわからないことが多く
ご教授願いたいです。
1000ファイルほどのPDFデータがあり、それをエクセルで管理しており
エクセル上でPDFを一つ一つ印刷するマクロを作りたいです。
・M列にPDFのフルパスを記入
・L列のセルにPDFのデータ分「印刷」と記入
・M列に記載したPDFのフルパスを参照して、L列のセルクリックで印刷
・1000行分ほどデータがあり、全てが異なるPDFデータ
・PDFデータは今後も削除したり、増やしたりする
というようなマクロを構築したいと思っています。
例えばL4をクリックしたらM4のPDFを印刷、L11をクリックしたらM11のPDFを印刷、というようにしたいです。
ネットで参考にした下記のサンプルコードで試験的に組んでみたところ
印刷自体はできたのですが
Sub PDF印刷_Shell()
Dim wshShellObj As IWshRuntimeLibrary.WshShell 'Shellオブジェクト Set wshShellObj = New IWshRuntimeLibrary.WshShell Dim strShellCommand As String 'Shellコマンド
Const printFileName = "C:Users:○○○○.pdf(PDFのフルパス)" '分割元のPDFファイル名 Const printFilePath = printFileName '分割元のファイルパス Dim printerName As String 'プリンタ名 printerName = "所有しているプリンターの名前"
'Shellコマンドを設定 strShellCommand = "AcroRd32.exe /t " & printFilePath & " " & printerName
'Shellコマンドを実行 wshShellObj.Run (strShellCommand)
'オブジェクトを強制開放 Set wshShellObj = Nothing
End Sub
ここからどう応用すれば望むマクロを組むことができるか分からず
苦戦しています。
説明が拙く申し訳ありませんが、どなたかアドバイスいただければ幸いです。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
単体で印刷出来るところまでは済んでるって事ですよね。
ここからの方向性についてのご相談だと受けとって、 Const printFileName は Const printFilePath に引き継いでるだけなので不要と判断して... printFilePathを定数ではなく引数に引っ越せば
Sub PDF印刷_Shell(printFilePath As String)
っていうサブプロシージャになってくれる訳ですから、 あとは「このサブフロシージャをどうやって呼び出そうか...」というお話に変わってきます。 なんですけど...
> L4をクリックしたらM4のPDFを印刷、 > L11をクリックしたらM11のPDFを印刷
「セルをクリックしたら」という条件のイベントは用意されてないですよね。 Worksheet_SelectionChange Worksheet_BeforeDoubleClick Worksheet_BeforeRightClick のあたりで手を打つのが無難かなーと思います。
あと、(これはひょっとしたら程度の懸念ですけど) 連続で呼び出した時に Reader.exeがちゃんと仕事してくれない(印刷されない)事が あるかも知れないです。(し、そんなことないかも知れません)
(白茶) 2023/09/21(木) 22:02:45
大事なところが抜けていたようですみません、
「セルをクリックしたら」のイベントは別で用意してあり、
If Target.Column = 11 Then
ans = MsgBox(“印刷しますか”, vbYesNo) If ans = vbNo Then End End If Sub PDF印刷_Shell
End If
このコードでセルをクリック後、Sub PDF印刷_Shellを呼び出す設定にしていました。
これが正しいやり方かはわからないのですが…
定数ではなく引数に引っ越せばの部分が、頭では理解できるのですがや組み方に
四苦八苦しており、よろしければ具体的なコードを教えていただければ幸いです。
(ゆっく) 2023/09/21(木) 22:43:26
いや、かなり具体的にお示ししたつもりなんですけどね... ^^; アレで解って貰えないと、正直しんどいっす(こっちが)
それはそれとして... > If ans = vbNo Then > End '←これなんですけど > End If
「プログラムを強制的に停止させる」という命令であると理解た上で、 その意図でEndステートメントにしてます? (結構どギツい命令ですよ?)
一見Exitステートメントを使うべき所な様に見えるんですが...
(白茶) 2023/09/22(金) 08:51:28
あらあら。なんか誤解があったかも...
別に不快だとか質問するなとか、そういう事を申し上げたい訳ではないのですよ。 そんな事微塵も思ってませんし。 単に「これ以上丁寧な説明は難しいです(私には)」ってだけですからね。(あたしゃそんなにエラくないです ^^;)
よく理解せずにEndを使うのも、別に「それが悪い」とは申しておりません。 懸念を指摘したまでですので。
(白茶) 2023/09/22(金) 09:24:30
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.