更新:我在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一样,它会转到下一个可用文件。
我不确定是否与我的本地环境有关?有什么想法吗?
非常感谢。
答案 0 :(得分:0)
请参阅初始文章顶部的“堆栈溢出”更新。