現在FileSystemObjectのSubFoldersで取得したフォルダ
をFor Each文を使って、リストに追加しています。
Set colFilesystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = colFilesystem.GetFolder("C:\")
Set colFiles = objFolder.SubFolders
For Each objFile In colFiles
List1.AddItem objFile.Name
Next
フォルダの並び順を変えたりしたいので、For Each文でなく
通常のFor文にしたいのですが、うまくいきません。
以下、エラーになるロジック
Set colFilesystem = CreateObject("Scripting.FileSystemObject")
Set objFolder = colFilesystem.GetFolder("C:\")
Set colFiles = objFolder.SubFolders
For I To colFiles.Count
List1.AddItem colFiles.Item(I).Name
Next
何が駄目なのか、お分かりになる方がいましたら、お教えください。
コレクション内にサブファイル名が入っているので
多分For Eachでないと無理です。
> フォルダの並び順を変えたりしたいので
多分昇順や降順にしたいとかですよね?
もし そうなら、リストボックスのSortプロパディを
Trueにすれば昇順に並びますよ。
昇順はSortedプロパティで対応してたのですが、
降順の仕方がわかりません。
ListViewコントロールを使っては?
> 降順の仕方がわかりません。
リストボックスを最後から見るとか?
理解力不足ですみません。
リストボックスを最後から見るとはどういう事でしょうか?
今考えている方法はFor Eachで配列にセットして、
その後にFor文で逆からAddItemしようとしています。
2回For文回す事になるので、ダサイです。
出来れば、リストボックスで行きたいと思いますが、
最悪はリストビュー使うかもしれません。
> 2回For文回す事になるので、ダサイです。
> 出来れば、リストボックスで行きたいと思いますが、
なぜダサいんですか?
もし小王さんが今考えている方法でも
2回For文回す事になりますけど。
一応自分の考えを詳しく書きます。
1 まずリストボックスのSortedをTrueに
2 小王さんが例に出されている1個目(For Each)でリストボックスに追加
3 サブファイルを全部追加した後で、For文でListCountから0まで
ぶん回せば、降順ですよね。
一応コード書いておきますね。
Dim colFilesystem As Object
Dim objFolder As Object
Dim colFiles As Object
Dim objFile As Object
Dim intIndex As Integer
List1.Clear
Set colFilesystem = CreateObject("Scripting.FileSystemObject")
' フォルダを取得
Set objFolder = colFilesystem.GetFolder("C:\")
Set colFiles = objFolder.Files
' ディレクトリのファイル名をリストアップ
For Each objFile In colFiles
List1.AddItem objFile.Name
Next
For intIndex = List1.ListCount To 0 Step -1
' ここにやりたい処理を書いてください
Debug.Print List1.List(intIndex)
Next intIndex
' オブジェクトを解放
Set colFilesystem = Nothing
Set objFolder = Nothing
Set colFiles = Nothing
Set objFile = Nothing
okuさん、わざわざコードまで書いていただいてありがとうございます。
大変、参考にさせてもらいました。
ダサイと言ったのは私が考えているロジックの事です。
ツイート | ![]() |