[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Excelでハイパーリンク先のPDFを印刷するマクロをつくりたいです』(よすい)
ブック名「ブライト」
シート名「指図書」
ハイパーリンク挿入セル「f9」
※リンクはフルパスで表示されている
PDFが格納されているフォルダ「データ」
※「データ」の場所はデスクトップ上
f9にはハイパーリンク関数が入っており、
f7の文字列と連動してパス名が変わる仕組みとなっている。
この条件でf9のハイパーリンクを開き自動で印刷するマクロをつくりたいです。
アドバイスをお願いいたします。
< 使用 Excel:Microsoft365、使用 OS:unknown >
Set objAdobe = CreateObject("AcroExch.App") でうまくいきません。インターフェースが対応してないとかなんとか… 参照設定やAcrobatはインストール済みです。
Sub PrintPDF()
'ファイルパスを取得 filePath = Sheets("指図書").Range("F9").Value
'Acrobat Readerを起動し、PDFファイルを開く Set objAdobe = CreateObject("AcroExch.App") Set objAcrobat = CreateObject("AcroExch.AVDoc") objAcrobat.Open filePath, "Acrobat"
'PDFファイルを印刷する objAcrobat.PrintPagesSilent 1, 1
'Acrobat Readerを終了する objAcrobat.Close True objAdobe.Exit End Sub ``` (よすい) 2023/04/23(日) 22:33:06
AcrobatReaderしか持ってないので、十分かどうかわかりませんが・・・ 手持ちの道具を使った場合、こんな感じで印刷できると思います。
ページ枚数の指定方法が分からないので、PDFのページ枚数全部印刷されます。 クラスモジュールはごちゃごちゃしていますが、参考にしたサイトはURL載せてありますので、 必要なところだけ抜粋して使っていただければと思います。
クラスモジュールを追加して、以下のコードを入れる オブジェクト名は cls_PDFPrint としておく '■クラスモジュール Option Explicit 'cls_PDFPrint Private objShell As Object 'WScript.Shellのオブジェクト Private Acrobatパス_cls As String 'アクロバットのパスを保存する Private Path設定可否_cls As Boolean 'アクロバットのパスが通ったか判断する TrueはOK、FlaseがNG Private ファイル毎印刷数_cls As Long '印刷指示されたファイルの個数をカウントする Private 印刷総枚数_cls As Long '印刷枚数で指定された枚数をカウントする Private dic印刷失敗_cls As Object 'Dictionaryオブジェクト 印刷失敗時に、パスをkeyに入れる
Private Sub Class_Initialize() Dim パス候補 As Variant Set objShell = CreateObject("WScript.Shell") '■アクロバットの実行ファイルパスを検索 2022/1現在、2パターン On Error Resume Next For Each パス候補 In Array("Acrobat.exe", "AcroRd32.exe") Acrobatパス_cls = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" & パス候補 & "\") If Acrobatパス_cls <> "" Then Exit For Next パス候補 On Error GoTo 0 If Acrobatパス_cls = "" Then Path設定可否_cls = False Else Acrobatパス_cls = """" & Acrobatパス_cls & """" & " /t " 'ダブルクコーテーションで括り、引数を付ける Path設定可否_cls = True End If Set dic印刷失敗_cls = CreateObject("Scripting.dictionary") 'https://qiita.com/takiru/items/f38e94e666e802fa9a25 'http://pdf-file.nnn2.com/?p=222 'https://misora05.hatenablog.com/entry/2019/06/15/040628 End Sub
Public Function PrintOut_bool(ByVal ファイルパス As String, Optional 印刷枚数 As Long = 1) As Boolean '■印刷実行プログラム Dim i As Long 'ファイルパスのチェック If Dir(ファイルパス) <> "" Then On Error GoTo err '印刷枚数に従って、既定のプリンターで印刷 For i = 1 To 印刷枚数 objShell.Run Acrobatパス_cls & """" & ファイルパス & """" 印刷総枚数_cls = 印刷総枚数_cls + 1 Next i ファイル毎印刷数_cls = ファイル毎印刷数_cls + 1 PrintOut_bool = True Else 'パスがなかったか、それ以外のエラーで失敗したときにDictionaryにパスを追加 err: dic印刷失敗_cls(ファイルパス) = "" PrintOut_bool = False End If On Error GoTo 0 Rem execでオブジェクトを取得しても、印刷の成否は不明だった。 Rem 最終的に、印刷した部数と実際に印刷された部数が一致するか最後に確認する必要はあるかもしれない。 Rem acrobatのアップデートが実行している場合は、印刷されないことがあるので、気を付けたい。 End Function '各種プロパティーの出力 Public Property Get Acrobatパス_str() As String Acrobatパス_str = Acrobatパス_cls End Property Public Property Get Path設定可否_bool() As Boolean Path設定可否_bool = Path設定可否_cls End Property Public Property Get ファイル毎印刷数_long() As Long ファイル毎印刷数_long = ファイル毎印刷数_cls End Property Public Property Get 印刷失敗数_long() As Long 印刷失敗数_long = dic印刷失敗_cls.Count End Property Public Property Get 印刷失敗パス一覧_ary() As Variant 印刷失敗パス一覧_ary = dic印刷失敗_cls.keys End Property Private Sub Class_Terminate() Set objShell = Nothing Set dic印刷失敗_cls = Nothing End Sub
'■標準モジュール Option Explicit Sub PDF印刷() Dim pdf As cls_PDFPrint Dim filePath As String 'ファイルパスを取得 filePath = Sheets("指図書").Range("F9").Value
If MsgBox("1.アクロバットが閉じていることを確認してください" & vbCrLf & _ "2.右記のプリンターで印刷します(規定プリンタ)" & ActivePrinter & vbCrLf & _ "上記に問題がなければ はい を押してください", vbYesNo) = vbNo Then Exit Sub Set pdf = New cls_PDFPrint If pdf.Path設定可否_bool = False Then MsgBox "アクロバットがインストールされていないか、未知のバージョンです。管理者に問い合わせてください" Exit Sub End If
'印刷処理 If pdf.PrintOut_bool(filePath) = True Then MsgBox "印刷に成功しました" Else MsgBox "印刷に失敗しました" End If
'共通処理 Set pdf = Nothing End Sub (稲葉) 2023/04/24(月) 08:58:29
あ、F9の値がHYPERLINK関数の第二引数を入力していないことが前提で話進めてます。 たぶん、F9の数式は =HYPERLINK("C:\Users\ユーザー名\Desktop\"&F7) こんな感じだと思ってます。
それ以外だと filePath = Sheets("指図書").Range("F9").Value この部分工夫しないといけないです。 (稲葉) 2023/04/24(月) 09:12:27
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.