打开文件列表:如何更快地完成?

时间:2016-02-22 12:57:18

标签: excel vba excel-vba

我有一个表单,它将存储在某个文档中的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建议的情况下更改文件路径。奇怪的是,这是一个相同的位置,但另一条路可以到达那里,但工作正常。

1 个答案:

答案 0 :(得分:0)

为这个问题提供更广泛的答案。

通常,vba循环并不总是解决excel等问题的最佳决策。与批量操作相比,循环总是慢一点。 (另见here

如果您必须使用循环,请确保您只循环遍历值得的数据。尝试尽量减少您的样本,例如使用Excel中的数据过滤器或(如在OP的情况下)重定位文件。如果你真的首先想到你的数据集,大多数时候你的问题解决方案会更容易编写并且性能更好。

一般来说:越少越好。

HTH