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