[VBA] File System 及副程序應用



贊助商連結


leonchou
2001-09-02, 09:56 PM
這是純粹討論 Excel VBA 有關 file system (磁碟檔案系統) 及
副程序應用的部份,當然對於巨集內容,如果你有更好的寫法或意見,
也歡迎提出來和大家分享、討論喔~
 
問題:如何列出本機使用中的 Excel 活頁薄?包括本機開啟的
   以及其他PC透過區域網路及資源分享而開啟的活頁簿。
 
方法:以下的巨集會把本機和指定目錄下使用中的xls檔列出。
 
Sub CheckFile()
1 Application.ScreenUpdating = False
2 Range("A1") = "本機已開啟檔案"
3 For Each book In Workbooks
4 GoSub 16: Cells(r, 1) = book.FullName
5 Next
6 mypath = "C:\": GoSub 16
7 myfile = Dir(mypath & "*.xls")
8 Cells(r, 1) = "他人使用中檔案"
9 Do While myfile <> "" ' 執行迴圈
10 GoSub 16
11 Workbooks.Open mypath & myfile
12 If ActiveWorkbook.ReadOnly Then Cells(r, 1) = mypath & myfile
13 Workbooks(myfile).Close
14 myfile = Dir ' 尋找下一個檔案
15 Loop: Exit Sub
16 r = Application.WorksheetFunction.CountA(Columns(1)) + 1: Return
End Sub
 
[說明]
1 將 Excel 的"螢幕更新"關閉,以免因程式執行過程顯示於畫面上。
2 A1 儲存格填入"本機已開啟檔案"字串做為標題。
3 對本機已開啟之活頁簿做迴圈,執行 For...Next 之間的動作。
4 執行 16 行的副程序,得出第一欄最下一個空格的列號 r;
  於第 r 列第 1 欄儲存格填入該活頁簿之完整名稱 (包含路徑)。
6 設定變數 mypath 為指定的目錄;再執行第 16 行副程序。
7 設定變數 myfile 為該目錄下的所有 Excel 活頁簿檔案。
8 於第 r 列第 1 欄儲存格填入"他人使用中檔案"字串做為標題。
9 對 myfile 對應的所有檔案做迴圈,執行 Do...Loop 之間的動作。
10 執行第 16 行副程序,得出第一欄最下一個空格的列號 r。
11 開啟 myfile 第一個活頁簿檔案。
12 若此檔案是唯讀,表示為使用中,將完整檔名填入
  第 r 列第 1 欄儲存格。
13 關閉此檔案。
14 尋找 myfile 下一個檔案。
15 結束 Do...Loop 迴圈。跳離巨集以免繼續執行 16 行副程式。
16 設定變數 r 為第一欄最下一個空格的列號 (row);回到呼叫的程式碼。

為說明之便而在程式碼前加上行號,一般是不需要的。
指定資料夾分享模式應設定為「完整」,否則偵測不到。