EXCEL VBAからシートのPDF変換を行う - BullZip PDF Printer
[2009-12-17]頂いたコメントを元に追記しました。
PDFファイルを作成可能なフリーソフト「BullZip PDF Printer」 - GIGAZINEで紹介されていた、無償のPDF作成ツール。
既に常用している方も多いのではないでしょうか。
本家(FREE PDF Printer)を覗いてみると、
Features
FREE PDF Printer
- COM/ActiveX interface for programmatic control.
の文字が。VBやVBAからPDF変換の機能を利用できるのでは?と考え付きました。
ヒントはユーザガイドにあります。
COM Automation
All examples where COM Automation (ActiveX) is used to control the printer must use a different Program ID. Some examples may contain the code below:
CreateObject("bioPDF.PDFPrinterSettings")This should be changed to:
PDF Printer - User Guide
CreateObject("Bullzip.PDFPrinterSettings")
COM Automation from Visual Basic Scriptingにサンプルが落ちています。
[2009-12-17追記]
コメント下さったirmrさんからの提供情報です。
Create a PDF from Microsoft Excelにズバリなサンプルがありました。
EXCELの標準モジュールを利用して、早速PDF変換してみました。以下がそのコードです。
'***************************************************** 'Bullzip PDF Printerを使ったPDF作成 'アクティブなワークシートを、C:\text.pdfに保存します。 'Bullzip PDF Printerのインストール必須 '***************************************************** Sub PrintSheetAsPDF() Dim objPrinterSettings As Object Dim printerName As String Dim savePath As String Set objPrinterSettings = CreateObject("Bullzip.PDFPrinterSettings") printerName = "Bullzip PDF Printer" 'プリンタ名 Dim fullPrinterName As String fullPrinterName = GetFullNetworkPrinterName(printerName) '保存するためのプリンタ設定を行う savePath = "C:\test.pdf" '保存先 With objPrinterSettings .SetValue "output", savePath .SetValue "showsettings", "never" .WriteSettings True End With 'アクティブなプリンタを一時的にBullzipに変更 printerBuf = Application.ActivePrinter ActivePrinter = fullPrinterName 'PDFに変換 ActiveSheet.PrintOut 'アクティブなプリンタを戻す ActivePrinter = printerBuf End Sub '***************************************************** 'ネットワークプリンタ名を取得する ' @param printerName : プリンタ名 ' @return [printerName] on Ne99: 形式のプリンタ名 '***************************************************** Function GetFullNetworkPrinterName(printerName As String) As String Dim currentPrinterName As String Dim temp_printer_name As String Dim i As Long currentPrinterName = Application.ActivePrinter i = 0 Do While i < 100 tempPrinterName = printerName & " on Ne" & Format(i, "00") & ":" On Error Resume Next Application.ActivePrinter = tempPrinterName On Error GoTo 0 If Application.ActivePrinter = tempPrinterName Then GetFullNetworkPrinterName = tempPrinterName Exit Do End If i = i + 1 Loop Application.ActivePrinter = currentPrinterName End Function
[2009-12-17追記]
コメント下さった、tecnoさん、irmrさんからの情報です。
「Error creating object: BullzipPdfSettings. Error-2147024894:ファイルまたはアセンブリ名BullzipPdfWrter、またはその依存関係の1つが見つかりませんでした。」
というエラーに対する対処法を頂きました。対策はコメントを参考にしてみてください。
VBAを書けるスキルが要求されると思います。