有人可以解释一下使用Dir函数的While循环是如何在VBA中工作的?

我对VBA相当陌生,需要编写脚本才能工作。 该脚本将在目录中查找并将find的所有.txt文件导入到工作簿中的新工作表中。 也就是说,如果有20个.txt文件,我最终将有20个工作表。 我在网上发现了一些代码,完全符合我的要求。 问题是,我真的不明白它是如何工作的。 我从来没有使用过Dir函数,看起来这个循环着重于这个,但是我仍然对从一个文件循环到下一个文件感到困惑。 如果有人能帮我理解,或者给代码添加注释,那真的很有帮助。 谢谢。

代码是:

Sub LoadFiles() Dim idx As Integer Dim fpath As String Dim fname As String Dim ws As Worksheet idx = 0 fpath = "C:\MyFolderLocation" fname = Dir(fpath) While (Len(fname) > 0) idx = idx + 1 Sheets.Add.Name = fname With ActiveSheet.QueryTables.Add(Connection:="TEXT;" _ & fpath & fname, Destination:=Range("A1")) .Name = "a" & idx .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 437 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileOtherDelimiter = "," .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False fname = Dir End With Wend 

结束小组

Dir函数返回一个目录中的文件名。

当你用目录的path作为参数调用Dir()时,它会从那个目录返回第一个文件名。

当你没有参数调用Dir()时,它将从目录返回下一个文件名,直到没有更多的文件,在这种情况下返回一个空名字。

所以为了处理目录中的所有文件,你需要一次Dir(path),然后是Dir(),只要返回一个名字即可。

你如何testing一个名字是否被返回? fname>“”是一种方法,在这里他们使用len(fname)> 0其中len是另一个函数,它接受一个string作为参数,并返回该string的长度。

因此,“只要有文件”的一部分。 这是实现一个循环结构,而条件 …做事情结束时

在这种情况下

while(Len(fname)> 0)… fname = Dir end while