Below you will see recursively in your working folder for the roots Values\Strings.xml and list them in the Scripting.Dictionary object.
Basic file / folder searches are performed using the simple Dir function.
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
If you want to convert the late binding of Scripting.Dictionary to early binding, you must add the Microsoft Scripting Runtime to VBE Tools ► Links.
source share