我有一个表单,它将存储在某个文档中的SQL文件列表返回给表单上的ListView。从列表中选择一个项目后,将在MS SQL Server中打开SQL文件。代码有效,但填充列表的速度非常慢,即使文件夹中只有16个文件。
最初它返回了文件名,修改日期,创建日期,大小和路径,但我将其剪切为名称,修改和路径,希望它能加快代码速度,但没有运气。
我也尝试将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建议的情况下更改文件路径。奇怪的是,这是一个相同的位置,但另一条路可以到达那里,但工作正常。
答案 0 :(得分:0)
为这个问题提供更广泛的答案。
通常,vba循环并不总是解决excel等问题的最佳决策。与批量操作相比,循环总是慢一点。 (另见here)
如果您必须使用循环,请确保您只循环遍历值得的数据。尝试尽量减少您的样本,例如使用Excel中的数据过滤器或(如在OP的情况下)重定位文件。如果你真的首先想到你的数据集,大多数时候你的问题解决方案会更容易编写并且性能更好。
一般来说:越少越好。
HTH