Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下在VBA中使用Dir函数的While循环是如何工作的吗?_Vba_Excel - Fatal编程技术网

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

有人能解释一下在VBA中使用Dir函数的While循环是如何工作的吗?,vba,excel,Vba,Excel,我是VBA新手,需要为工作编写脚本。脚本将查找目录并将找到的任何.txt文件导入工作簿中的新工作表。也就是说,如果有20个.txt文件,我将得到20个工作表。我在网上找到了一些代码,完全符合我的要求。问题是,我真的不明白它是如何工作的。我从未使用过Dir函数,循环似乎关注于此,但我仍然不清楚这是如何从一个文件循环到下一个文件的。如果有人能帮助我理解,或者在代码中添加注释,那将非常有帮助。谢谢 代码是: Sub LoadFiles() Dim idx As Integer Dim fpat

我是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

End Sub

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

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

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

所以,为了处理目录中的所有文件,您需要Dir(path)一次,后跟Dir(),只要返回一个名称即可

如何测试是否返回了名称?
fname>”

是一种方法,在这里他们使用
len(fname)>0

其中len是另一个函数,它将字符串作为参数并返回该字符串的长度

因此,“只要有文件”部分就来了。这是通过循环结构实现的

while *condition*  
    ... do things  
end while 
在这种情况下

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

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

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

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

所以,为了处理目录中的所有文件,您需要Dir(path)一次,后跟Dir(),只要返回一个名称即可

如何测试是否返回了名称?
fname>”

是一种方法,在这里他们使用
len(fname)>0

其中len是另一个函数,它将字符串作为参数并返回该字符串的长度

因此,“只要有文件”部分就来了。这是通过循环结构实现的

while *condition*  
    ... do things  
end while 
在这种情况下

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

直接从来源口中读一下这个话题怎么样。然后用大量关于这个主题的其他文章来补充这一点。。。我也是职业训练局的,因为这个话题离题了,所以我想找一份教程。最后,欢迎来到SO。请阅读以在将来获得更好的帮助。:)我先看看DIR函数,看起来你正在拾取文件,然后当文件为空时,即len=0停止。While=While这是真的,那么就这么做吧。如果你不懂C,这对你没什么帮助——但是VBA中的
Dir
总是让我想起了C中的
strtok()
——它们在循环中的使用方式大致相同。直接从源代码开始读这个主题怎么样。然后用大量关于这个主题的其他文章来补充这一点。。。我也是职业训练局的,因为这个话题离题了,所以我想找一份教程。最后,欢迎来到SO。请阅读以在将来获得更好的帮助。:)我先看看DIR函数,看起来你正在拾取文件,然后当文件为空时,即len=0停止。While=While这是真的,那么就这么做吧。如果你不懂C,这对你没什么帮助——但VBA中的
Dir
总是让我想起C中的
strtok()
——它们在循环中的使用方式大致相似。谢谢你,这很有意义。带参数和不带参数的函数调用让我很困惑。谢谢,这很有意义。带参数和不带参数的函数调用都让我感到困惑。