【发布时间】:2016-05-04 15:06:00
【问题描述】:
我对 VBA 还很陌生,需要编写一个工作脚本。该脚本将在目录中查找并将找到的任何 .txt 文件导入到工作簿中的新工作表中。 IE。如果有 20 个 .txt 文件,我最终会得到 20 个工作表。我在网上找到了一些代码可以完美地做到这一点,完全符合我的要求。问题是,我真的不明白它是如何工作的。我从来没有使用过 Dir 函数,看起来循环专注于这个,但我仍然对它是如何从一个文件循环到下一个文件感到困惑。如果有人可以帮助我理解或将 cmets 添加到代码中,那将非常有帮助。谢谢。
代码是:
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
结束子
【问题讨论】:
-
直接从来源口 MSDN Dir 阅读该主题怎么样。然后用关于该主题的大量其他文章来补充它! ...我也是VTC,因为这个题外话是为了找教程。最后,欢迎来到 SO。请阅读How to Ask 以获得更好的帮助。 :)
-
我会先查看 DIR 函数,看起来你正在拾取文件,然后当文件什么都没有时,即 len=0 停止。 While = while this is true 这样做。
-
如果你不懂 C,它对你没有帮助——但在某些方面,VBA 中的
Dir总是让我想起 C 中的strtok()——它们被用于以大致相似的方式循环。