【问题标题】:Loop through Files in Folder Using Dir [duplicate]使用目录循环浏览文件夹中的文件[重复]
【发布时间】:2017-07-22 11:12:54
【问题描述】:

我正在尝试使用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

【问题讨论】:

  • 使用目录显示更多代码。
  • @GordonBell 我已经更新了帖子。
  • Loop前加strFileName = Dir(不带参数)得到下一个文件名
  • 谢谢。这行得通。你能解释一下为什么设置strFileName = Dir 会推动它前进吗?我不认为我完全遵循它。无论如何,我感谢您的帮助。
  • Dir 调用了一个底层的 Windows 函数,同时运行的其他应用也可能调用该函数;可以重置目录和文件规范,因此您对 Dir 的后续调用可能会返回意外结果。如果这是一个问题,那么使用符合您规范的文件加载数组或集合会更安全,然后通过从数组中提取文件名而不是重复调用 Dir 来处理它们。您还可以通过检查每个数组条目来添加另一层防呆措施,以确保在对其进行操作之前,该路径与您期望的路径匹配。

标签: vba excel


【解决方案1】:

试试这个代码

files = Dir("/yourpath/*.xlsx")
While files <> ""
    List(i)=files //List(i) will hold the file name 
    files = Dir
Wend

这里Dir函数每次调用都会一一返回文件名 清空所有文件名后返回空字符串。

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

【讨论】:

  • 请您围绕您提供的代码添加一些解释?谢谢。
  • 我已经添加了解释。现在清楚了吗?
猜你喜欢
  • 2012-12-24
  • 2010-12-20
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多