指定したフォルダ内のエクセルファイルをPDF出力するマクロを作成したのですが、全てのエクセルファイルがPDF出力されません。
以下作成したマクロ
VBA
1 2 3Sub EXCELファイルPDF化03() 'フォルダのEXCELファイルの一括変換 4 5 Dim Button, T, I, L As Integer 6 Dim OpenExcelFileName, ExcelFileName, ExcelFilePath, ExFileName As String 7 8 Application.DisplayAlerts = False '確認メッセージを無効化します。 9 10 11 Button = MsgBox("EXCEファイルの一括PDF変を行いますか?", vbYesNo + vbQuestion, "確認") 12 If Button = vbYes Then 13 14 OpenExcelFileName = Application.GetOpenFilename 'ダイアログを表示取り込むフォルダーにあるファイルを選択します。 15 16 If OpenExcelFileName <> "False" Then 17 ExcelFileName = Dir(OpenExcelFileName) '指定したファイルパスからファイル名を代入します。 18 ExcelFilePath = Replace(OpenExcelFileName, ExcelFileName, "") '指定したファイルパスを指定します。(ファイルパスからファイル名を取り除く) 19 MsgBox ExcelFilePath & "この選択フォルダからPDFに変換します。" 20 Else 21 MsgBox "キャンセルされました" 22 Exit Sub 'キャンセルでプログラムを終了します。 23 24 End If 25 26 ExFileName = Dir(ExcelFilePath & "*.xls?") '指定したフォルダーから一件目のEXCELファイルを指定します。 27 28 29 30 Do While ExFileName <> "" '読み込むファイルがなくなるまで繰り返す。 31 32 Workbooks.Open fileName:=ExcelFilePath & ExFileName, ReadOnly:=True, UpdateLinks:=0 'EXCELファイルを読み取り専用で読み込む 33 ExFileName = Left(ExFileName, InStr(ExFileName, ".") - 1) ' ファイル名から拡張子を取り除く(.xls?) 34 35 With ActiveSheet.PageSetup 36 .Zoom = False 37 .FitToPagesWide = 1 38 .FitToPagesTall = 1 39 End With 40 41 'ActiveWorkbook の記述はいらなかった 42 'レポートの記述にいらないスペースがあったかも 43 Dim ws As Worksheet 44 45 On Error Resume Next 'エラー無視 46 Set ws = Worksheets("レポート") 47 On Error GoTo 0 'エラー無視解除 48 If ws Is Nothing Then '"レポート"シートが存在しなければ、 49 Worksheets(Array("表紙", "検索", "表示箇所", "行動", "順位")).Select 50 ActiveSheet.ExportAsFixedFormat _ 51 Type:=xlTypePDF, _ 52 fileName:=ExcelFilePath & ExFileName, _ 53 OpenAfterPublish:=True 54 Else 55 ws.ExportAsFixedFormat _ 56 Type:=xlTypePDF, _ 57 fileName:=ExcelFilePath & ExFileName, _ 58 OpenAfterPublish:=True 59 End If 60 61 62 ActiveWindow.Close '読み込んだファイルを閉じます。 63 64 ExFileName = Dir() '次のファイルを指定する。 65 66 Loop 67 68 MsgBox "PDFファイルに一括変換しました。" 69 Else 70 MsgBox "処理を中断します" 71 End If 72 73 Application.DisplayAlerts = True '確認メッセージを有効化します。 74 75End Sub
現状、例として40個エクセルファイルがあると13個しかPDF出力できない状態となっております。
Debug.PrintでExFileNameを見にいくとしっかりと40個ファイルを見てくれているのですが、何故か全てPDF出力されてくれません。
指定したフォルダのファイル指定がおかしいのかとも思ったのですが全然わからずに手詰まりの状態です。
ここは見てみた?こうゆう風に調べてみては?等何かとっかかりになるヒント、アドバイス等頂けると幸いです!
宜しくお願い致します。
ファイル名は40個とも全て違いますか?
ご返答ありがとうございます!
はい、ファイル名は全て違います!
>OpenAfterPublish:=True
OpenAfterPublish:=false
にするとどうなりますか?
ご返答ありがとうございます!
以下のように追記してみましたが全てPDF出力できなかったです。
Sub EXCELファイルPDF化03() 'フォルダのEXCELファイルの一括変換
Dim Button, T, i, L As Integer
Dim OpenExcelFileName, ExcelFileName, ExcelFilePath, ExFileName As String
OpenAfterPublish = True
Application.DisplayAlerts = False '確認メッセージを無効化します。
Button = MsgBox("EXCEファイルの一括PDF変を行いますか?", vbYesNo + vbQuestion, "確認")
If Button = vbYes Then
OpenExcelFileName = Application.GetOpenFilename 'ダイアログを表示取り込むフォルダーにあるファイルを選択します。
If OpenExcelFileName <> "False" Then
ExcelFileName = Dir(OpenExcelFileName) '指定したファイルパスからファイル名を代入します。
ExcelFilePath = Replace(OpenExcelFileName, ExcelFileName, "") '指定したファイルパスを指定します。(ファイルパスからファイル名を取り除く)
MsgBox ExcelFilePath & "この選択フォルダからPDFに変換します。"
Else
MsgBox "キャンセルされました"
Exit Sub 'キャンセルでプログラムを終了します。
End If
ExFileName = Dir(ExcelFilePath & "*.xls?") '指定したフォルダーから一件目のEXCELファイルを指定します。
Do While ExFileName <> "" '読み込むファイルがなくなるまで繰り返す。
Debug.Print ExFileName
Workbooks.Open fileName:=ExcelFilePath & ExFileName, ReadOnly:=True, UpdateLinks:=0 'EXCELファイルを読み取り専用で読み込む
ExFileName = Left(ExFileName, InStr(ExFileName, ".") - 1) ' ファイル名から拡張子を取り除く(.xls?)
With ActiveSheet.PageSetup
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
'ActiveWorkbook の記述はいらなかった
'レポートの記述にいらないスペースがあったかも
Dim ws As Worksheet
On Error Resume Next 'エラー無視
Set ws = Worksheets("レポート")
On Error GoTo 0 'エラー無視解除
If ws Is Nothing Then '"レポート"シートが存在しなければ、
Worksheets(Array("表紙", "検索", "表示箇所", "行動", "順位")).Select
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
fileName:=ExcelFilePath & ExFileName, _
OpenAfterPublish:=True
Else
ws.ExportAsFixedFormat _
Type:=xlTypePDF, _
fileName:=ExcelFilePath & ExFileName, _
OpenAfterPublish:=True
End If
ActiveWindow.Close '読み込んだファイルを閉じます。
ExFileName = Dir() '次のファイルを指定する。
Loop
MsgBox "PDFファイルに一括変換しました。"
Else
MsgBox "処理を中断します"
End If
OpenAfterPublish = False
Application.DisplayAlerts = True '確認メッセージを有効化します。
End Sub
現象としては、「フォルダ内のエクセルファイル全てPDF出力されない」ではなく、「フォルダー内のエクセルファイルの中にPDF出力されないものがある(40ファイル中の27ファイルが出力されない)」という事なのですね。
PDFに出力されるファイルと、PDFに出力されないファイルに、何か違いがあって、それがPDFに出力されるか否かを決定しているように思われます。その40個のエクセルファイルは、どのようにして作られたのですか?ファイルの内容の差異は確認されましたか?
質問者が持っているファイルに依存した問題だとすると、回答者がファイルの情報を知りようがないので、回答は困難だと思います。(mako1972さんは、質問者からファイルを貰い受けて動作確認したのですか?)
印刷されない27個のエクセルファイルにも、"レポート"."表紙", "検索", "表示箇所", "行動", もしくは"順位"というワークシート名のワークシートが1つは含まれていることを確認しましたか?
「現状、例として」と曖昧な表現をされていますが、PDF出力されるエクセルファイルが無い(皆無)なのか、PDF出力されないエクセルファイルが混ざっているなのかを明確にしてください!
ご回答ありがとうございます!
曖昧な表現をしてしまい申し訳ありません。
PDF出力されないエクセルファイルが混ざっております。
ただレポートのシートだけ出力したいエクセルファイルと表紙", "検索", "表示箇所", "行動", "順位"だけ出力したいエクセルファイルに分けてマクロを実行したところ無事全てPDFと出力されているので困っております。
そしてシートの条件が一致していないエクセルファイルが混在しているフォルダでマクロを実行するとPDF出力されないエクセルファイルが混ざってしまう状態です。
回答4件
あなたの回答
tips
プレビュー