Vba 使用Dir循环遍历文件夹中的文件

Vba 使用Dir循环遍历文件夹中的文件,vba,excel,Vba,Excel,我正在尝试使用Dir遍历文件。我已经写了以下内容,但正如预期的那样,循环在打开和关闭文件夹中的第一个文件时是无止境的 我想知道是否有比通配符方法更好的方法,但是谁能为我提供一个解决方案呢 strFolder = "D:\Name\Project\Data\Back-End\Previous\" strFileSpec = strFolder & "*.xlsx" strFileName = Dir(strFileSpec) Do While Len(strFileName) >

我正在尝试使用
Dir
遍历文件。我已经写了以下内容,但正如预期的那样,循环在打开和关闭文件夹中的第一个文件时是无止境的

我想知道是否有比通配符方法更好的方法,但是谁能为我提供一个解决方案呢

strFolder = "D:\Name\Project\Data\Back-End\Previous\"
strFileSpec = strFolder & "*.xlsx" 
strFileName = Dir(strFileSpec)

Do While Len(strFileName) > 0
    Dim strFilePath As String: strFilePath = strFolder & strFileName
    Set proxy_wbk = Workbooks.Open(strFilePath)
    Set proxySheet = proxy_wbk.Sheets(1)
    siteName = proxySheet.Cells(1, 1).Value

    'do work'

    Workbooks(siteName & "_Jan_2017.xlsx").Close savechanges:=False
Loop
试试这个代码

files = Dir("/yourpath/*.xlsx")
While files <> ""
    List(i)=files //List(i) will hold the file name 
    files = Dir
Wend
files=Dir(“/yourpath/*.xlsx”)
而文件“”
列表(i)=文件//列表(i)将保存文件名
files=Dir
温德
这里,Dir函数每次调用时都会逐个返回文件名 所有文件名清空后,返回空字符串


为了更好地理解,假设Dir函数中有静态变量来保存文件名索引。

用Dir显示更多代码。@GordonBell我已经更新了帖子。在
循环
之前添加
strFileName=Dir
(无参数)以获取下一个文件名谢谢。这起作用了。你能解释一下为什么设置strFileName=Dir会将其向前移动吗。我想我不太明白。不管怎样,我很感谢帮助。Dir调用了一个底层Windows函数,其他同时运行的应用程序也可能调用它;这可以重置目录和文件规范,因此后续对Dir的调用可能会返回意外结果。如果这是一个问题,那么更安全的做法是加载一个数组或集合,其中包含与您的规范匹配的文件,然后通过从数组中提取文件名来处理它们,而不是重复调用Dir。您还可以通过检查每个数组条目来添加另一层防愚功能,以确保在对其执行操作之前路径与您期望的路径匹配。请您对您提供的代码添加一些解释?谢谢。我已经补充了解释。现在清楚了吗?