在VBA中粘贴记录集数据的自定义项

在VBA中粘贴记录集数据的自定义项,vba,Vba,基本上,我已经通过 rs=db.openrecordsetsql。如何按自定义项将数据粘贴到单元格中?有人建议使用数组公式。那么如何将记录集数据更改为数组?我知道我可以使用copyfromrecordset。但它在UDF中不起作用 谢谢。这是我使用Excel 2003,ADO 2.8: Function getArray(strSql As String) As Variant Dim rs As ADODB.Recordset Dim i As Integer get

基本上,我已经通过 rs=db.openrecordsetsql。如何按自定义项将数据粘贴到单元格中?有人建议使用数组公式。那么如何将记录集数据更改为数组?我知道我可以使用copyfromrecordset。但它在UDF中不起作用


谢谢。

这是我使用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的情况下用作工作簿函数

以下是我建立db连接的方式:

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

您能提供UDF中的代码片段吗?它会抛出错误吗?您是只想填充一个单元格还是试图返回多列/行数据集?我试图实现的是:i type=获取单元格范围内的数据,然后单击ctrl+shift+enter。数据应该粘贴到这些单元格中。我现在做的是:我使用getRows方法将记录集更改为2D数组,但由于某些原因,我只能获取数据库的第一行,sql是正确的..Set db=OpenDatabaseDBFullName Set rs=db.OpenRecordsetSELECT ID、日期、价格、CMF、,SGXIO_数据库中的股票代码,其中cmf介于0和43之间,合约介于1900年1月1日和2099年1月1日之间,日期介于1900年1月1日和2099年1月1日之间,价格不为空,因为变量arr=rs.GetRowsrs.RecordCount MsgBox rs.RecordCount'bdd是函数名bdd=arr Set rs=NothingOk,我明白了。由于需要多行和多列,CopyFromRecordset应该可以正常工作。。。这是我经常用的。我觉得我错过了一些东西。您是否希望根据粘贴get_data函数的单元格运行不同的查询?我使用的是用户定义的函数,我不想使用任何方法来操作任何其他单元格。我现在要做的是将记录集数据更改为数组格式,并使用数组公式调用我的函数。除了使用recordset.movelast和recordset.count以及recordset.movefirst方法之后,我正在解决大部分问题。recordset.getrows仅返回第一行数据。。