【问题标题】:Querying more than 65536 rows error in Excel 2013在 Excel 2013 中查询超过 65536 行错误
【发布时间】:2014-08-19 18:22:21
【问题描述】:

我正在尝试使用 VBA 查询电子表格,但似乎遇到了 65536 行的硬限制(尽管我运行的是 Excel 2013)。

当尝试选择行数大于 65536 的所有行时,我收到以下错误消息:

运行时错误'-2147217865 (80040e37)':

Microsoft Access 数据库引擎找不到对象“Sheet1$A1:A65537”.....

我的代码:

Option Explicit

Sub ExcelQuery()

Dim conXLS As ADODB.Connection
Dim rsXLS As ADODB.Recordset
Dim strPath As String
Dim strSQL As String
Dim i As Integer

'Get the full directory + file name location of the current workbook (so it can query itself)'
strPath = Application.ActiveWorkbook.FullName

'create the ADO connection to the excel file'
Set conXLS = New ADODB.Connection
With conXLS
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = "Data Source=" & strPath & ";" & _
    "Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1;Readonly=False"""
End With
conXLS.Open

strSQL = "" & _
    "SELECT " & _
        "* " & _
    "FROM " & _
        "[Sheet1$A1:A65537] "

'create ADO recordset to hold contents of target sheet.'
Set rsXLS = New ADODB.Recordset
With rsXLS
    .CursorLocation = adUseClient
    .CursorType = adOpenForwardOnly
    .LockType = adLockReadOnly
End With

'using SQL return contents of the target sheet'
rsXLS.Open strSQL, conXLS

'disconnect the active connection'
Set rsXLS.ActiveConnection = Nothing

'Return results to excel'
Sheets("Sheet2").Cells(1, 1).CopyFromRecordset rsXLS

Set rsXLS = Nothing

'destroy the connection object'
conXLS.Close
Set conXLS = Nothing

End Sub

我也试过连接字符串:

With conXLS
    .Provider = "Microsoft.Jet.OLEDB.12.0"
    .ConnectionString = "Data Source=" & strPath & ";" & _
    "Extended Properties=Excel 12.0;"
    .Open

我已设置对“Microsoft ActiveX 数据对象 6.0 库”和“OLE 自动化”的引用。

有趣的是,使用 MSQuery 时似乎没有问题。

【问题讨论】:

  • Excel 作为数据库 停止。
  • 我喜欢危险的生活。

标签: sql excel vba


【解决方案1】:

较旧的 Excel 版本(2007 年之前)确实每个工作表有大约 65k+ 行的限制。运行您的代码并从 Excel 2007 及更高版本开始引用任何对象 Lib(每个工作表最多 1,048,576 行,Lib 版本对应 12.x 及更高版本)。根据您的情况,尝试使用符号[Sheet1$A:A] 而不是[Sheet1$A1:A65537] Rgds,

【讨论】:

  • 非常感谢,你有这样的库的例子吗?
  • 打开 Excel 2013 应用程序(或从 2007 开始的任何版本),按 ALT+F11,您将获得带有适当 Lib 的 VBA 编辑器。粘贴你的东西并重新编译项目(菜单选项调试->编译)。 Rgds,
  • 嘿 Alex,只是在设置参考部分有点卡住了 - 没有 Microsoft ActiveX Data Objects 12.0 Library 或类似的,我认为最新版本是 ado.net(我当然不能采用)。微软甚至为 VBA 推出了更新的 ado 吗?再次感谢您的帮助。
  • Alex,虽然您的代码运行顺利(我的意思是 [Sheet1$A:A] 方法),但它再次仅返回 65536 行,因此整个查询的结果将不正确。有一个有趣的解决方法here
  • 忘记列 - 这不起作用 - 不知道为什么这是一个公认的答案。只需将工作表作为一个整体提供[Sheet1$] - 如果您的数据不在简单表格的第一行,请将其放在单独的工作表上。 @Đức Thanh Nguyễn 在下面解决了这个问题。
【解决方案2】:

我很久以前就遇到过这个问题。我所做的是这样编写查询:

select Data from [Temp$]

Temp 是我的工作表名称,单元格 A1 的内容是“数据”,A2:A80000 的内容是 ids

成功了。

【讨论】:

  • 这救了我的命,非常感谢?值得注意的是,命名范围也失败了(可能是因为它们在后台转换为工作表范围)。我有一个名为DataSet 的命名范围,所以我的查询看起来像这样(释义)SELECT SomeData FROM DataSet - 错误是“找不到对象数据集等等”,但是转到“数据”选项卡的“名称”部分,它显然就在那里。更改为 SELECT SomeData FROM [DataSet$] 解决了这个问题(我的工作表是根据它们的命名范围命名的,这样很方便)。
猜你喜欢
  • 1970-01-01
  • 2016-12-03
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多