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