2015-02-09 66 views
1

我在MS-Access中有一个包含目录路径的表。在表单中,我有一个列表框,其中包含要搜索的文件列表。我使用下面的代码:访问VBA:搜索多个目录中的多个文件

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 

这工作得很好,但它不是最佳解决方案。例如,如果我有5个不同的目录路径,并且在列表框中,如果我有2个文件要搜索,那么在表中,即使在前两次迭代中找到2个文件,循环也总是运行10次。根据代码,即使文件已经在第一个目录路径中找到,它也会在其余4个目录中搜索同一个文件。有没有更好的方法来减少迭代次数?

在我的情况下,我通常会在列表框中至少有10个目录路径和20个文件进行搜索,因此循环总是会迭代200次,这会降低性能。

+0

你在哪里得到列表框的内容?从MyTable?值? AnotherTable?换句话说,行源是什么? – Fionnuala 2015-02-09 15:34:15

+0

我有另一个列表框,其中列出了用户必须从中选择添加到当前列表框中的文件的所有文件。 – enriq 2015-02-09 16:14:51

回答

1

跟踪有多少文件被发现,然后跳出循环达到你的目标数量时,即

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 

你甚至可以遍历只有所选项目的列表框,以提高办事效率进一步 - ItemsSelected属性包含这个。