2015-02-09 63 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屬性包含這個。