- ベストアンサー
全サブフォルダのファイルの取得
VB6のFileSystemObjectを使って、サブフォルダの中のファイルを取得したいのです。 For Each ~ Next 文などをつかっていろいろやっているのですが、どうしてもサブフォルダ以降のサブサブフォルダから下が取得できません。 誰か教えてください。
- Masato_a
- お礼率37% (23/61)
- Visual Basic
- 回答数2
- ありがとう数3
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ちょっと前にやったことがあるので参考になれば・・・。 Private Sub GetFileCollection(ByRef sDirName As String, ByRef sFileCol As Collection) Dim FSysObj As Scripting.FileSystemObject Dim aFolder As Scripting.Folder Dim ChildFolder As Scripting.Folder Dim aFile As Scripting.File Dim i As Long On Error GoTo EXCEPTION_SECTION Set FSysObj = New Scripting.FileSystemObject Set aFolder = FSysObj.GetFolder(sDirName) If (aFolder.Attributes And System) = System Then Exit Sub End If For Each aFile In aFolder.Files sFileCol.Add aFile.Path Next aFile If aFolder.SubFolders.Count > 0 Then For Each ChildFolder In aFolder.SubFolders Call GetFileCollection(ChildFolder.Path, sFileCol) Next ChildFolder End If Exit Sub EXCEPTION_SECTION: MsgBox "[" & Err.Number & "]" & Err.Description, vbExclamation + vbOKOnly, "エラー" Exit Sub End Sub
その他の回答 (1)
- ARC
- ベストアンサー率46% (643/1383)
http://www.okweb.ne.jp/kotaeru.php3?q=38626 の回答を参考にしてやって下さい。 「再帰」っていうのを使えば、結構簡単に取得できます。 先のアルゴリズムを簡略化して書くと、 1:引数で指定されたフォルダに含まれるファイルの一覧を取得する。 2引数で指定されたフォルダに含まれるフォルダの一覧を検索する。 3:見つかったフォルダを引数にして自分自身を呼び出す。 のようになっています。「なぜこれでうまく行くのか」はちょっと説明しづらいですが、とにかくこれでうまく動くはずです。(動かなかったら補足してください。)
関連するQ&A
- サブフォルダ内のファイル名取得について
Windows7 Access 2013環境です。 USB接続したハードディスク内のファイルリストを作成しようとしています。 ハードディスクはNTFSフォーマットです。 ボタン1をクリックしたとき、テーブル1をソースにしたフォーム1に ファイル名を書き出していくようにしました。 ドライブ内のサブフォルダを選択すると、プログラムは正常に作動するのですが ドライブ直下を指定すると、実行時エラー 70 "書き込みできません" が発生します。 NTFSのアクセス権は、管理者でログインしているので、システム関連のフォルダ System Volume Information $RECYCLE.BIN 以外は問題ありません。 どこに問題があるのでしょうか。もし、システム関連のフォルダが 引っかかっているとしたら、その回避方法についても 具体的にご教授願います。 ↓エラー箇所↓ -------------------------------------------------------------- For Each subfolder In folder.SubFolders -------------------------------------------------------------- ↓作成したプログラム↓ -------------------------------------------------------------- Private Sub ボタン_1_Click() Dim dlg As FileDialog Dim fold_path As String Dim strTargetDir As String DoCmd.GoToRecord acDataForm, "F0001_フォーム1", acNewRec Set dlg = Application.FileDialog(msoFileDialogFolderPicker) If dlg.Show = False Then Exit Sub fold_path = dlg.SelectedItems(1) strTargetDir = fold_path Call FolderSearch(strTargetDir) MsgBox "終了" Set dlg = Nothing Else End If End Sub Public Sub FolderSearch(strTargetDir As String) Dim fso As Object Dim folder As Object Dim subfolder As Object Dim file As Object Dim objFilsSys As Object Dim objDrive As Object Dim strDriveLetter As String Set fso = CreateObject("Scripting.FileSystemObject") Set folder = fso.GetFolder(strTargetDir) strDriveLetter = Left(strTargetDir, 1) Set objFileSys = CreateObject("Scripting.FileSystemObject") Set objDrive = objFileSys.GetDrive(strDriveLetter) For Each subfolder In folder.SubFolders ←エラー箇所 FolderSearch subfolder.Path Next subfolder For Each file In folder.Files With file Me.ボリューム名 = objDrive.VolumeName Me.ファイル名 = file.Name Me.ファイルパス = folder.Path Me.ファイルサイズ = folder.Size DoCmd.GoToRecord acDataForm, "F0001_フォーム1", acNewRec End With Next file Set objDrive = Nothing Set fso = Nothing Set folder = Nothing End Sub
- ベストアンサー
- その他(データベース)
- サブフォルダ内のフォルダ名取得
連続処理のため、特定フォルダ以下のフォルダ名全てを取得する必要があります。 そこで本に書いてあったコードを試してみたのですが、フォルダ以下のサブフォルダまでしか取得できませんでした。 サブフォルダ以下にもフォルダがあるのですが、どのようにして取得すればいいのでしょうか? ↓以下が試してみてコードになります With CreateObject("Scripting.FileSystemObject") With .getfolder(Start_Path) For Each Obj_Folder In .subfolders WorkSheets.Cells(i, 2).Value = Obj_Folder.name i = i + 1 Next Obj_Folder End With End With
- 締切済み
- Visual Basic
- フォルダ内のサブフォルダ名やファイル名の取得
VB初心者です。 あるフォルダ内のサブフォルダ名や数、ファイル名を取得したいのですが・・・ コントロールのDirListBoxを使用するか、Dir関数を使用したいのですが、上手くできません。 ご存知の方、教えてください
- ベストアンサー
- Visual Basic
- VBSで指定したフォルダー内のファイルを書き出さないようにする
あるフォルダ以下のファイル名を出力ファイル、f.name.txtに書き出すのですが "新しいフォルダ"というフォルダのなかにあるファイルは書き出さないようにしたいのですが、意に反してフォルダー内の全てのファイル名を書き出してしまいます。どこがおかしいのでしょう? ********************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name FolderCheck=Folder & "\" & "新しいフォルダ" If Folder <> FolderCheck Then abc.Write Folder & "\" & Fname & vbCrLf End If Next For Each Subfolder in Folder.SubFolders 'Foler内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close
- ベストアンサー
- その他(プログラミング・開発)
- 再度:VBSで指定したフォルダー内のファイルを書き出さないようにする
先ほども似たような質問をしました。 あるフォルダの中にあるファイル名の一覧をファイル"f.name.txt"を書き出したいのですが"新しいフォルダ"のなかにあるファイルは書き出さないようにしたいです。下記のVBSは"新しいフォルダ"のなかに更にフォルダが階層的に存在するときには"新しいフォルダ"の中のファイルも全て書き出してしまいます。 "新しいフォルダ"の中にフォルダがない場合は正しく動きます。 "新しいフォルダ"の中にフォルダが階層的にあっても"新しいフォルダ" の中にあるファイル名を書き出さないようにするにはどうしたらよいのでしょう? ************************************************************** Set FSO = CreateObject("Scripting.FileSystemObject") Set fl = WScript.CreateObject("Scripting.FileSystemObject") Set abc = fl.CreateTextFile("f.name.txt") ShowSubfolders FSO.GetFolder(".") Sub ShowSubFolders(Folder) If Folder.Name <> "新しいフォルダ" Then For Each File in Folder.Files 'Folder内のファイルを列挙する Fname = File.name abc.Write Folder & "\" & Fname & vbCrLf Next End If For Each Subfolder in Folder.SubFolders 'Folder内のフォルダを列挙する ShowSubFolders Subfolder '再帰呼び出し Next End Sub abc.Close
- ベストアンサー
- その他(プログラミング・開発)
- ExcelVBAでサブフォルダ名などを取得したい
ExcelVBAで、Dドライブ内の特定のフォルダ(D:\My Documents等)の中にある全てのフォルダ名やファイル名を取得したいのですが、方法が分かりません。 Dドライブのすぐ下にあるフォルダはDirで取得できるようなのですが、サブフォルダ名が取得できないのです。 具体的にどのように書いたらよいかお教えいただけるとうれしいです。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- VBScriptで、任意のフォルダコレクションを取得するには?
VBScriptについて質問します(マイナーですみません) 任意のフォルダコレクションを取得して、 そのフォルダ名を1つ1つ得たいんですが、 うまくいきません。 FileSystemObjectを作成して、 任意のフォルダ(MyFolder)を取得することはできました。 Set fso=CreateObject("Scripting.FileSystemObject") Set f=fso.GetFolder("C:/....../デスクトップ/MyFolder") いま、MyFolder の下に、複数のサブフォルダがあるとき、 サブフォルダのコレクションを取得して、 サブフォルダ名を1つ1つ得るには、 どうしたらいいのでしょうか? よろしくおねがいします。
- ベストアンサー
- その他(プログラミング・開発)
- FSOを使いサブフォルダのファイル操作
同じ階層のサブフォルダにxlsm入るが入っており、VBAによりモジュールを解放しようと試みています。 まずは、FSOを使ってサブフォルダにアクセスしようとしましたが、下から6行目でエラー(424 オブジェクトが必要です)が出てしまい、解決できませんので、ご教示いただけないでしょうか? よろしくお願いします Sub DeleteMain() With Application.FileDialog(msoFileDialogFolderPicker) If Not .Show Then Exit Sub Call DeleteSub(folderPath:=.SelectedItems(1)) End With End Sub Sub DeleteSub(folderPath As String, Optional mycount As Long = 0) Dim fso As Object, myFolders As Object, myfile As Object Set fso = CreateObject("Scripting.FileSystemObject") Set myFolders = fso.GetFolder(folderPath).SubFolders For Each myfile In fso.GetFolder(folderPath).Files mycount = mycount + 1 ' Cells(mycount, 1) = myfile.Path Debug.Print myfile.Path Next For Each myFolders In fso.GetFolder(folder.Path).SubFolders Call DeleteSub(myFolder.Path, mycount) Next Set fso = Nothing Set myFolders = Nothing End Sub
- ベストアンサー
- Excel(エクセル)
- VBA 一つのフォルダの中のフォルダ名とファイル名
一つのフォルダの中のフォルダ名とファイル名を取得したい場合は ************************************** Sub test() Dim MyFileName As String Dim MyFolderName As String Dim myFSO As Object Dim MyFolder As Scripting.Folder MyFolderName = "C:\" 'フォルダを取得 MyFileName = Dir(MyFolderName & "*.*") Do While MyFileName <> "" Debug.Print MyFileName MyFileName = Dir() Loop 'ファイルを取得 Set myFSO = CreateObject("Scripting.FileSystemObject") With myFSO With .GetFolder(MyFolderName) For Each MyFolder In .SubFolders Debug.Print MyFolder.Name Next End With End With Set myFSO = Nothing End Sub ************************************** の様に ファイル名・フォルダ名をそれぞれループして取得しないとダメでしょうか? もうちょっとスマートなコードはありますか?
- ベストアンサー
- その他(プログラミング・開発)
- サブフォルダ内のファイルを全部移動させたい。
VBScriptのバッチでの作成を考えています。 あるフォルダ(名をFolderとします)の中に、たくさんのサブフォルダが あって、そこにあるファイルをすべてFolderに移動させたいと 思っています。 (ファイルはjpg画像ファイルだけです。) たとえば、Folderの下に、Folder_Bというサブフォルダがあって、 更にその下にFolder_Cがあり、その中には1.jpgというファイルが あったとしたら、バッチ実行後、Folderの直下に1.jpgがあり、 (可能であれば)フォルダはすべて消えているという具合です。 ファイルの移動自体はファイルシステムオブジェクトのFile.Moveで行い、 最後にディレクトリを列挙して削除していけばいいんだろうなという ところはわかります。 しかし、フォルダをサブフォルダも含めてすべて舐めて、そこから ファイルを移動していくというロジックに悩んでいます。 アドバイスいただけないでしょうか。
- ベストアンサー
- Visual Basic