Access VBA: 在多个目录中搜索多个文件
Access VBA: Search multiple files in multiple directories
我在 MS-Access 中有一个包含目录路径的 table。在表单中,我有一个列表框,其中包含要搜索的文件列表。我使用以下代码:
Set rst = dbs.OpenRecordset("SELECT * FROM mytable;")
While Not rst.EOF
strPath = rst!Path
For i = 0 To lstBox.ListCount - 1
strFullPath = strPath & "\" & lstBox.ItemData(i)
If Len(Dir(strFullPath)) <> 0 Then
'Do something
End If
Next i
rst.MoveNext
Wend
这很好用,但不是最佳解决方案。例如,在 table 中,如果我有 5 个不同的目录路径,而在列表框中,如果我有 2 个文件要搜索,即使我在前两次迭代中找到 2 个文件,循环也会始终运行 10 次。根据代码,即使已在第一个目录路径中找到该文件,它也会在其余 4 个目录中搜索相同的文件。有没有更好的方法来减少迭代次数?
在我的例子中,我通常会在列表框中搜索至少 10 个目录路径和 20 个文件,因此循环将始终迭代 200 次,这会降低性能。
跟踪已找到的文件数量,然后在达到目标数量时跳出循环,即
Dim FileCount as Long
FileCount = 0
Do While not rst.EOF
'If file found:
FileCount = FileCount + 1
If FileCount = lstBox.ItemsSelected.Count Then Exit Do
'Do stuff
Loop
您甚至可以仅遍历 ListBox 中的选定项目以进一步加快速度 - ItemsSelected 属性 包含此内容。
我在 MS-Access 中有一个包含目录路径的 table。在表单中,我有一个列表框,其中包含要搜索的文件列表。我使用以下代码:
Set rst = dbs.OpenRecordset("SELECT * FROM mytable;")
While Not rst.EOF
strPath = rst!Path
For i = 0 To lstBox.ListCount - 1
strFullPath = strPath & "\" & lstBox.ItemData(i)
If Len(Dir(strFullPath)) <> 0 Then
'Do something
End If
Next i
rst.MoveNext
Wend
这很好用,但不是最佳解决方案。例如,在 table 中,如果我有 5 个不同的目录路径,而在列表框中,如果我有 2 个文件要搜索,即使我在前两次迭代中找到 2 个文件,循环也会始终运行 10 次。根据代码,即使已在第一个目录路径中找到该文件,它也会在其余 4 个目录中搜索相同的文件。有没有更好的方法来减少迭代次数?
在我的例子中,我通常会在列表框中搜索至少 10 个目录路径和 20 个文件,因此循环将始终迭代 200 次,这会降低性能。
跟踪已找到的文件数量,然后在达到目标数量时跳出循环,即
Dim FileCount as Long
FileCount = 0
Do While not rst.EOF
'If file found:
FileCount = FileCount + 1
If FileCount = lstBox.ItemsSelected.Count Then Exit Do
'Do stuff
Loop
您甚至可以仅遍历 ListBox 中的选定项目以进一步加快速度 - ItemsSelected 属性 包含此内容。