テキストは5台のパソコンにそれぞれ6台のプリンタをぶら下げ、合計30台のプリンタを使って印刷しています。
てなわけで、手作業で印刷していたのでは大変なので1台別のパソコンを用意してそのパソコンでWordのVBAを使って5台のパソコンを制御しています。
印刷はWord2010を使ってWordのデータで印刷していたのですが、Wordの処理が非常に重たくてうまく印刷できないテキストが増えてきました。
PDFなら6台でも同時に印刷できそうなのでWordのデータを印刷するのをやめてPDFに変換してから印刷することにしました。
1.Adobe Reader を使って印刷
Webを探すといろいろ出てきましたが、とりあえず無料のAdobe Reader を使って印刷する方法を試してみました。
Set MyShell = CreateObject("WScript.Shell")
MyShell.Run ("AcroRd32.exe /t " & Chr(34) & FileName & Chr(34) & " " & Chr(34) & PrinterName & Chr(34))
Set MyShell = Nothing
これでAdobe Reader で FileName で指定したファイルを PrinterName で指定したプリンターから印刷できます。
Chr(34)は文字の「"」で、FileName や PrinterNameにスペースがある場合に備えて「"」でくくるようにしています。
これでとりあえずPDFの印刷はできたのですが、問題がありました。
Adobe Readerが終了しないのとページを指定できないのです。
2.Adobe Acrobat を使って印刷
無料のAdobe ReaderでだめでもAdobe Acrobat がインストールしてあればもっといろいろできます。が、
私のパソコンにはインストールされていません。
ということで、とりあえず体験版をダウンロードすることにしました。
体験版には30日の使用期限がありますが、うまくいけば購入することにしましょう。
VBAでAcrobatを操作するための設定。
VBEを起動後、「ツール」-「参照設定」で「Adobe Acrobat 10.0 Type Library」にチェックを入れます。
(最初の表示はAcrobatだけだったように気がしますが・・・)
ページ指定して印刷するためのソースがこれです。
Dim objAcroAVDoc As New Acrobat.AcroAVDoc
Dim lRet As Long
Sub PDFの印刷()
Dim MaxPage As Integer '最大ページ数
Dim FileName As String 'ファイル名
Dim PrinterName As String 'プリンター名
Dim ISP As Integer '印刷先頭ページ
Dim IEP As Integer '印刷最終ページ
|
|
'PDFファイルのオープン
MaxPage = OpenPDF(FileName)
If MaxPage > 0 Then
|
|
'PDFファイルの印刷実行
PDFprint PrinterName, ISP, IEP
'PDFファイルを閉じる
ClosePDF
End If
End Sub
Function OpenPDF(PDF_FILE As String) As Integer
Dim AcroExchPDDoc As Object
Dim buf As Long
If Dir(PDF_FILE) <> "" Then
lRet = objAcroAVDoc.Open(PDF_FILE, "")
Set AcroExchPDDoc = objAcroAVDoc.GetPDDoc()
OpenPDF = AcroExchPDDoc.GetNumPages
Set AcroExchPDDoc = Nothing
Else
MsgBox "ファイルが見つかりません", vbExclamation
OpenPDF = 0
End If
End Function
Sub ClosePDF()
lRet = objAcroAVDoc.Close(0)
Set objAcroAVDoc = Nothing
End Sub
Sub PDFprint(PrinterName As String, PageS As Integer, PageE As Integer)
Dim Cprint As String '現在のアクティブプリンタ
Cprint = ActivePrinter
ActivePrinter = PrinterName
lRet = objAcroAVDoc.PrintPages(PageS - 1, PageE - 1, 2, 0, 1)
ActivePrinter = Cprint
End Sub