VBA遍歷文件夾的三種方法(轉(zhuǎn)載)

【引用地址】https://blog.csdn.net/bigheadsheep/article/details/46653031

<span style="font-size:14px;">VBA遍歷文件夾常用有三種方法,這三種方法中,filesearch不適合2007和2010版本磷账,而且速度比較慢鲜棠,遞歸法速度也慢载慈。只有用DIR加循環(huán)的方法,速度飛快。下面是三種方法的代碼:

 1署惯、filesearch法

Sub test3()
Dim wb As Workbook
Dim i As Long
Dim t
t = Timer
With Application.FileSearch '調(diào)用fileserch對象
.NewSearch '開始新的搜索
.LookIn = ThisWorkbook.path '設(shè)置搜索的路徑
.SearchSubFolders = True '搜索范圍包括 LookIn 屬性指定的文件夾中的所有子文件夾
.Filename = "*.xls" '設(shè)置搜索的文件類型
' .FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then '如果找到文件
For i = 1 To .FoundFiles.Count
'On Error Resume Next
Cells(i, 1) = .FoundFiles(i) '把找到的文件放在單元格里
Next i
Else
MsgBox "沒找到文件"
End If
End With
MsgBox Timer - t
End Sub

 2又官、遞歸法

   Sub Test()

Dim iPath As String, i As Long
Dim t
t = Timer
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "請選擇要查找的文件夾"
If .Show Then
iPath = .SelectedItems(1)
End If
End With

If iPath = "False" Or Len(iPath) = 0 Then Exit Sub

i = 1
Call GetFolderFile(iPath, i)

MsgBox Timer - t
MsgBox "文件名鏈接獲取完畢延刘。", vbOKOnly, "提示"

End Sub

Private Sub GetFolderFile(ByVal nPath As String, ByRef iCount As Long)
Dim iFileSys
'Dim iFile As Files, gFile As File
'Dim iFolder As Folder, sFolder As Folders, nFolder As Folder
Set iFileSys = CreateObject("Scripting.FileSystemObject")
Set iFolder = iFileSys.GetFolder(nPath)
Set sFolder = iFolder.SubFolders
Set iFile = iFolder.Files

With ActiveSheet
    For Each gFile In iFile
       ' .Hyperlinks.Add anchor:=.Cells(iCount, 1), Address:=gFile.path, TextToDisplay:=gFile.Name
        iCount = iCount + 1
    Next
End With

'遞歸遍歷所有子文件夾
For Each nFolder In sFolder
    Call GetFolderFile(nFolder.path, iCount)
Next

End Sub

 3、dir循環(huán)法

Sub Test() '使用雙字典六敬,旨在提高速度
Dim MyName, Dic, Did, i, t, F, TT, MyFileName
'On Error Resume Next
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "選擇文件夾", 0, 0)
If Not objFolder Is Nothing Then lj = objFolder.self.path & ""
Set objFolder = Nothing
Set objShell = Nothing

t = Time
Set Dic = CreateObject("Scripting.Dictionary")    '創(chuàng)建一個字典對象
Set Did = CreateObject("Scripting.Dictionary")
Dic.Add (lj), ""
i = 0
Do While i < Dic.Count
    Ke = Dic.keys   '開始遍歷字典
    MyName = Dir(Ke(i), vbDirectory)    '查找目錄
    Do While MyName <> ""
        If MyName <> "." And MyName <> ".." Then
            If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then    '如果是次級目錄
                Dic.Add (Ke(i) & MyName & "\"), ""  '就往字典中添加這個次級目錄名作為一個條目
            End If
        End If
        MyName = Dir    '繼續(xù)遍歷尋找
    Loop
    i = i + 1
Loop
Did.Add ("文件清單"), ""    '以查找D盤下所有EXCEL文件為例
For Each Ke In Dic.keys
    MyFileName = Dir(Ke & "*.xls")
    Do While MyFileName <> ""
        Did.Add (Ke & MyFileName), ""
        MyFileName = Dir
    Loop
Next
For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name = "XLS文件清單" Then
        Sheets("XLS文件清單").Cells.Delete
        F = True
        Exit For
    Else
        F = False
    End If
Next
If Not F Then
    Sheets.Add.Name = "XLS文件清單"
End If
Sheets("XLS文件清單").[A1].Resize(Did.Count, 1) = WorksheetFunction.Transpose(Did.keys)
TT = Time - t
MsgBox Minute(TT) & "分" & Second(TT) & "秒"

End Sub

</span>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碘赖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子外构,更是在濱河造成了極大的恐慌普泡,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审编,死亡現(xiàn)場離奇詭異撼班,居然都是意外死亡,警方通過查閱死者的電腦和手機垒酬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門砰嘁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勘究,你說我怎么就攤上這事矮湘。” “怎么了口糕?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵板祝,是天一觀的道長。 經(jīng)常有香客問我走净,道長券时,這世上最難降的妖魔是什么孤里? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮橘洞,結(jié)果婚禮上捌袜,老公的妹妹穿的比我還像新娘。我一直安慰自己炸枣,他們只是感情好虏等,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著适肠,像睡著了一般霍衫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侯养,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天敦跌,我揣著相機與錄音,去河邊找鬼逛揩。 笑死柠傍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辩稽。 我是一名探鬼主播惧笛,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼逞泄!你這毒婦竟也來了患整?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喷众,失蹤者是張志新(化名)和其女友劉穎并级,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侮腹,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嘲碧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了父阻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愈涩。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖加矛,靈堂內(nèi)的尸體忽然破棺而出履婉,到底是詐尸還是另有隱情,我是刑警寧澤斟览,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布毁腿,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏已烤。R本人自食惡果不足惜鸠窗,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胯究。 院中可真熱鬧稍计,春花似錦、人聲如沸裕循。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥哑。三九已至硅则,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間株婴,已是汗流浹背怎虫。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留督暂,地道東北人。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓穷吮,卻偏偏與公主長得像逻翁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捡鱼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容