[[20240620161659]] 『ハイパーリンク先のPDFファイルを印刷したいです』(不動産屋) ページの最後に飛ぶ

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

 

『ハイパーリンク先のPDFファイルを印刷したいです』(不動産屋)

いつもお世話になります。

物品ごとの商品データ書類をPDFで保管しておりまして、商品管理リスト(エクセル)の商品番号にハイパーリンクを付けてPDFデータにアクセスできるようにしています。

定期的に一部の商品データを抽出して、商品資料(ハイパーリンク先のPDFデータ)を一括で印刷するマクロを作成しようと試行錯誤しています。

以前、ネットや本などで調べて自分なりにアレンジして印刷できるようになったのですが、データを整理していたところ印刷することができなくなりました。

元の通りに戻そうにも既に殆どのデータを移し替えてしまっていますので、新環境に適応するマクロを作りたいです。

ご助言いただけたら幸いです。

素人記述で恐縮ですが現状です。

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub zMapPrintOut()

    Dim strPrinterName As String

    If Not getPrinterName(strPrinterName) Then
        MsgBox "プリンターが接続されていません" & vbCrLf & Err.Description, vbCritical
        Exit Sub
    End If

    Call PrintPDF(strPrinterName)

End Sub

Function getPrinterName(strName As String) As Boolean

    Dim intPoint As Integer

    getPrinterName = False

    strName = Application.activePrinter
    If strName = "" Then Exit Function

    intPoint = InStr(activePrinter, "on") - 2
    strName = Left(strName, intPoint)

    getPrinterName = True

End Function

Sub PrintPDF(strName As String)

    Dim objShell As Object
    Dim strShellString As String
    Dim strFile As String
    Dim i As Integer

    Set objShell = CreateObject("WScript.shell")

    For i = 1 To Cells(Rows.Count, 2).End(xlUp).Row

        Call Sleep(500)

    strFile = "..\..\Menu\" & Cells(i, 2) & "\" & Cells(i, 3) & "\" & Cells(i, 1).Value & ".pdf"

        Call Sleep(500)

        strShellString = "Acrobat.exe /t " & Chr(34) & strFile & Chr(34) & " " & Chr(34) & strName & Chr(34)

        Call Sleep(500)

        objShell.Run (strShellString)

        Call Sleep(500)

        DoEvents

        Call Sleep(500)

    Next i

    Set objShell = Nothing

End Sub

あと、結構動作が遅くて難儀しています。
スリープを外すと今度は処理が詰まりすぎて作業できなくなります。

何かアドバイスありましたらお願いできましたら幸いです。

ちなみにファイルの保管先等の大まかなイメージです。

2階層前フォルダ――Menu(フォルダ)――大――中――小.pdf

――1階層前フォルダ
 |
 ―― 商品管理リスト(Excel)
   |
   ――※1 セルBに商品分類(大項目)―セルC(中)―セルA(小)

※1 各セルの大中小項目は商品資料のファイルパスになってます。
   Menu(フォルダ)>大(フォルダ)>中(フォルダ)>小(PDF)
   小.pdfがファイル名です。

   strFile = "..\..\Menu\" & Cells(i, 2) & "\" & Cells(i, 3) & "\" & Cells(i, 1).Value & ".pdf"

ちなみに、セルAの欄にはハイパーリンクでPDFにアクセスする。
ということは別の記述で出来ています。

こちらです。

Sub MenuLinkAdd()

    Dim i As Integer

    For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
        strFile = "..\..\Menu\" & Cells(i, 2) & "\" & Cells(i, 3) & "\" & Cells(i, 1).Value & ".pdf"
        ActiveSheet.Hyperlinks.Add Anchor:=Cells(i, 1), Address:=strFile
        Cells(i, 1).Font.Name = "HG創英角ゴシックUB"
        Cells(i, 1).Font.Size = 10
    Next i

End Sub

少し面倒な内容かと思いますが、何卒ご助力お願い申し上げます。

< 使用 Excel:Excel2016、使用 OS:Windows11 >


 質問内容が曖昧です。
 | 以前、ネットや本などで調べて自分なりにアレンジして印刷できるようになったのですが、
 | データを整理していたところ印刷することができなくなりました。
 | 元の通りに戻そうにも既に殆どのデータを移し替えてしまっていますので、新環境に適応するマクロを作りたいです。

 そのようなこと言われても、第三者がデータもないのに無理ですよ。
 こういう場での質問として相応しいものとは思えません。
 ご自分でステップ実行なりして、ものごとを整理して分析していくしかないですよ。

 なお、一点だけ気づいたことをメモします。
 Wsh.ShellのRunメソッドには、プログラムの実行が終了するまでコード実行を待機させるオプションが
 第三引数に備えられているので、それを利用されたらいかがでしょうか。
 むやみにSleepで時間調整するのは効率が悪いと思います。
 ↓参照サイト
https://learn.microsoft.com/ja-jp/previous-versions/windows/scripting/cc364421(v=msdn.10)?redirectedfrom=MSDN
(xyz) 2024/06/20(木) 19:32:06

コメント返信:

[ 一覧(最新更新順) ]


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