Я пытаюсь использовать ACE sql для возврата массива из набора записей. Эта функция хорошо работает с диапазонами таблиц.Excel UDF для возврата массива из набора записей ACE SQL
Задача: Функция возвращает правильное количество записей, если запрос возвращает 2 или более записей. Однако, если найдена только одна запись, все строки заполняются повторно одной этой строкой. Это неправильно, но я не могу найти причину.
Кроме того, я хочу, чтобы моя функция возвращала имена столбцов из Recordset. Я не знаю, как склеить его вместе с массивом, возвращаемым из набора записей.
Вот код, кредиты за счет автора другого решения, которое я пытаюсь приспособиться к моим потребностям: Performing SQL queries on an Excel Table within a Workbook with VBA Macro
Function SQL(dataRange As Range, CritA As String) As Variant
Application.Volatile
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim currAddress As String
currAddress = ActiveSheet.Name & "$" & dataRange.Address(False, False)
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT * FROM [" & currAddress & "]" & _
"WHERE [A] = '" & CritA & "' " & _
"ORDER BY 1 ASC"
rs.Open strSQL, cn
'SQL = rs.GetString
SQL = Application.Transpose(rs.GetRows)
Set rs = Nothing
Set cn = Nothing
End Function
спасибо, Rory. Это здорово! попробует. –