来自ADODB Connection的不完整记录集

时间:2015-04-23 19:17:01

标签: vba excel-vba adodb excel-2013 recordset

我正在尝试从包含80,000多行的工作表中检索数据并将这些值打印到工作表中,但是当我创建记录集并查看其记录数时,它只包含16,492条记录。

我是ADODB连接的新手,所以我对这个问题感到难过。

这是我的代码:

Sub testing()
    On Error Resume Next

    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adCmdText = &H1

    Dim objCon As New ADODB.Connection
    Dim recSet As ADODB.Recordset

    Set objCon = CreateObject("ADODB.Connection")
    Set recSet = CreateObject("ADODB.Recordset")

    objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\Users\nschneider\Desktop\Data Pulls_FY08 to Present_Companies 10, 20, 30, 40.xlsx;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";"

    recSet.Open "Select * FROM [Data$]", _
        objCon, adOpenStatic, adLockOptimistic, adCmdText

    If Not recSet.EOF Then
        Sheets(2).Range("A2").CopyFromRecordset recSet
    End If

    '    Do Until objRecordset.EOF
    '        Wscript.Echo objRecordset.Fields.Item("Name"), _
    '            objRecordset.Fields.Item("Number")
    '        objRecordset.MoveNext
    '
    '    Loop
End Sub

我已经评论了Loop,因为这是我在之前的论坛上看到的。不确定这是否是我需要的。

1 个答案:

答案 0 :(得分:5)

您正在使用Excel 97-2003 .xls文件的连接字符串(特别是“Excel 8.0”部分)。 Excel表格当时仅限于65K行。然后,连接字符串将应用于Excel 2007-.xlsx文件,其中每个表的最大行数超过100万。

较旧的连接字符串适用于较新的.xlsx文件,但是当工作表上的行数超过旧的65K最大值时,我遇到了问题。将连接字符串更新为.xlsx文件的正确连接字符串,看看是否有帮助:

objCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=C:\Users\nschneider\Desktop\Data Pulls_FY08 to Present_Companies 10, 20, 30, 40.xlsx;" & _
        "Extended Properties=""Excel 12.0 Xml;HDR=Yes"";"

(我也删除了一个不必要的;在“HDR = Yes”之后)