• 締切済み

質問させて頂きます。

質問させて頂きます。 マクロにて、特定フォルダ内の複数のxlsファイルを順次編集するため、 以下のコードを使用しています。 この度、"C:\第一営業部\"の下に、"C:\第一営業部\一課\"や、 "C:\第一営業部\三課\鈴木\"など、複数層のサブフォルダを増設し、従来通り "第一営業部"内のすべてのファイルを編集したいのですが、どのように記述を 変更すれば実現できるでしょうか?尚、上記の通り、サブフォルダの階層数は 一定ではありません。 お手数をおかけいたします。宜しくお願い申し上げます。 '--------------------------------------------------------- Dim fileNmCol As Collection 'ファイル名格納コレクション Dim folderPath As String 'フォルダのフルパス '作業用 Dim tempFileNm As Variant Dim fullPath As String Set fileNmCol = New Collection 'フォルダパス folderPath = "C:\第一営業部\" 'Dirにより、ファイル名を取得(xlsファイルのみ) 'フォルダ配下にあるファイル名を順次fileNmに格納する。 tempFileNm = Dir(folderPath + "*.xls", vbNormal) 'ファイル名をfileNmColに追加する Do While tempFileNm <> "" fileNmCol.Add (tempFileNm) tempFileNm = Dir() Loop 'ファイルの数だけ繰り返し For Each tempFileNm In fileNmCol 'ファイルのフルパスを設定指定して、Excelブックを開く fullPath = folderPath + tempFileNm Workbooks.Open fullPath '-------------------------------------------------------   '(ここでファイルを編集する記述) '------------------------------------------------------- 'ファイルを閉じる(アラートを無効にする) Application.DisplayAlerts = False Workbooks(tempFileNm).Close Application.DisplayAlerts = True Next '-----------------------------------------------------------------

みんなの回答

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。 File System Objectを使った経験はないですか。もしそうなら、下記で勉強なさって下さい。 http://officetanaka.net/excel/vba/filesystemobject/filesystemobject.htm 使い方ですが、下記で目的のフォルダー(最上位)のパスを与え folderName = "C:\Documents and Settings\hoge\" '下位フォルダも対象 Set FSO = CreateObject("Scripting.FileSystemObject") Set fileList = New Collection ここで、searchSubFolderの中味をXML->XLSを相手にする様に改造すると、指定フォルダ内の全階層のエクセルのファイルのCollectionが得られます。質問者様のコードではCollectionの中味は文字列ですが、ここではFSOのファイルオブジェクトである事にご注意下さい。 Call searchSubFolder(FSO.GetFolder(folderName)) 'XML file list作成

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

下記の#4に下位フォルダーを再帰的に処理して、ファイルのリストをCollectionに収納するコードを回答しておりますので、お役に立つところがあればお使い下さい。 遅いと記してありますが、何千個も相手にするのでなければ問題はありません。 http://okwave.jp/qa/q5592928.html

copper11
質問者

お礼

お返事が遅くなり申し訳ありません。 早速のご回答、誠にありがとうございます。 指定部分を確認したのですが、小生のレベルが低いため、 どのように引用したらいいのかよく分かりませんでした・・・ 自分で、少々試してみます。