SQL-драйвер Excel VBA, который поддерживает>65 тыс. Строк
У меня есть интересная проблема при запросе данных Excel через VBA в Excel 2010.
Я использую эти драйверы для подключения к файлам 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
Теперь, если у меня есть данные на листе 1 от A5: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 строк не представляют проблемы, но в тот момент, когда мы преодолеем 65 тысяч строк Excel 2003, код ломается. Так что если бы я [Sheet1$A5:O100000]
там код не запустится с жалобой на недопустимую ссылку на данные.
Еще одна интересная вещь, которую я узнал, заключается в том, что если данные начинаются с A1, и я говорю [Sheet1$]
тот же код (даже для 100 000 строк) работает правильно. Однако файл, который я использую, предварительно настроен и заполнен большим количеством макросов, поэтому я не могу просто переместить данные в начало листа. Копирование данных на новый чистый лист и запрос, который также не является опцией, я пытаюсь использовать SQL, чтобы получить некоторые улучшения скорости, и копирование всего набора данных точно не поможет мне.
В любом случае вопрос - есть ли другой драйвер, который бы поддерживал дополнительное количество строк? Или любой другой способ обойти эту проблему?