茶渍猫泡饭  
 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

 

posted on 2017-04-06 16:57  茶渍猫泡饭  阅读(939)  评论(0)    收藏  举报