學習資源:《Excel VBA從入門到進階》第48集 by蘭色幻想
忘了之前老師有沒有講過Dir函數了,還是寫一下吧,再開始正文吧:
Dir函數:傳回一個
String,它表示與指定路徑下的檔案、目錄或檔案夾的名稱。
文法:Dir ( pathname, 屬性 )
①pathname:指定位址,第一次調用必填。
若要擷取與 pathname 比對的任何其他檔案名,請重新調用
Dir且不填寫參數。
簡單舉例:
filename = Dir("C:" & "*.doc") ‘在C槽查找word檔案,并傳回word文檔的名稱給filename
filename2 = Dir '再次調用Dir,在C槽查找第二份word檔案,并傳回它的文檔名給filename2
Dir查找周遊的順序是按照系統排序。如果對排序有要求,可用數組存儲檔案名,然後對數組進行排序。
一般會搭配循環周遊檔案,結束循環的條件為Dir傳回空值。
當不再有比對的檔案名時,
Dir将傳回零長度字元串 ("")。在傳回零長度字元串後,後續再調用需重新填寫參數pathname,否則将發生錯誤。
②屬性:選填,有如下屬性c:
本節課中Dir函數第二個參數主要使用vbNormal(預設,即不寫),和 vbDirectory(可以傳回路徑下的指定檔案和檔案夾)。
一、檔案夾基本操作 1. 判斷檔案夾是否存在使用dir函數去判斷檔案夾路徑,如果結果為"",則表示不存在。
例1:判斷目前檔案路徑下是否存在"2011年報表2"檔案夾。
Sub w1()
If Dir(ThisWorkbook.path & "2011年報表2", vbDirectory) = "" Then
MsgBox "不存在"
Else
MsgBox "存在"
End If
End Sub
2. 建立檔案夾 Mkdir語句,建立一個檔案夾。
文法:MkDir 路徑
例2:在目前檔案路徑下建立"Test"檔案夾。
Sub w2()
MkDir ThisWorkbook.path & "Test"
End Sub
3. 删除檔案夾 RmDir語句可以删除一個空的檔案夾。
文法:RmDir 路徑
例3:删除目前檔案路徑下的"Test"檔案夾。
Sub w3()
RmDir ThisWorkbook.path & "Test"
End Sub
但注意:RmDir隻能删除空檔案夾,如果使用 RmDir 來删除一個含有檔案的目錄或檔案夾,會發生錯誤(如下圖提示)。是以在試圖删除目錄或檔案夾之前,先使用 Kill 語句來删除所有檔案。
增加一句kill語句,清空Test檔案夾下的所有檔案:
Sub w3()
Kill ThisWorkbook.Path & "Test*"
RmDir ThisWorkbook.Path & "Test"
End Sub
4. 檔案夾重命名 使用Name語句重命名。
文法:Name 路徑/舊檔案名 as 路徑/新檔案名
例4:把"Test"檔案夾重命名為“Test2”。
Sub w4()
Name ThisWorkbook.path & "Test" As ThisWorkbook.path & "Test2"
End Sub
5. 檔案夾移動 同樣使用name方法,可以達到移動的效果,而且連檔案夾的檔案一起移動。
例5:把"Test2"檔案夾移動到“2011年報表”檔案夾下。
Sub w5()
Name ThisWorkbook.Path & "Test2" As ThisWorkbook.Path & "2011年報表Test2"
End Sub
6. 檔案夾複制 用FileSystemObject對象的CreateObject方法(CopyFolder方法)複制檔案夾。
文法:object.CopyFolder source, destination[, overwrite]
object:必須, FileSystemObject對象的名字。
source:必須,指明一個或多個被複制檔案夾的字元串檔案夾說明,可包括通配符,如*。destination:必須,被複制檔案夾和子檔案夾的接受端的字元串,不允許有通配符。
overwrite:可選,表示已存在的檔案夾是否被覆寫。如果為True,檔案被覆寫,如果為False,檔案不被覆寫。預設值為True。
例6:把"Test2"檔案夾複制到“2011年報表”檔案夾下,設定可複制相同名稱檔案夾。
Sub CopyFile_fso()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder ThisWorkbook.Path & "Test2", ThisWorkbook.Path & "2011年報表",1
End Sub
7. 打開檔案夾 使用shell函數桌面管理程式打開檔案夾。
文法:shell “explorer 路徑”
例7:打開“2011年報表”檔案夾。
Sub w7()
Shell "explorer.exe " & ThisWorkbook.Path & "2011年報表", 1
End Sub
注:"explorer.exe "後面有個空格,不能漏寫!
二、周遊檔案夾中的檔案- 周遊指定檔案夾中的檔案 dir+循環
例:擷取“2011年報表”檔案夾下所有EXCEL檔案的名稱。
用dir擷取檔案夾中的檔案,再用Do Loop語句循環記錄。
Sub 周遊檔案()
Dim Filename As String, mypath As String, k As Integer
mypath = ThisWorkbook.Path & "2011年報表"
Range("A1:A10") = "" '先清空要填寫的單元格區域(加快程式運作)
Filename = Dir(mypath & "*.xls") '
Do
k = k + 1
Cells(k, 1) = Filename
Filename = Dir
Loop Until Filename = ""
End Sub
運作結果展示
2. 周遊子檔案 dir(,vbDirectory
)+循環+檔案名判斷dir第二個參數是vbdirectory可以傳回路徑下的指定檔案和檔案夾。
例:擷取“2011年報表”檔案夾下所有檔案夾的名稱。
檔案夾路徑不像檔案名的格式是“*
.*”,是以增加檔案名判斷。
Sub 周遊子檔案()
Dim Filename As String, mypath As String, k As Integer
mypath = ThisWorkbook.Path & "2011年報表"
Range("A1:A10") = ""
Filename = Dir(mypath, vbDirectory)
Do
If Not Filename Like "*.*" Then '如檔案名不像"*.*",則判斷為檔案名可進行記錄。
k = k + 1
Cells(k, 1) = Filename
End If
Filename = Dir
Loop Until Filename = ""
End Sub
運作結果顯示
把判斷語句注釋掉,看看運作結果是如何的:
沒做檔案名判斷
它會把檔案夾下所有檔案的名稱都粘貼上去,是以記得要做判斷。
檔案夾周遊是很常用,還會再講一節,整理好筆記,明天再發啦。
以上,晚安。