继上次做完了读取BIN档的功能,开心的用了一阵子之后又开始贪心了,每次要读不同档案都要複製一次路径实在很麻烦,于是想要新增列出档案清单的功能,结果如下图:
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 = FileCountEnd Sub
这段程式的功能是
读取C3的路径并去除双引号「"」(因为win10 的複製路径功能都会代双引号)清除U栏的资料(重新读取的时候会需要)读取资料夹内的所有档案并依序放到U栏中 (程式参考这个网站 VBA Dir 函数使用说明 | 读取档案资料夹内的所有档案 )将档案数量放在T1执行结果如下:
2. 清单方块
至此完成了一半,后面的麻烦是清单方块需要选择输入範围,範围太短无法列出所有档案,太长又会造成清单方块下方出现很多空白、且scroll bar会很难用(尤其是居然不支援滑鼠滚轮),如下图这样:
这边需要利用Excel 的「定义名称」功能配合「INDIRECT」 函数,可以做出动态的选择範围。
首先打开名称管理员,如下图定义一个新的名称
INDRECT里会参考T1的数字(刚刚用VBA算出来的FileCount)组字串,结果就是我们需要的範围,我们定义它名称叫做"档案清单"。
设定好之后就可以回到清单方块的输入範围,输入刚刚定义的名称,便可好好显示我们需要的档案,然后将选择的结果放在T2
3. 接上Load File的功能
清单方块选择的结果只会显示项目的编号,需要再处理一下才能改成档案名称,这边使用OFFSET函数,根据选择的数字,从第一个档案往下OFFSET,并结合C3的资料夹路径,组合出完整档案路径。如此一来便能接上之前做的Load File功能 ,用起来顺手多了