none
Excel VBAによる同一フォルダ内Excelファイルの一括変換について RRS feed

  • 質問

  • 実務にVBAを導入していきたいとこれから勉強しようと思っている
    VBA初心者です。

    特定のフォルダに保存されたすべてのExcelファイルを
    PDFに変換するVBAコードにつき、

    以下の指示を追加したい場合、どのようなコードを書き足せばいいかご教示いただけないでしょうか?

    1.非表示のシートがあると正常に作動しません。
     予め非表示のシートを度外視するコードを加えたいです。

    2.シート名を選択してPDF化するようにしたいのですが、
     「請求書(XX)」「請求書(XXX)」「明細書」といったように、
     特定名称のものと連番性質のものが混在しています。
     こうした場合のシート指定のコードを加えたいです。


    --------------------------------------------------

    Sub convertToPdf()
    Dim buf As String
    Dim cnt As Long
    Dim files() As String
    Dim rc As Integer
    Dim item As Variant
    Dim fullname As String
    Dim fullnamePdf As String
    Dim objExcel As Object 'Excel.Application
    Dim objBook As Object 'Excel.Workbook
    Dim objFs As Object 'Scripting.FilesystemObject

    Set objFs = CreateObject("Scripting.FilesystemObject")

    buf = Dir(ThisWorkbook.Path & "\*.xlsx")
    cnt = 0
    Do While buf <> ""
    ReDim Preserve files(cnt)
    files(cnt) = buf
    cnt = cnt + 1
    buf = Dir()
    Loop

    If cnt = 0 Then
    MsgBox (".xlsxファイルが見つからないため終了します。")
    Else
    rc = MsgBox(".xlsxファイルが" & cnt & "件見つかりました。一括変換処理を行いますか?", vbYesNo + vbQuestion, "確認")
    If rc = vbYes Then
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = False
    For Each item In files()
    fullname = ThisWorkbook.Path & "\" & item
    fullnamePdf = ThisWorkbook.Path & "\" & objFs.GetBaseName(item) & ".pdf"
    Set objBook = objExcel.Workbooks.Open(fullname, , True)
    objBook.Worksheets().Select
    objBook.ActiveSheet.ExportAsFixedFormat 0, fullnamePdf
    objBook.Close (False)
    Set objBook = Nothing
    Next item
    objExcel.Quit
    Set objExcel = Nothing
    MsgBox ("処理が完了しました。")
    Else
    MsgBox ("処理を中断しました。")
    End If
    End If

    Set objFs = Nothing
    End Sub

    2018年3月21日 13:48

すべての返信

  • objBook.Worksheets(シート名の配列).Select

    で、特定のシートだけを選択することができます。なので、エクスポートするシートの名前の配列を作れば目的を達成できそうです。objBook.WorksheetsにあるWorksheetを順番に見ていって、条件に合致しているか確認して、合致していれば配列に追加、ですね。

    非表示のシートがあると正常に作動しません。
     予め非表示のシートを度外視するコードを加えたいです。

    WorksheetのVisibleがTrueかどうかで判断できそうです。

    2.シート名を選択してPDF化するようにしたいのですが、
     「請求書(XX)」「請求書(XXX)」「明細書」といったように、
     特定名称のものと連番性質のものが混在しています。
     こうした場合のシート指定のコードを加えたいです。

    Left関数でシート名の左数文字を取り出して比較、ではどうでしょうか?

    2018年3月22日 2:30