- ベストアンサー
複数フォルダに格納されたファイル名取得VBA
- 複数のフォルダに格納されたファイルの情報を取得するVBAプログラムです。
- 実行するとエラーが発生し、解決方法がわからない状況です。
- この問題が解決できないと、毎日繰り返し作業が必要になります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラーの理由はNo2さんが回答していますので..... Dir()関数は入れ子にできないのでフォルダの取得とファイルの取得を別々に考えます。 まずフォルダのみを収集しそのフォルダ内のファイルを取得します。 例:(見やすくするために全角スペースでイデントしています) Sub test2() Dim buf As String Dim fName As String Dim msg As String Dim AA() As String Dim i As Long 'フォルダの取得 ReDim AA(0) buf = Dir("*.*", vbDirectory) Do While buf <> "" If GetAttr(buf) = vbDirectory Then If buf <> "." And buf <> ".." Then ReDim Preserve AA(UBound(AA) + 1) AA(UBound(AA)) = buf Cells(UBound(AA), 3) = buf End If End If buf = Dir() Loop 'ファイルの取得 For i = 1 To UBound(AA) fName = Dir(CurDir & "\" & AA(i) & "\" & "*.jpg") Do While fName <> "" cnt = cnt + 1 Cells(cnt, 1) = AA(i) Cells(cnt, 2) = fName msg = msg & buf & "\" & fName & vbCrLf fName = Dir() Loop MsgBox msg Next i End Sub
その他の回答 (2)
- neKo_deux
- ベストアンサー率44% (5541/12319)
VBAのヘルプ、Dir関数の説明にある、 | 一致するファイル名がない場合は、Dir 関数は長さ 0 の文字列を返します。長さ 0 の文字列が返された場合は、次に Dir 関数を呼び出すときに引数 pathname を再び指定しなければなりません。指定しないとエラーが発生します。 の通りのエラーです。 ループの中で、 fName = Dir() が空白になった際、内側のループを抜けた後の、 buf = Dir() がエラーになります。 Dir関数は入れ子にして使う、再帰的に呼び出すなんかの場合は、ちょっと工夫が要るかも? DIR関数 - Visual Basic - 教えて!goo http://okwave.jp/qa/q3040393.html
- papapa0427
- ベストアンサー率25% (371/1472)
そりゃそうでしょう。 かなり間違った解釈をされています。 >buf = Dir("*.*", vbDirectory) bufはstring型ですから、一つのファイル名しか入りませんよ。 それに複数のファイル名を入れようとしているんですからエラーになって当然ですね。 >Do While buf <> "" この解釈も同様の誤りに起因しています。 まずはファイル名を一つ一つ取り込むプログラムを書かれてはいかがでしょう。 ここでこういう風にプログラム書いたら良いよってのは匿名でやっている関係上責任持てませんので出来ません。あくまでも自助努力のお助けをするだけです。
お礼
早々のご回答ありがとうございました。 ファイル名を一つずつ取り込むところはできたんですけど、 それを全フォルダでって言うところが難しくて・・・
お礼
ご回答ありがとうございます! まさにやりたいことが実現できました(^O^)