2016-08-22 16 views
0

を使用して特定のファイルタイプをディレクトリにリストアップ.txtのすべてのファイルを特定のディレクトリにリストし、メッセージプロンプトに表示しようとしていますが、excel 2010 vbaです。私は下が良いスタートだが、確かではないことを願っています。ありがとうございました :)。私は考えることができるexcel 2010 vba

VBA

' LIST ALL TEXT FILES IN REPORT DIRECTORY ' 
Const strFolder As String = "C:\aCGH\" 
Const strPattern As String = "*.txt" 
Dim strFile As String 
strFile = Dir(strFolder & strPattern, vbNormal) 
Do While Len(strFile) > 0 
Debug.Print strFile 
strFile = Dir 
Loop 
MsgBox "The files are " + strFile 

答えて

1

二つの方法:

最初んではないループと大きなフォルダに対して迅速にすることができます

Public Sub Test() 

    Dim vFiles As Variant 
    Dim x As Long 
    Dim sMsg As String 
    vFiles = EnumerateFiles("C:\aCGH\", "txt", False) 

    For x = LBound(vFiles) To UBound(vFiles) 
     sMsg = sMsg & vFiles(x) & Chr(13) 
    Next x 

    MsgBox sMsg 

End Sub 

Public Function EnumerateFiles(sDirectory As String, _ 
      Optional sFileSpec As String = "*", _ 
      Optional InclSubFolders As Boolean = True) As Variant 

    EnumerateFiles = Filter(Split(CreateObject("WScript.Shell").Exec _ 
     ("CMD /C DIR """ & sDirectory & "*." & sFileSpec & """ " & _ 
     IIf(InclSubFolders, "/S ", "") & "/B /A:-D").StdOut.ReadAll, vbCrLf), ".") 

End Function 

第二の方法基本的にあなたと同じです:

Sub Test1() 

    Dim cFiles As Collection 
    Dim vFile As Variant 
    Dim sMsg As String 
    Set cFiles = New Collection 

    EnumerateFiles1 "C:\aCGH\", "*.txt", cFiles 

    For Each vFile In cFiles 
     sMsg = sMsg & vFile & Chr(13) 
    Next vFile 

    MsgBox sMsg 

End Sub 

Sub EnumerateFiles1(ByVal sDirectory As String, _ 
    ByVal sFileSpec As String, _ 
    ByRef cCollection As Collection) 

    Dim sTemp As String 

    sTemp = Dir$(sDirectory & sFileSpec) 
    Do While Len(sTemp) > 0 
     cCollection.Add sTemp 
     sTemp = Dir$ 
    Loop 
End Sub 

あなたのコードを使用して、それは次のようになります。

Sub Test3() 

    Dim sMsg As String 

    ' LIST ALL TEXT FILES IN REPORT DIRECTORY ' 
    Const strFolder As String = "C:\aCGH\" 
    Const strPattern As String = "*.txt" 
    Dim strFile As String 
    strFile = Dir(strFolder & strPattern, vbNormal) 
    Do While Len(strFile) > 0 
     sMsg = sMsg & strFile & Chr(13) 
     strFile = Dir 
    Loop 
    MsgBox sMsg 

End Sub 

いずれかの方法 - ファイルパスの末尾に\を置くことを忘れないでください。

+0

ありがとうございました。 – Chris