[[20230921181455]] 『セル内に入力してあるPDFファイルのパスを参照しax(ゆっく) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セル内に入力してある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:12:39

 あらあら。なんか誤解があったかも...

 別に不快だとか質問するなとか、そういう事を申し上げたい訳ではないのですよ。
 そんな事微塵も思ってませんし。
 単に「これ以上丁寧な説明は難しいです(私には)」ってだけですからね。(あたしゃそんなにエラくないです ^^;)

 よく理解せずにEndを使うのも、別に「それが悪い」とは申しておりません。
 懸念を指摘したまでですので。

(白茶) 2023/09/22(金) 09:24:30


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.