【发布时间】:2020-10-16 06:26:54
【问题描述】:
更新:我已被定向到此处的解决方案 VBA - Do While Loop returns Dir <Invalid procedure call or argument>
下面的代码是遍历用户选择的文件夹并列出其中的文件。
它在通过 F5 写入 MsgBox 或 Debug.Print 时工作正常,但在尝试单步执行时会导致运行时错误 5“无效的过程调用或参数”并在 FileToList = Dir 处中断。
当我观察 Dir 和 FileToList 的监视窗口时,Dir 在 FileToList 甚至到达文件夹中的第三个文件之前到达“”。在循环中移动的每按一次 F8 都会导致 Dir 值在一个完整的循环循环之前发生变化。
Sub Loop_Inside_Folder()
Dim FileDir As String
Dim FileToList As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Please select a folder"
.ButtonName = "Pick Folder"
If .Show = 0 Then
MsgBox "Nothing was selected"
Exit Sub
Else
'Folder path
FileDir = .SelectedItems(1) & "\"
End If
End With
'Get first matching file name
FileToList = Dir(FileDir & "*xlsm")
Do Until FileToList = ""
'Debug.Print FileToList
FileToList = Dir
Loop
End Sub
为了进一步测试,我添加了 5 行:
FiletoList = Dir(FileDir & "*.xls*")
FiletoList = Dir(FileDir & "*.xls*")
FiletoList = Dir(FileDir & "*.xls*")
FiletoList = Dir(FileDir & "*.xls*")
FiletoList = Dir(FileDir & "*.xls*")
FiletoList = Dir(FileDir & "*.xls*")
每一步的值是:
Dir : "File 2.xlsx"
FileToList : "File 1.xlsx"
因此,在单步执行时,FileToList = Dir 似乎无法正常工作。就好像 Dir 无法匹配 FileToList ,所以它转到下一个可用文件。
我不确定这是否与我当地的环境有关?有什么想法吗?
非常感谢。
【问题讨论】:
标签: vba