Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


73664 / 76738 ←次へ | 前へ→

【7548】Re:ファイル名とディレクトリ名を名前順に取得
回答  しのしの  - 03/9/8(月) 15:51 -

引用なし
パスワード
   もとさん、こんにちは。

個人的意見ですが、
ファイルを検索している最中に実際のマクロをするのではなく、
1.文字列配列に、該当ファイル名を格納する
2.1項の文字列配列を「指定順序」に並び替える
3.2項の文字列配列に対してマクロを実行する
というように変更したほうが良いと思います。

配列を取得する例を参考までに....
#すいません、例にFileSystemObjectをつかっているので、
#MicrosoftScriptiongRuntime参照設定してください。

うまくできるといいですね。

Private mobj As Scripting.FileSystemObject

Sub Main()
  Dim strpath As String
  Dim fld As Scripting.Folder
 
  Dim strFilename() As String  'ファイルパス格納配列
  Dim iIdx As Long
  
  Set mobj = New Scripting.FileSystemObject
  
  strpath = "C:\Home"
  Set fld = mobj.GetFolder(strpath)
  
  'ファイルパス格納配列初期化
  strFilename = VBA.Split("", ",")
  
  'ファイルパス格納配列にファイルパスを格納する
  Call getFileName(fld, strFilename)
  
  '該当するパスがなければ、処理を終了する
  If UBound(strFilename) = -1 Then Exit Sub
  
  '取得したファイル名をイミディエイトに出力
  '本来はここで、実行させるマクロを記述してください。
  For iIdx = LBound(strFilename) To UBound(strFilename)
    Debug.Print (strFilename(iIdx))
  Next

  Set mobj = Nothing

End Sub

Private Sub getFileName(ByRef rFolder As Scripting.Folder, _
  ByRef rStr() As String)
  Dim iFile  As Scripting.File
  Dim iFolder As Scripting.Folder
  
  '
  For Each iFile In rFolder.Files
  
    '検索条件にあうものだけを取得して下さい。
    'if Ifile.name = ”””-------- then
     ReDim Preserve rStr(UBound(rStr) + 1)
     rStr(UBound(rStr)) = iFile.Path & "\" & iFile.Name
    'End If
  Next

  '検索するのが2階層でいいなら、モジュールを書き直して下さい。
  'このままだと、一番最後の階層のファイルまで探しに行きます。
  For Each iFolder In rFolder.SubFolders
    Call getFileName(iFolder, rStr())
  Next

End Sub

0 hits

【7531】ファイル名とディレクトリ名を名前順に取得 もと 03/9/8(月) 11:16 質問
【7548】Re:ファイル名とディレクトリ名を名前順に取... しのしの 03/9/8(月) 15:51 回答
【7565】Re:ファイル名とディレクトリ名を名前順に取... もと 03/9/8(月) 17:06 発言
【7823】事後報告ですが・・・ もと 03/9/19(金) 10:10 お礼

73664 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free