Segmentation Fault

コアダンプの数だけ強くなれるよ、デスマと戦うエンジニアのように。

URLを指定して開いたページをPDFで保存する

IEで特定のページを開く→ 仮想プリンタでPDF印刷という作業を繰り返したい人向け。

[作業の流れ]

  1. 仮想プリンタ(BullzipやPDF reDirect等)をインストールして通常使うプリンタに設定する。
  2. ExcelでURLのリストを作り、マクロにPDF化するプログラムを記載して実行。


PDF_PRINT.xlsm
f:id:segmentation-fault:20170215020433p:plain

VBAコード

'Sleepを使うためライブラリを呼び出し
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)
#End If

Sub PRINT_PDF()

  'URLリスト範囲
  Const URL_LIST_HEAD = 1
  Const URL_LIST_TAIL = 4
  Const URL_LIST_ROW = 1

  Dim UrlEntry As Long
  
  'URL数分繰り返し
  For UrlEntry = URL_LIST_HEAD To URL_LIST_TAIL
    'URLを指定してPDFで印刷する
    Call URL2PDF(Cells(UrlEntry, URL_LIST_ROW))
  Next UrlEntry

End Sub


Function URL2PDF(URL As String)
    
  'iexplore.exe起動
  Set IE = CreateObject("InternetExplorer.Application")
  
  'ブラウザ表示
  IE.Visible = True

  'URL指定したページを表示
  IE.Navigate URL
  
  'ページの読み込みが完了するまで待機
  Do Until IE.Busy = False
      Sleep 250
  Loop

  'デフォルトのプリンタ(今回はPDF出力する仮想プリンタ)で印刷実行
  'IE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
  IE.ExecWB 6, 2
  
  'ENTER, ALT+F4(閉じる)キーの送信用
  Set Sh = CreateObject("WScript.Shell")
  
  '適度なwait
  Sleep 3000

  '仮想プリンタの印刷ボタンをポチッとな
  Sh.SendKeys ("{ENTER}")

  '適度なwait
  Sleep 10000
  
  '閉じるボタン(ショートカットキー)(必要なら)
  'Sh.SendKeys ("%" + "{F4}")

  '適度なwait
  Sleep 3000
  
  Set Sh = Nothing

  'IEを閉じる
  IE.Quit
  Set IE = Nothing
  
  'IEのプロセスを強制終了
  'IEを閉じるだけではプロセスが残り,次回のNavigateで失敗する場合があるので念のため
  Shell "taskkill /f /im iexplore.exe"
  
  '適度なwait
  Sleep 3000
  
End Function


動けばいいやで作ったツールなので変なSleepの処理などはご容赦。