EXCELのVBAを使ってPDFを開き指定のページのみを印刷する!

スポンサーリンク
050-VBA

へっぽこヘタレシステム管理者の管理人です。

さて、昨日に引き続き・・・

ある部署からエクセルのマクロの作成を依頼され・・・

その過程で、いくつか部品を作ったので忘備録として掲載します。

スポンサーリンク

EXCELのマクロを使ってPDFを開き指定のページを開く

まずは、コードです。

例では、マクロ1に割り当てています。

Sub Macro1()
'
' Macro1 Macro
'

'A列の最終行を取得

    Dim LastRow As Long         '最終行
    
    LastRow = Cells(1, 1).End(xlDown).Row 'A列の最終行を取得

'印刷繰り返し回数を指定

     Dim xClip
     Set xClip = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
     Dim P As String
     Dim i As Long
         
     For i = 2 To LastRow
    
     P = P & ActiveSheet.Cells(i, 1).Value
     If i <> LastRow Then P = P & ","
    
     Next

'pdf開く処理

     CreateObject("shell.application").shellExecute "PDFファイルをフルパスで指定"
        
    With Application
    
     .Wait Now + TimeValue("00:00:03")
     .SendKeys "^p", True	'CTRL+Pを押す
     .Wait Now + TimeValue("00:00:03")
     .SendKeys "%g", True	'ALT+Gを押す
     .Wait Now + TimeValue("00:00:03")
     .SendKeys "{TAB}"		'TABを押す
     .Wait Now + TimeValue("00:00:03")
    
     xClip.SetText P	'印刷ページをセット
    
     .Wait Now + TimeValue("00:00:03")
    
     xClip.PutInClipboard	'印刷ページをクリップボートにコピー
    
     .Wait Now + TimeValue("00:00:03")
     .SendKeys "^v", True	'CTRL+Vを押す
    
     .Wait Now + TimeValue("00:00:03")
     .SendKeys "~", True	'エンターを押す
    
     End With
    
End Sub

コードの処理は次のとおりです。

A列の2行目から印刷したいページを入力します。

A列の1行目は【ページ数】等とタイトルを付けておけば良いでしょう。

次に、A列の最終行を取得します。

次に、印刷するページ数をA列から取得します。

例えば、A列に次の様に入力されているとすると

  • A2:4
  • A3:8
  • A4:9
  • A5:15
  • A6:20

4,8,9,15,20

を【P】として取得します。

次に、PDFをフルパス指定で開きます。

スポンサーリンク

PDFを開いたら

【CTRL+P】を送信

ブログランキングにご協力ください!
ブログランキング・にほんブログ村へ

【ALT+G】を送信

【CTRL+V】で【P】にセットした印刷するページを貼り付け

最後に【ENTER】を送信

以上です。

【TimeValue(“00:00:03”)】は待ち時間の設定です。

とくに大きいサイズのPDFを開く場合は、印刷できるようになるまでに時間が掛かるので、最初の【CTRL+P】を送信するまでの時間を長めに設定するとよいでしょう・・・

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

コメント

タイトルとURLをコピーしました