在VBA中search文件
我写了一个vba代码,浏览所有的path文件夹,并search“strings.xml”文件。
Dim oFS As Office.FileSearch Dim i As Integer Set oFS = Application.FileSearch With oFS .NewSearch .FileType = msoFileTypeAllFiles .Filename = "strings.xml" .LookIn = "D:\Workspace" .SearchSubFolders = True .Execute MsgBox "Finish ! " & .FoundFiles.Count & " item found !" End With
然而,在我的工作区中,我有许多“strings.xml”文件,这个当前的代码所在,但我只想在特定的子文件夹中find“strings.xml” 例如./values/strings.xml
文件。
以下内容将recursion查看您的根工作文件夹下的Values\Strings.xml
匹配项, Values\Strings.xml
它们列在Scripting.Dictionary对象中。
主文件/文件夹search由简单的Dir函数执行 。
Sub dir_ValuesStringsXML_list() Dim f As Long, ff As String, fp As String, fn As String, tmp As String Dim vfn As Variant, dFILEs As Object 'New scripting_dictionary Set dFILEs = CreateObject("Scripting.Dictionary") dFILEs.CompareMode = vbTextCompare 'set vars for c:\temp\Workspace\*\Values\Strings.xml fp = Environ("TMP") & Chr(92) & "Workspace" ff = "Values" fn = "Strings.xml" dFILEs.Item(fp) = 0 'get folder list Do f = dFILEs.Count For Each vfn In dFILEs If Not CBool(dFILEs.Item(vfn)) Then tmp = Dir(vfn & Chr(92) & Chr(42), vbDirectory) Do While CBool(Len(tmp)) If Not CBool(InStr(1, tmp, Chr(46))) Then dFILEs.Item(vfn & Chr(92) & tmp) = 0 End If tmp = Dir Loop 'Debug.Print dFILEs.Count dFILEs.Item(vfn) = 1 End If Next vfn Loop Until f = dFILEs.Count 'remove the folders and check for Values\Strings.xml For Each vfn In dFILEs If CBool(dFILEs.Item(vfn)) Then If LCase(Split(vfn, Chr(92))(UBound(Split(vfn, Chr(92))))) = LCase(ff) And _ CBool(Len(Dir(vfn & Chr(92) & fn, vbReadOnly + vbHidden + vbSystem))) Then dFILEs.Item(vfn & Chr(92) & fn) = 0 End If dFILEs.Remove vfn End If Next vfn 'list the files For Each vfn In dFILEs Debug.Print "from dict: " & vfn Next vfn dFILEs.RemoveAll: Set dFILEs = Nothing End Sub
如果您希望将Scripting.Dictionary的后期绑定转换为早期绑定,则必须将Microsoft脚本运行时添加到VBE的工具►引用。
我想你是说你想要在子文件夹“\ values”中查找名为strings.xms的文件
如果这是正确的,请尝试下面的修改后的代码:
Dim oFS As Office.FileSearch Dim i As Integer Set oFS = Application.FileSearch With oFS .NewSearch .FileType = msoFileTypeAllFiles .Filename = "strings.xml" .LookIn = "D:\Workspace\values" .SearchSubFolders = True .Execute MsgBox "Finish ! " & .FoundFiles.Count & " item found !" End With
当然,你可能不想指定子文件夹。
这是另一个select:
Dim sPath As String Dim sFil As String Dim strName As String sPath = "D:\Workspace\values" 'Change Path sFil = Dir(sPath & "string.xml") 'All files in Directory matching name Do While sFil <> "" strName = sPath & sFil sFil = Dir 'Your Code Here. i=i+1 Loop MsgBox "Finish ! " & .FoundFiles.Count & " item found !"
您是否考虑过使用FileSystemObject在子文件夹中进行recursionsearch?
MSDN – 如何使用FileSystemObject进行recursionsearch
HTH
菲利普
更换:
sPath = "D:\Workspace\values" 'Change Path sFil = Dir(sPath & "string.xml") 'All files in Directory matching name
有:
sPath = "D:\Workspace\values\" 'Change Path sFil = Dir(sPath & "*.xl*") 'All files in Directory matching name