2013年8月19日月曜日

VBA 「ExportAsFixedFormat」で複数のExcelをまとめてPDFに変換する。

Excel2007からExcelファイルなどをPDF、XPSに変換できるようになりました。
VBAで記述するには、「ExportAsFixedFormat」メソッドを使います。

簡単に以下のような画面を作ってみました。


























1つ目のテキストボックス(TextBox1)には、PDFに変換したいExcelファイルが格納されているフォルダのパスを指定します。
2つ目のテキストボックス(TextBox2)には、変換後のPDFファイルを格納するフォルダパスを指定します。
最後に、ボタン(CommandButton1)を押下すると処理が始まります。

実際のコードはこんな感じに書きました。
Private Sub CommandButton1_Click()
    Dim path As String
    
    path = TextBox1.Value               'フォルダパスを取得
    Application.ScreenUpdating = False  '画面描画OFF
    Call CreatePDF(path)                'フォルダパスを渡してメイン処理呼び出し
    Application.ScreenUpdating = True   '画面描画ON
    MsgBox "PDF変換完了!!!"
    
End Sub

ボタンを押下すると、テキストボックス(TextBox1)のパスを引数にメイン処理を呼び出します。
Sub CreatePDF(FolderPath As String)

    Dim FilePath As String  'Excelフルパス用変数
    Dim PDFPath As String   'PDFフルパス用変数
    Dim ExcelBook As Workbook
    Dim i As Object
    Dim FSO As Object       'FileSystemObject用変数
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    For Each sbFolders In FSO.getfolder(FolderPath).SubFolders
        Call CreatePDF(sbFolders.path)
    Next sbFolders
    For Each i In FSO.getfolder(FolderPath).Files
        FilePath = FolderPath & "\" & i.Name    'パス&ファイル名を取得
        Set ExcelBook = Workbooks.Open(FilePath)
        PDFPath = TextBox2.Value & "\" & ActiveWorkbook.Name & ".pdf"   'パス&アクティブファイル名&.PDF
        ExcelBook.ExportAsFixedFormat Type:=xlTypePDF, _
                                      Filename:=PDFPath, _
                                      quality:=xlQualityStandard
        ActiveWorkbook.Close
    Next i

    Set FSO = Nothing
    
End Sub

上記がメイン処理部分のコードです。
FileSystemObjectを使って、指定したフォルダ以下のファイルを全てPDFに変換しています。
以下は、コマンドプロンプトからtreeコマンド「tree /F > tree.log」でフォルダ構成を取得した画像です。これをPDF化します。
























マクロを実行すると、このようにTextBox2で指定したフォルダにPDFに変換したファイルが格納されます。

0 件のコメント:

コメントを投稿