【VBA】ExcelシートをPDF経由でPNG形式に変換する方法

VBA

ExcelシートをPDFに変換し、さらにそのPDFをPNG形式の画像ファイルとして保存するVBAマクロの作成方法を解説します。今回は、ExcelシートをPDFとして出力し、それをAdobe Acrobatを使ってPNGファイルに変換するプロセスに注目します。

目的

このマクロは、ExcelシートをPNG形式で保存する場合に役立ちます。特に、シート内に図形やグラフが多く含まれている場合、PNG形式で保存することで高解像度の画像を生成することができます。

必要な環境

  • Adobe Acrobatがインストールされていること(PDFをPNGに変換するために使用)
  • PDFプリンターがセットアップされていること

コードの概要

このVBAコードは、ExcelシートをPDFに変換し、そのPDFをトリミングしてPNG形式に変換する手順を実行します。

Public PNGName As Variant
Public PDFName As String

Sub CreatePNG()
    ' 保存先とファイル名を選択
    PNGName = Application.GetSaveAsFilename(FileFilter:="PNGファイル (*.png), *.png")
    If PNGName = False Then
        Exit Sub
    End If

    ' 一時PDFファイルのパス指定
    Dim WSH As Object
    Set WSH = CreateObject("WScript.Shell")
    PDFName = WSH.SpecialFolders("MyDocuments") & "\TempPDF.pdf"
    Set WSH = Nothing

    ' PDF形式でシートを保存
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=PDFName, _
        Quality:=xlQualityStandard, OpenAfterPublish:=False, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False

    ' PDFからPNG形式への変換を実行
    Call TrimPDFtoPNG
End Sub

Private Function TrimPDFtoPNG()
    Dim objAcroApp As Object
    Dim objAcroAVDoc As Object
    Dim objAcroPDDoc As Object
    Dim objAcroPDPage As Object
    Dim jso As Object
    Dim WSH As Object

    ' 一時PDFのパス取得
    Set WSH = CreateObject("WScript.Shell")
    PDFName = WSH.SpecialFolders("MyDocuments") & "\TempPDF.pdf"
    Set WSH = Nothing

    ' Adobe Acrobatのオブジェクトを作成してPDFを開く
    Set objAcroApp = CreateObject("AcroExch.App")
    Set objAcroAVDoc = CreateObject("AcroExch.AVDoc")

    ' PDFファイルを開いて処理を開始
    If Not objAcroAVDoc.Open(PDFName, "") Then
        MsgBox "PDFの読み込みに失敗しました。", vbExclamation
        Exit Function
    End If

    Set objAcroPDDoc = objAcroAVDoc.GetPDDoc

    ' PNGとして保存
    Set jso = objAcroPDDoc.GetJSObject
    jso.SaveAs Replace(PNGName, ".pdf", ".png"), "com.adobe.acrobat.png"

    ' PDFファイルを閉じてAdobe Acrobatを終了
    objAcroAVDoc.Close True
    objAcroApp.Exit

    ' オブジェクトを開放
    Set objAcroApp = Nothing
    Set objAcroAVDoc = Nothing
    Set objAcroPDDoc = Nothing
    Set jso = Nothing

    ' 一時PDFファイルを削除
    Kill PDFName

    MsgBox "PNGファイルが作成されました: " & PNGName
End Function

コードの解説

  1. 保存先とファイル名の選択:
  • GetSaveAsFilename メソッドを使用して、PNGファイルの保存先とファイル名を選択します。ユーザーがキャンセルした場合は、処理を中止します。
  1. 一時PDFファイルの作成:
  • ExcelシートをPDFに変換し、一時的に保存します。このPDFは後にPNGに変換されます。
  1. PDFをPNGに変換:
  • Adobe Acrobatのオブジェクト (AcroExch.App, AcroExch.AVDoc) を使用してPDFを開き、JavaScriptオブジェクト (GetJSObject) を使ってPDFをPNG形式に変換します。
  • PDFを開く際にエラーが発生した場合には、メッセージを表示して処理を終了します。
  1. 一時PDFファイルの削除:
  • PNGファイルを作成後、一時的に使用したPDFファイルを削除します。
  1. 完了メッセージの表示:
  • PNGファイルが正常に作成されたことをユーザーに知らせるメッセージボックスが表示されます。

使用手順

  1. コードの配置:
  • このコードをExcelのVBAエディタにコピーし、マクロを実行します。
  1. 保存先の選択:
  • マクロ実行後、PNGファイルを保存する場所とファイル名を指定するダイアログが表示されます。
  1. 変換の実行:
  • マクロは、まずExcelシートをPDFに変換し、次にそのPDFをPNGに変換して指定された場所に保存します。
  1. 完了メッセージ:
  • 処理が完了すると、PNGファイルが作成されたことを知らせるメッセージが表示されます。

注意点

  • Adobe Acrobatが必要: このコードは、Adobe Acrobatのオブジェクトを使用してPDFをPNGに変換するため、実行環境にAdobe Acrobatがインストールされている必要があります。
  • 一時ファイルの扱い: マクロの実行中に一時PDFファイルが作成されますが、処理が終了すると自動的に削除されます。

まとめ

このVBAマクロを使用すれば、ExcelシートをPNG形式の画像ファイルに変換する作業が自動化され、手作業の手間を大幅に削減できます。Excelのシートを画像として保存して、レポートやプレゼン資料に使用したい場合に非常に便利です。


難しいですが頑張って!

ではまたー

コメント

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