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

时间:2014-03-21 14:04:51

标签: sql excel vba excel-vba adodb

在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中有数据:O15000并且我想查询它我会做类似的事情

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行并不会造成问题,但是当我们克服好的问题时65k行Excel 2003代码中断。因此,如果我在那里[Sheet1$A5:O100000],代码就不会抱怨数据引用无效。

我发现另一个有趣的事情是,如果数据从A1开始,我只说[Sheet1$],相同的代码(即使是100.000行)也能正常运行。但是,我使用的文件是预配置的,并且填充了大量的宏,因此我不能将数据移动到工作表的开头。将数据复制到一个新的空白表并查询它也不是一个选项,我试图使用SQL来提高速度并复制整个数据集肯定不会帮助我。< / p>

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

0 个答案:

没有答案