UDF将记录集数据粘贴到VBA中

时间:2014-02-17 02:56:12

标签: vba

基本上,我已经设法通过数据库将数据从数据库检索到记录集 RS = db.openrecordset(SQL)。如何通过UDF将数据粘贴到单元格中?有人提出了数组公式。那么我如何将记录集数据更改为数组?我知道我可以使用copyfromrecordset。但它在UDF中不起作用。

谢谢。

1 个答案:

答案 0 :(得分: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