- ベストアンサー
VBAで複数ファイルのページ数出力
- VBAを使用して複数のExcelファイルのページ数出力する方法について質問です。
- 選択した複数のExcelファイルのファイル名とページ数をマクロを実行したファイルに出力する方法を教えてください。
- 既存のデータがあれば追加されるようにしたいのですが、上手くいきません。また、実行時に複数ファイルを選択したにも関わらず、1ファイルのデータしか出力されません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Sub PageCount() '出力先の用意 Dim OutputSheet As Worksheet Set OutputSheet = ThisWorkbook.Worksheets("Sheet1") '<=実際のシート名にする。 Dim RowNumber As Long Const RowStart = 2 RowNumber = RowStart '最初の空行を探す While OutputSheet.Cells(RowNumber, 1).Value <> "" RowNumber = RowNumber + 1 Wend With CreateObject("WScript.Shell") .CurrentDirectory = ThisWorkbook.Path End With Dim FileList As Variant FileList = Application.GetOpenFilename(FileFilter:="Microsoft Excelブック,*.xls*", MultiSelect:=True) Dim Path As Variant For Each Path In FileList Dim BookToPrint As Workbook Set BookToPrint = Workbooks.Open(Path, , True) OutputSheet.Cells(RowNumber, 1).Value = BookToPrint.Name Dim PageCount As Long PageCount = 0 Dim sh As Worksheet For Each sh In BookToPrint.Worksheets PageCount = PageCount + sh.PageSetup.Pages.Count Next OutputSheet.Cells(RowNumber, 2).Value = PageCount BookToPrint.Close False RowNumber = RowNumber + 1 Next End Sub # ほとんどの場合、タイピングする時間より、修正したり、理解するために読み解いたりする時間のほうが長いので、変数名は省略しすぎず、読んで意味がわかるようにつけたほうが良いと思います。wb2 = ThisWorkbook とするぐらいなら、ThisWorkbookと毎回入力するほうがまだわかりやすいと思います。上のコードは少しやりすぎかもしれませんが。 # 局所的にしか使わない変数は直前に宣言するほうが読みやすいと思うので、そのようにしていますけれど、多くの入門書等の流儀とは違うと思うので、自分にあった方法を選択してください。
その他の回答 (1)
- micnak
- ベストアンサー率60% (3/5)
動作として希望するのは、ダイアログで選択したファイルを表示することですか。特定のフォルダ内のファイルをすべて表示することですか。 たぶん、拾ったコードを流用する際に2つの目的のコードが混ざってしまっています。 直接エラーとなっている原因は、Do Loopの中で1回目にFnameを取得しているので、2回めにLoopに入ったときにはFnameが""でなくて、Loop内の処理を行う前にLoopを抜けてしまっていることです。
補足
回答ありがとうございます。 希望動作はダイアログで選択したファイルを表示することです。 エラー原因勉強になります。 もし良かったら、どのように改善すればよいかご教授頂いてもよろしいでしょうか。
お礼
すごいです!問題なく動作しました! ありがとうございます! 読みやすいお作法も教えて頂きありがとうございます。 個人的にfor nextやdo loopが混ざりすぎて、複雑になってきているなと思っていたので、非常に勉強になりました。 ありがとうございました。