繼上次做完了讀取BIN檔的功能,開心的用了一陣子之後又開始貪心了,每次要讀不同檔案都要複製一次路徑實在很麻煩,於是想要新增列出檔案清單的功能,結果如下圖:
Code 的部分如下:
Sub Load_Folder_Click()
Dim MyPath As String
Dim MyFile As String
Dim FileCount As Integer
MyPath = Replace(Range("C3").Value, """", "") & "\"
MyFile = Dir(MyPath)
FileCount = 1
Worksheets("MGB parser").Range("U:U").ClearContents
Do While MyFile <> ""
Cells(FileCount, 21) = MyFile
FileCount = FileCount + 1
MyFile = Dir
Loop
Range("T1").Value = FileCount
End Sub
這段程式的功能是
執行結果如下:
至此完成了一半,後面的麻煩是清單方塊需要選擇輸入範圍,範圍太短無法列出所有檔案,太長又會造成清單方塊下方出現很多空白、且scroll bar會很難用(尤其是居然不支援滑鼠滾輪),如下圖這樣:
這邊需要利用Excel 的「定義名稱」功能配合「INDIRECT」 函數,可以做出動態的選擇範圍。
首先打開名稱管理員,如下圖定義一個新的名稱
=INDIRECT("GF9:GF"&Sheet1!$GE$9)裡會參考T1的數字(剛剛用VBA算出來的FileCount)組字串,結果就是我們需要的範圍,我們定義它名稱叫做"檔案清單"。
設定好之後就可以回到清單方塊的輸入範圍,輸入剛剛定義的名稱,便可好好顯示我們需要的檔案,然後將選擇的結果放在T2
清單方塊選擇的結果只會顯示項目的編號,需要再處理一下才能改成檔案名稱,這邊使用OFFSET函數,根據選擇的數字,從第一個檔案往下OFFSET,並結合C3的資料夾路徑,組合出完整檔案路徑。如此一來便能接上之前做的Load File功能 ,用起來順手多了👍
寫完馬上就出Bug了,測試發現Excel的列數最多支援到32768,檔案太多會造成溢位,解決方式是超過一定數量之後自動分欄,之後有空再把它做完
另外是動態範圍應該要再 -1 ,否則清單方塊最後會有一個空白的項目,但影響不大,一樣以後再改吧。