首页 文章

有人能解释一下使用Dir功能的While循环如何在VBA中工作?

提问于
浏览
0

我是VBA的新手,需要制作一个工作脚本 . 该脚本将查找目录并导入找到工作簿中新工作表的任何.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

结束子

1 回答

  • 4

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

    当您使用目录路径作为参数调用Dir()时,它将返回该目录中的第一个文件名 .

    当您在没有参数的情况下调用Dir()时,它将返回目录中的下一个文件名,直到没有更多文件为止,在这种情况下返回空名称 .

    因此,为了处理目录中的所有文件,您需要一次Dir(路径),然后是Dir(),只要它返回一个名称 .

    如何测试是否返回名称?
    fname>""
    是一种方式,他们在这里使用
    len(fname)>0
    其中len是另一个以字符串作为参数并返回该字符串长度的函数 .

    所以“只要有文件”部分就出现了 . 这是通过循环结构实现的

    while *condition*  
        ... do things  
    end while
    

    在这种情况下

    While (Len(fname) > 0)
        '...
        fname=Dir
    Wend
    

相关问题