(補足)EXCEL VBAからシートのPDF変換を行う - BullZip PDF Printer
EXCEL VBAからシートのPDF変換を行う - BullZip PDF Printer - Developer☆STYLE
の補足です。
「Error creating object: BullzipPdfSettings. Error-2147024894:ファイルまたはアセンブリ名BullzipPdfWrter、またはその依存関係の1つが見つかりませんでした。」
というエラーに対する対処です。残念ながら、私の環境ではエラーが出てないので、あくまでご参考ということになってしまいます。
参考になったページ(コメント下さったirmrさんより)
さて、手順です。
DOSプロンプトから、Bullzipの環境変数を表示します。
"C:\Program Files\Bullzip\PDF Printer\gui.exe" info
※インストール先が違う場合は読み替えて下さい。
runonceというセクションを確認します。
C:\Users\[logonName]\AppData\Local\PDF Writer\Bullzip PDF Printer
とあるので、このディレクトリを控えておきます。
settings.iniの作成
runonceセクションのディレクトリに settings.ini というファイル名でテキストファイルを作成します。
※[logonName]の部分は読み替えて下さい。
※outputの部分が保存先になります。
settings.ini
output="C:\test.pdf" showsettings=never
VBAを記述して、マクロからPrintSheetAsPDFを呼び出せば完了です
'***************************************************** '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