2014-02-17 4 views
0

В принципе, мне удалось получить данные из базы данных в набор записей с помощью rs = db.openrecordset (sql). Как вставить данные в ячейку с помощью UDF? Кто-то предложил формулу массива. Затем, как я могу изменить данные набора записей в массив? Я знаю, что могу использовать copyfromrecordset. Но он не работает в UDF.UDF для вставки данных набора записей в VBA

спасибо.

+0

Можете ли вы предоставить фрагмент кода из UDF? Вызывает ли ошибка? Вы просто хотите заполнить одну ячейку или пытаетесь вернуть набор данных с несколькими столбцами/строками? –

+0

То, что я пытаюсь достичь, это то, что: i type = get_data() в диапазоне ячеек и нажмите ctrl + shift + enter. данные должны быть вставлены в эти ячейки. То, что я делаю сейчас, это то, что: я использую метод getRows для изменения набора записей в 2D-массив, но по какой-то причине я могу получить только первую строку базы данных, sql правильный. –

+0

Установить db = OpenDatabase (DBFullName) Установите rs = db.OpenRecordset («SELECT ID, Date, Price, CMF, Ticker FROM SGXIO_Database WHERE cmf Между 0 И 43 И контракт между # 1/1/1900 # И # 1/1/2099 # И Date Between # 1/1/1900 # И №1/1/2099 # И цена не равно нулю ") дим обр Как вариант обр = rs.GetRows (rs.RecordCount) MsgBox (rs.RecordCount) «BDD является имя функции bdd = arr Set rs = Nothing db .Закрыть Установить db = Nothing –

ответ

0

Это работает для меня с Excel 2003, ADO 2.8:

Function getArray(strSql As String) As Variant 
    Dim rs As ADODB.Recordset 
    Dim i As Integer 

    getArray = "" 

    Set rs = getRs(strSql) 
    With rs 
     .MoveFirst 
     Do 
      For i = 0 To .Fields.Count - 1 
       getArray = getArray & CStr(.Fields(i).Value) & " " 
      Next i 
      getArray = getArray & vbLf 
      .MoveNext 
     Loop Until .EOF = True 
     .Close 
    End With 
    Set rs = Nothing 
End Function 

Он перебирает все строки/полей записей и возвращает «массив» значений. Он может использоваться как функция книги без CSE.

Это, как я делаю мое подключение к БД:

Function getRs(strSql As String) As ADODB.Recordset 
    Dim strCn As String 

    strCn = "Provider=sqloledb;Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;" 

    Set getRs = New ADODB.Recordset 
    getRs.Open strSql, strCn, adOpenStatic, adLockReadOnly 
End Function 

И это пример того, как я мог бы получить некоторые данные, используя getArray() на основе критериев, из одной клетки и возвращать результаты в другой (одиночный).

Function getEmpDataByLastName(strLastName As String) As Variant 
    Dim strSql As String 

    strSql = "" 
    strSql = strSql & "SELECT BusinessEntityID, PersonType, FirstName, COALESCE(MiddleName,'') AS MiddleName " 
    strSql = strSql & "FROM Person.Person " 
    strSql = strSql & "WHERE LastName = '" & strLastName & "' " 
    strSql = strSql & "ORDER BY FirstName " 

    getEmpDataByLastName = getArray(strSql) 
End Function 
Смежные вопросы