支持> 65k行的Excel VBA SQL驱动程序

在Excel 2010中通过VBA查询Excel数据时,我遇到了一个有趣的问题。

我正在使用这些驱动程序来连接到xls或xls(x | m)文件:

Sub OpenCon(ByRef theConn As Connection, ByVal FilePath As String) 'Opens the connection based on Excel version If Right(FilePath, 4) = ".xls" Then theConn.Open "Driver={Microsoft Excel Driver (*.xls)};" & _ "DriverId=790;" & _ "Dbq=" & FilePath & ";" & _ "DefaultDir=" & FilePath Else theConn.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _ "DriverId=790;" & _ "Dbq=" & FilePath & ";" & _ "DefaultDir=" & FilePath End If End Sub 

现在,如果我从A5:Sheet1 Sheet1中的数据,我想查询它,我会做类似的事情

 Dim rs as Recordset Dim con as Connection Set con = New Connection OpenCon con, ThisWorkbook.FullName Set rs = New Recordset Set rs = con.Execute("SELECT * FROM [Sheet1$A5:O15000]") 

请注意,我的数据从第五行开始。 现在15.000行不会造成问题,但是当我们得到Excel 2003的良好行65k行时,代码就会中断。 所以如果我有[Sheet1$A5:O100000]那里代码不会运行抱怨数据引用是无效的。

我发现另一个有趣的事情是,如果数据从A1开始,我只说[Sheet1$] ,相同的代码(甚至100.000行)运行正常。 然而,我正在使用的文件是预先configuration,并填充了大量的macros,所以我不能只是将数据移动到工作表的开始。 复制数据到一个新的空白工作表和查询也不是一个选项,我试图使用SQL来获得一些速度的改善,复制整个数据集出来肯定不会帮助我。

无论如何,问题是 – 是否有另一个驱动程序,将支持额外的行数? 或者以任何其他方式绕过这个问题?