我正在尝试使此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:我已经在其他论坛上寻找了问题,没有找到任何可以帮助我的东西。也许我使用了错误的搜索字符串。
预先感谢
答案 0 :(得分:1)
您应该简单地更改两个Dir语句的顺序:
controlFile = Dir(directory & "control.xlsm")
fileName = Dir(directory & "*.xlsx")
当您发出带有参数的Dir
命令时,将根据您传递的模式开始新的搜索。 Dir
-不带参数的命令将提取与该模式匹配的下一个文件。在您的代码中,您首先使用通配符搜索,然后使用固定文件名进行第二搜索。当您开始循环时,dir
命令将尝试查找名称为control.xlsm
的另一个文件,当然会失败。