1 Sub FindDir(ByVal dirname As String, ByRef xmlFile As Variant) 2 'use two dictionary 3 Dim MyName, Dic, Did, i, F, MyFileName 4 Dim fso, objFolder 5 6 'On Error Resume Next 7 Set fso = CreateObject("Scripting.FileSystemObject") 8 Set objFolder = fso.GetFolder(dirname) 9 If Not objFolder Is Nothing Then lj = objFolder.Path & "\" 10 11 Set Dic = CreateObject("Scripting.Dictionary") 'create a dictionary object 12 Set Did = CreateObject("Scripting.Dictionary") 13 Dic.Add (lj), "" 14 i = 0 15 Do While i < Dic.Count 16 Ke = Dic.keys 'start to Traversal Dic 17 MyName = dir(Ke(i), vbDirectory) 'find directory 18 Do While MyName <> "" 19 If MyName <> "." And MyName <> ".." Then 20 If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then 'if it's directory attr 21 Dic.Add (Ke(i) & MyName & "\"), "" 'add a new key to dic 22 End If 23 End If 24 MyName = dir 'Traversal go on 25 Loop 26 i = i + 1 27 Loop 28 'Did.Add ("File List"), "" 'find all xml files of them 29 For Each Ke In Dic.keys 30 MyFileName = dir(Ke & "*.xml") 31 Do While MyFileName <> "" 32 Did.Add (Ke & MyFileName), "" 33 MyFileName = dir 34 Loop 35 Next 36 37 xmlFile = Application.Transpose(Did.keys) 38 39 'Sheets("xml List").[A1].Resize(Did.Count, 1) = WorksheetFunction.Transpose(Did.keys) 40 41 End Sub
在文件夹的遍历中,学到一些VBA的知识点,罗列在以下。
1.函数形参(byval)和实参(byref)的区别
http://blog.sina.com.cn/s/blog_8654c87a0100xrb2.html
就个人使用习惯而言,byval相当于入力参数,byref既可以做入力参数也可做出力参数。
2.字典用法
http://blog.chinaunix.net/uid-24765042-id-3207729.html
3.与操作
1)文字列的拼接
If Not objFolder Is Nothing Then lj = objFolder.Path & "\"
2)条件式
下面一段代码的意思是,Dic这个字典的Keys是文件夹,在循环keys时寻找当前文件夹下是否有xml文件。
For Each Ke In Dic.keys MyFileName = dir(Ke & "*.xml") Do While MyFileName <> "" Did.Add (Ke & MyFileName), "" MyFileName = dir Loop Next

浙公网安备 33010602011771号