excel - ADODB.Connection 慢在一台电脑上快速在另一台电脑上
问题描述
我有一个关于 excel 文件的 vba 项目和两台相同的笔记本电脑。
两台笔记本电脑上的办公室安装都是 64 位的。
在第一台笔记本电脑上,执行以下代码需要 20 秒,而在第二台笔记本电脑上需要很长时间。
我搜索了很多,但没有找到导致问题的原因。
欢迎任何建议。
代码是
Sub GetDataFromADO()
On Error GoTo ErrorHandler
'Turn of Automatic calculation'
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculateManual
If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilterMode = False
Worksheets("Data").Rows(8 & ":" & Worksheets("Data").Rows.Count).Delete
Set objMyConn = New ADODB.Connection
Set objMyRecordset = New ADODB.Recordset
Dim strSQL As String
objMyConn.ConnectionString = "Provider=SQLOLEDB;Data Source=Server;Initial Catalog=Database;User ID=user;Password=pass;"
objMyConn.Open
'Set and Excecute SQL Command'
strSQL = "select * from table where date>= DATEADD(yy,DATEDIFF(yy,0,GETDATE())-1,0) order by column1, column2"
'Open Recordset'
Set objMyRecordset.ActiveConnection = objMyConn
objMyRecordset.Open strSQL
'Copy Data to Excel'
ActiveSheet.Range("A8").CopyFromRecordset (objMyRecordset)
'Create Index for lookups'
'Find Last Row'
Dim Lastrow As Long
Lastrow = Range("A" & Rows.Count).End(xlUp).Row
'Copy Formula Until the last row'
Range("AG8:AG" & Lastrow).Formula = "=E8&F8"
ErrorHandler:
'Turn on Automatic calculation'
Application.Calculation = xlAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
解决方案
我建议在代码中使用断点来查明问题。从您的示例中,我将在 if 行、strSQL 行、Activesheet 行和 Range("AG8 行上添加一个。这将帮助您缩小问题所在并帮助您专注于问题可能是。在程序本身之外,比较计算机中的硬件。查看 CPU、RAM,以及由于您有活动连接,它们是如何连接到互联网的。
推荐阅读
- excel - 动态命名范围/公式多久重新计算一次?
- regex - 需要在多个点后捕获任何数据
- vue.js - 使用 Vue 和捆绑的 Service Worker
- spring-boot - RequestD 继续在 Jpa 中获取 Null
- angular - Angular - 模块“ngx-intl-tel-input”没有导出成员“TooltipLabel”
- sql-server - 在单表中使用 TSQL 脚本在 SQL 数据库中进行更改跟踪/历史记录
- assembly - 使用 MASM 8086 中的 16 位寄存器将两个 32 位数字相乘的方法是什么?
- reactjs - 如何在反应中获得有条件的主页项目按钮?
- javascript - React 路由器链接仅适用于刷新
- python - 如何用文本文件中的标记填充二维数组