【问题标题】:Opening File List: How to do it quicker?打开文件列表:如何更快?
【发布时间】:2016-02-22 12:57:18
【问题描述】:

我有一个表单,它将存储在某个文档中的 SQL 文件列表返回到表单上的 ListView。一旦从列表中选择了一个项目,SQL 文件就会在 MS SQL Server 中打开。该代码有效,但填充列表非常慢,即使文件夹中只有 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 的建议更改文件路径有效。奇怪的是,它是同一个位置,但有另一条到达那里的路径,但工作正常。

【问题讨论】:

  • 顺便说一句,在这个阶段我不想从 Excel 运行查询;我只想让 Excel 在 SQL Server 中打开文件(就像双击文件本身一样)。
  • 你为什么在这里将计算设置为手动然后又回到自动?
  • 复制粘贴错误。我从另一个代码中粘贴了整个块,试图添加一些东西以使其运行得更快。会拿出来的。
  • 您确定该文件夹中只有 16 个文件吗? P:你的本地驱动器吗?
  • @Tom + 1. 更改了位置,一切正常。非常感谢:)

标签: vba excel


【解决方案1】:

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

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

如果您必须使用循环,请确保您只循环访问值得的数据。尽量减少您的样本,例如使用 excel 中的数据过滤器或(如在 OPs 情况下)重新定位文件。大多数情况下,如果您真的首先考虑您的数据集,您的问题解决方案会更容易编写并且性能更好。

一般来说:越少越好。

HTH

【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2017-01-02
    相关资源
    最近更新 更多