解决:打开文件列表:如何更快地做到这一点?

我有一个窗体返回存储在某个文档中的SQL文件列表到窗体上的ListView。 从列表中select一个项目后,SQL文件将在MS SQL Server中打开。 代码工作,但填充列表,即使我只有16文件夹中的速度非常缓慢。

最初它返回的文件名,修改date,创builddate,大小和path,但我把它缩小到名称,修改和path,希望它会加快代码,但没有运气。

我也尝试将GetFolder部分更改为Dir,但是我很难使其工作(对于VBA,我还是比较新的,所以不能100%地提示它的来龙去脉)。

如果您能够使代码更高效/更快地运行,我将不胜感激。 谢谢。

Sub populatelist() Dim fso As Object Dim fldr As Object Dim Files As Object Dim oFile As Object Dim li As ListItem With Excel.Application .ScreenUpdating = False .Calculation = Excel.xlCalculationManual .EnableEvents = False .DisplayAlerts = False End With On Error GoTo ErrHandler If PackageAvailable("SQL") = True Then Set fso = CreateObject("Scripting.FileSystemObject") Set fldr = fso.GetFolder("P:\Documents\SQL Server Management Studio\") Set Files = fldr.Files For Each oFile In Files Set li = frmSQL.lstQueries.ListItems.Add(, , oFile.Name) li.SubItems(1) = Format$(oFile.DateLastModified, "DD MMM YYYY") li.SubItems(2) = oFile.ParentFolder Next End If EndProc: On Error Resume Next Set li = Nothing Set oFile = Nothing Set fldr = Nothing Set fso = Nothing With Excel.Application .ScreenUpdating = True .Calculation = Excel.xlCalculationAutomatic .EnableEvents = True .DisplayAlerts = True End With Exit Sub ErrHandler: MsgBox "ERROR: " & Err.Description, vbexclmation, "Error" Resume EndProc End Sub 

解决

按照Tom的build议更改文件path。 奇怪它是相同的位置,但另一条路去那里,但工作正常。

给这个问题更广泛的答案。

一般来说,vba循环并不总是解决excel等问题的最佳select。 与批量操作相比,循环总是会慢一些。 (另见这里 )

如果您必须使用循环,请确保您只循环有价值的数据。 尝试尽量减less您的样本,尽可能多,例如在Excel中的数据filter或(如在OP的情况下)重新定位文件。 大多数情况下,如果您真的首先考虑数据集,那么解决问题的方法会更容易编写,性能更好。

一般来说:越less越好。

HTH