Все, что я пытаюсь сделать, это взять стандартный диапазон на листе Excel (то есть именованный диапазон или даже A1: F100), выполнить несколько SQL-запросов к нему и вернуть набор записей, через который я могу пройти Код VBA или даже просто вставить в другой лист в той же книге.
Использование ADODB было одной мыслью, но как я могу настроить строку подключения так, чтобы она указывала на некоторый диапазон в текущей книге?
Я знаю, прежде чем использовал мастер запросов Microsoft, который не был идеальным, но работал бы. Я не могу понять, что это относится к диапазону в таблице, только к другим файлам Excel.
Вот функция, с которой я остался. Когда я запускаю его несколько раз, мой Excel вылетает с обычным сообщением об ошибке «Недостаточно ресурсов». Я удалил эту функцию из своей электронной таблицы, и все работает многократно, поэтому она определенно вызвана кодом здесь.
Я убрал все объекты (правильно?). У кого-нибудь есть идеи, что может пойти не так? Может ли быть что-то в строке подключения, что может быть изменено, или это может быть связано с вариантом, возвращаемым из метода GetRows?
Я использую MS ADO 2.8, а также пробовал 2.5 с тем же поведением.
Function getTimeBuckets() As Collection
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim dateRows As Variant
Dim i As Integer
Dim today As Date
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set getTimeBuckets = New Collection
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
cn.Open strCon
strSQL = "SELECT DISTINCT(Expiration) FROM [PositionSummaryTable] where [Instrument Type] = 'LSTOPT'"
rs.Open strSQL, cn
dateRows = rs.GetRows
rs.Close
'today = Date
today = "6-may-2009"
For i = 1 To UBound(dateRows, 2)
If (dateRows(0, i) >= today) Then
getTimeBuckets.Add (dateRows(0, i))
End If
Next i
Set dateRows = Nothing
Set cn = Nothing
Set rs = Nothing
End Function