首页 > 解决方案 > 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

标签: excelvba

解决方案


我建议在代码中使用断点来查明问题。从您的示例中,我将在 if 行、strSQL 行、Activesheet 行和 Range("AG8 行上添加一个。这将帮助您缩小问题所在并帮助您专注于问题可能是。在程序本身之外,比较计算机中的硬件。查看 CPU、RAM,以及由于您有活动连接,它们是如何连接到互联网的。


推荐阅读