【发布时间】: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. 更改了位置,一切正常。非常感谢:)