[VBA] FileSystem 應用 (2) - 檔案比對



贊助商連結


leonchou
2001-09-07, 11:33 PM
這個也是網友問我的:
 
存檔時如何得知其他幾個資料夾裡已有相同名稱的檔案存在
(已存在檔案有可能是隱藏的屬性) ??
 
可在巨集中使用 FileSystem 物件來搜尋比對, 會包含隱藏檔.
假設這五個資料夾位於 C:\My Documents。
 
Sub 檢查檔案()
1  檔名 = InputBox("請輸入檔名 (包含副檔名):")
2  If 檔名 = "" Then Cancel = True: Exit Sub
3  Set fs = CreateObject("Scripting.FileSystemObject")
4  Set sf = fs.GetFolder("C:\My Documents").SubFolders
5  For Each f In sf
6   For Each f1 In f.Files
7    If f1.Name = 檔名 Then
8    MsgBox 檔名 & " 已存在於 " & f.Name & " 資料夾!"
9    a = 1: Exit For
10   End If
11  Next
12 Next
13 If a = 1 Then Cancel = True
End Sub
 
〔說明〕
 
1 設定變數 "檔名" = 文字方塊的傳回值
2 若文字方塊傳回空字串則結束程式
3 設物件變數 fs = FileSystemObject (磁蹀檔案系統)
4 設物件變數 sf = C:\My Documents 底下的所有子資料夾
5 對子資料夾集合 sf 中的每個資料夾做迴圈
6 對每個資料夾中的每個檔案做迴圈
7 若檔案名稱 = 文字方塊所輸入的檔名, 則 :
8 顯示訊息方塊告知檔案已存在於某個資料夾
9 設定變數 a = 1 並跳出迴圈
13 若 a = 1 則設變數 Cancel 為 True , 可做其他判斷之用
 
PS. 利用 FileSystem 並不受檔案隱藏屬性影響. 但若仍想
  得知該檔案是否為隱藏檔, 可使用下列程式碼 :
 
If f1.Attributes And 2 Then MsgBox "該檔案為隱藏檔!"
 
"2" 代表 [隱藏] 屬性的常數值, 原保留字為 "Hidden" .