2014-02-14 46 views
2

如何创建用于从访问数据库检索数据的UDF。用于从访问数据库检索数据的UDF

我可以通过sql查询使用vba &点击按钮来检索数据。数据将在记录集中。我只需将它粘贴到任何单元格。

现在我的问题是:如何创建一个用户定义的功能来做同样的事情。也就是说,当我在任何Excel单元格中输入=bdh(pricing date,product tag)之类的东西时,所有数据都会返回并粘贴到我输入自定义公式的单元格下面。

如果您熟悉bloomberg API,我想构建一个类似于bdh函数的函数。

+0

杰克您好,我相当肯定,那是不可能通过一个UDF做。函数不能更改所选单元格外的任何单元格。你最好的选择是将一个记录集作为一个数组函数返回。彭博社提供的数据服务可以监视Excel,它是数据服务,而不是将额外数据放在下面的单元格中的功能。据我了解,这是一个非常艰难的实施过程。你可以通过实施一个聪明的细胞更换事件来产生某种黑客行为,但我怀疑这是值得的。 – Dan

+0

BTW一些​​问题,显示如何编写一个数组函数,返回一个记录集(从SQL,但我认为你可以只是改变提供商在连接字符串获取访问):http://stackoverflow.com/questions/15927485/return-dates-not-strings-from-an-adodb-query或http://stackoverflow.com/questions/17597485/using-the-same-parameter-twice – Dan

+0

嗨。担。非常感谢您的帮助。我的老板说我可以通过某种数组功能来做到这一点。真的吗?你是否说没有办法将数据粘贴到单元格下方,我没有像任何事件更改那样进入我自己的BDH函数。谢谢。 –

回答

2

也许你可以解决一个更简单的想法吗?例如下面的代码片段取决于用户选择两个输入单元来控制输出。你可以添加一个菜单项来运行代码。

Sub GetMSAccess() 
Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim selrange As Range 

    Set selrange = Selection 

    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Z:\Docs\Test.accdb" 

    cn.Open strCon 

    sSQL = "SELECT var1, var2 FROM table2 " _ 
    & "WHERE var1='" & selrange.Cells(1, 1).Value _ 
    & "' AND var2=" & selrange.Cells(1, 2).Value 
    rs.Open sSQL, cn 

    ActiveCell.Offset(1, 0).CopyFromRecordset rs 
End Sub 

例如

select cells