【问题标题】:VBA dir() returns empty stringVBA dir() 返回空字符串
【发布时间】:2018-06-27 08:31:30
【问题描述】:

我正在尝试让这个 vba 工作。它读取了正确的文件结构并找到了第一个 .xlsx 并将所需的数据导入到 control.xlsm。

我注意到在它到达 fileName = dir() 之后,fileName 变为空。我读到它这样做是因为它找不到符合条件的文件,但我做错了什么?

这里是代码

     Sub test_werk_final()
   Application.ScreenUpdating = False
   Application.CutCopyMode = False
   Application.DisplayAlerts = False

  Dim directory, fileName As String, sheet As Worksheet

 directory = ThisWorkbook.Path & "\"

fileName = Dir(directory & "*.xlsx")
controlFile = Dir(directory & "control.xlsm")
  lijn = 2
  MsgBox "1" & directory & "2" & fileName & "3" & controlFile
  Do Until fileName = ""
    MsgBox "1" & directory & "2" & fileName & "3" & controlFile

       Workbooks.Open fileName:=(directory & fileName)
         MsgBox "1" & directory & "2" & fileName & "3" & controlFile
naam = Sheets("Sheet2").Range("A1").Value

leeftijd = Sheets("Sheet2").Range("A2").Value

Workbooks(controlFile).Worksheets("control").Cells(lijn, 1) = naam
Workbooks(controlFile).Worksheets("control").Cells(lijn, 2) = leeftijd
For Each sheet In Workbooks(fileName).Worksheets
naam = Workbooks(fileName).Worksheets.Range("A1").Value
leeftijd = Workbooks(fileName).Worksheets.Range("A2").Value

Workbooks(controlFile).Worksheets("control").Cells(lijn, 1) = naam
Workbooks(controlFile).Worksheets("control").Cells(lijn, 2) = leeftijd
Next sheet
Workbooks(fileName).Close
  MsgBox "1" & directory & "2" & fileName & "3" & controlFile
lijn = lijn + 1
         MsgBox "1" & directory & "2" & fileName & "3" & controlFile


       fileName = Dir() ' volgende
         MsgBox "1" & directory & "2" & fileName & "3" & controlFile
 Loop
    Application.ScreenUpdating = True

我不是专业的编码专家,但我确实拥有基本的编程技能。

P.S:我已经在不同的论坛上寻找了 questone,但没有找到任何可以帮助我的东西。也许我使用了错误的搜索字符串。

提前致谢

【问题讨论】:

  • 您不能连续两次使用带参数的 Dir 命令。目录使用每次重置的内部状态。
  • 反转前两个 Dir 行。

标签: vba directory


【解决方案1】:

你应该简单地改变两个 Dir 语句的顺序:

controlFile = Dir(directory & "control.xlsm")
fileName = Dir(directory & "*.xlsx")

当您发出带有参数的Dir-command 时,将根据您传递的模式开始新的搜索。 Dir-command 不带参数获取下一个匹配该模式的文件。在您的代码中,您首先使用通配符开始搜索,然后使用固定文件名进行第二次搜索。当您开始循环时,dir-command 将尝试查找另一个名为 control.xlsm 的文件,当然会失败。

【讨论】:

  • 天啊,这解释了为什么它与另一个代码一起工作。我真傻。我今晚有时间试试这个。提前致谢。
  • 谢谢,它就像一个魅力。也感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 2020-01-27
  • 2020-07-11
  • 2015-05-25
  • 2011-05-09
  • 1970-01-01
  • 2012-07-20
  • 2011-12-15
相关资源
最近更新 更多