質問: いつも丁寧な解答をありがとうございます。 今回はexcel2010のVBAについて教えて下さい。 やりたいこととしては、フォルダ内にあるすべてのExcelブックのファイル名と各ヘッダーとフッターを一覧表に入力する形で取得したいのです。 用途としては、報告書やファイルの提出前に、提出書類を一纏めにしたフォルダにて各ファイルのヘッダーとフッターを確認し、問題があるファイルのみ修正するといったオペレーションをするためです。 ファイル数がそこそこあり、すべて開いて閉じてを繰り返していると手間なのと、大袈裟かもしれませんが開いたタイミングで何らかの人為的なミスが起こらないとも限らないので自動化できるならしたいです。 web上で調べながら試行錯誤してみたところ、フォルダ内のファイルをすべて開くVBAや、閉じている特定のファイルの特定のシートのセル値を取得するVBA、開いているファイルのヘッダーとフッターを取得するVBAはできました。 ただ、フォルダ内のすべてのファイルを開かずにpagesetupの値を取得することはできませんでした。 考え方として、閉じている特定のファイルの特定のシートのpagesetupでヘッダーやフッターを指定すれば出来るのではないかと思っていたのですが、そもそもの考え方がちがうのでしょうか。 実現することは可能でしょうか。 それとも各ファイルを開いて取得するを繰り返すしかないでしょうか。 解決に繋がるヒントやサイトをご存じの方、教えていただけますでしょうか。 よろしくお願いいたします。 追記:今回はメンテナンス性の観点から使用できる言語がexcelVBAのみとなります。
回答: 「ファイルを開かずに」という表現が曖昧ですが、EXCELブックとして開かない、ということでしょうか。 COMを使うことで実際にファイルを開かずに処理することはできそうです。 ``` Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Dim file As String file = "c:\temp\test1.xlsx" Set xlApp = CreateObject("Excel.Application") xlApp.Workbooks.Open Filename:=file, UpdateLinks:=0 'xlApp.Visible = True ' これを有効にするとEXCELファイルが開かれます Set xlBook = xlApp.Workbooks(Dir(file)) Set xlSheet = xlBook.Worksheets("Sheet1") Debug.Print xlSheet.PageSetup.LeftHeader Debug.Print xlSheet.PageSetup.CenterHeader Debug.Print xlSheet.PageSetup.RightHeader xlBook.Close saveChanges:=False xlApp.Quit Set xlSheet = Nothing Set xlBook = Nothing Set xlApp = Nothing ``` これは1ファイル・1シートを固定で処理してますが、これをフォルダ内のファイル、ブック内のシートを処理するようにすればよろしいかと思います。 また[ツール]-[参照設定]で、"Microsoft Excel XX.X Object Library" を有効にしておいてください。 XX.Xのバージョンはご自分の環境に合わせてください。