iT邦幫忙

0

Excel VBA 讀取資料夾檔案,並顯示於清單方塊中

  • 分享至 

  • xImage
  •  

上次做完了讀取BIN檔的功能,開心的用了一陣子之後又開始貪心了,每次要讀不同檔案都要複製一次路徑實在很麻煩,於是想要新增列出檔案清單的功能,結果如下圖:

https://ithelp.ithome.com.tw/upload/images/20231129/20161052TI296hhpNy.png

1. VBA

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

這段程式的功能是

執行結果如下:
https://ithelp.ithome.com.tw/upload/images/20231130/20161052d7pRVplsyT.png

2. 清單方塊

至此完成了一半,後面的麻煩是清單方塊需要選擇輸入範圍,範圍太短無法列出所有檔案,太長又會造成清單方塊下方出現很多空白、且scroll bar會很難用(尤其是居然不支援滑鼠滾輪),如下圖這樣:
https://ithelp.ithome.com.tw/upload/images/20240220/20161052e6svOvDF5d.jpg

這邊需要利用Excel 的「定義名稱」功能配合「INDIRECT」 函數,可以做出動態的選擇範圍。
首先打開名稱管理員,如下圖定義一個新的名稱
https://ithelp.ithome.com.tw/upload/images/20231130/20161052yMGpLR4O1p.png

=INDIRECT("GF9:GF"&Sheet1!$GE$9)裡會參考T1的數字(剛剛用VBA算出來的FileCount)組字串,結果就是我們需要的範圍,我們定義它名稱叫做"檔案清單"。
設定好之後就可以回到清單方塊的輸入範圍,輸入剛剛定義的名稱,便可好好顯示我們需要的檔案,然後將選擇的結果放在T2

3. 接上Load File的功能

清單方塊選擇的結果只會顯示項目的編號,需要再處理一下才能改成檔案名稱,這邊使用OFFSET函數,根據選擇的數字,從第一個檔案往下OFFSET,並結合C3的資料夾路徑,組合出完整檔案路徑。如此一來便能接上之前做的Load File功能 ,用起來順手多了👍

https://ithelp.ithome.com.tw/upload/images/20231130/20161052LzY0AvGEoK.png

================ 還是會有BUG😩 ================

  • 寫完馬上就出Bug了,測試發現Excel的列數最多支援到32768,檔案太多會造成溢位,解決方式是超過一定數量之後自動分欄,之後有空再把它做完

  • 另外是動態範圍應該要再 -1 ,否則清單方塊最後會有一個空白的項目,但影響不大,一樣以後再改吧。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言