代码运行正常,但逐步执行时出错

时间:2020-10-15 22:07:59

标签: vba

更新:我在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一样,它会转到下一个可用文件。

我不确定是否与我的本地环境有关?有什么想法吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

请参阅初始文章顶部的“堆栈溢出”更新。