![]() |
[VBA] File System 及副程序應用 這是純粹討論 Excel VBA 有關 file system (磁碟檔案系統) 及 副程序應用的部份,當然對於巨集內容,如果你有更好的寫法或意見, 也歡迎提出來和大家分享、討論喔~ [color=red]問題[/color]:如何列出本機使用中的 Excel 活頁薄?包括本機開啟的 以及其他PC透過區域網路及資源分享而開啟的活頁簿。 [color=red]方法[/color]:以下的巨集會把本機和指定目錄下使用中的xls檔列出。 [b]Sub CheckFile()[/b] 1 Application.ScreenUpdating = False 2 Range("A1") = "本機已開啟檔案" 3 [color=blue]For Each[/color] book In Workbooks 4 GoSub 16: Cells(r, 1) = book.FullName 5 [color=blue]Next[/color] 6 mypath = "C:\": GoSub 16 7 myfile = Dir(mypath & "*.xls") 8 Cells(r, 1) = "他人使用中檔案" 9 [color=blue]Do While[/color] myfile <> "" [color=green]' 執行迴圈[/color] 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 [color=green]' 尋找下一個檔案[/color] 15 [color=blue]Loop[/color]: Exit Sub 16 r = Application.WorksheetFunction.CountA(Columns(1)) + 1: Return [b]End Sub[/b] [[color=green]說明[/color]] 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);回到呼叫的程式碼。[list][*]為說明之便而在程式碼前加上行號,一般是不需要的。[*]指定資料夾分享模式應設定為「完整」,否則偵測不到。[/list] |
| 所有時間均為 +8。現在的時間是 10:01 AM。 |
| XML | RSS 2.0 | RSS |
本論壇所有文章僅代表留言者個人意見,並不代表本站之立場,討論區以「即時留言」方式運作,故無法完全監察所有即時留言,若您發現文章可能有異議,請 email :[email protected] 處理。