15

VBAで、特定のディレクトリにある特定の拡張子を持つすべてのファイルのリストを取得するにはどうすればよいですか?

私はApplication.FileSearchExcel2007を使用しているため、実行できません

4

4 に答える 4

16

あなたのコメントに応えて、「それで、私はそれを何回実行することを知っていますか?」、この例は、名前がstrPatternと一致するすべてのファイルが一覧表示されるまで実行されます。strFolder定数を変更します。

Public Sub ListESY()
Const strFolder As String = "C:\SomeFolder\"
Const strPattern As String = "*.ESY"
Dim strFile As String
strFile = Dir(strFolder & strPattern, vbNormal)
Do While Len(strFile) > 0
    Debug.Print strFile '<- view this in Immediate window; Ctrl+g will take you there
    strFile = Dir
Loop
End Sub
于 2010-06-10T19:04:19.757 に答える
3

Dir( "C:\ yourPath \ *。ESY"、vbNormal)esy拡張子を持つ最初のファイルを返します。以降のDir()の呼び出しごとに、次の呼び出しが返されます。

于 2010-06-10T18:54:56.283 に答える
2

別のオプション:FileSystemObjectファミリーのオブジェクトには、「Microsoft ScriptingRuntime」ライブラリ([ツール...参照]で確認してください)を使用します。次のようなもの、おそらく:

Public Function ESYFileCount(dir_path as String) as Long

Dim fil As File

    With New FileSystemObject
        With .GetFolder(dir_path)
            For Each fil In .Files
                If LCase(Right(fil.Name, 4)) = ".esy" Then
                    ESYFileCount = ESYFileCount + 1
                End If
            Next
        End With        
    End With

End Function
于 2010-06-10T20:06:03.067 に答える
2

次のコードは、FileSystemObjectを使用するよりも約19倍高速に実行されます。私のマシンでは、3つの異なるディレクトリで4000個のファイルを見つけるのに、FileSystemObjectを使用すると1.57秒かかりましたが、このコードを使用すると0.08秒しかかかりませんでした。

   Public Function CountFilesWithGivenExtension( _
          i_strFolderWithTerminalBackslant As String, _
          i_strExtensionIncludingPeriod As String _
          ) As Long

       If Len(Dir$(i_strFolderWithTerminalBackslant & "*" _
             & i_strExtensionIncludingPeriod)) > 0 Then

          CountFilesWithGivenExtension = 1

          While Len(Dir$) > 0

             CountFilesWithGivenExtension = _
                   CountFilesWithGivenExtension + 1

             DoEvents

          Wend
       Else
          CountFilesWithGivenExtension = 0
       End If

   End Function

使用例:

   Debug.Print CountFilesWithGivenExtension("C:\", ".ex*")

(「DoEvents」は必須ではありませんが、必要に応じて一時停止/ブレークを使用できます。)

于 2014-03-10T20:42:40.577 に答える