へっぽこヘタレシステム管理者の管理人です。
さて、昨日に引き続き・・・
ある部署からエクセルのマクロの作成を依頼され・・・
その過程で、いくつか部品を作ったので忘備録として掲載します。
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】を送信するまでの時間を長めに設定するとよいでしょう・・・
コメント