【问题标题】:UDF to retrieve data from access data baseUDF 从访问数据库中检索数据
【发布时间】:2014-02-14 05:54:54
【问题描述】:

如何创建 UDF 以从 access 数据库中检索数据。

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

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

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

【问题讨论】:

  • 嗨,Jack,我相当肯定这是不可能通过 UDF 实现的。函数不能更改所选单元格之外的任何单元格。最好的办法是将记录集作为数组函数返回。 Bloomberg 有一个监视 Excel 的数据服务,它是数据服务而不是在下面的单元格中放置额外数据的函数。据我了解,这是一个极其难以实施的过程。我猜你可以通过实现一个聪明的单元格更改事件来产生某种黑客行为,但我怀疑它是否值得。
  • 顺便说一句,一些问题展示了如何编写返回记录集的数组函数的示例(来自 SQL,但我认为您可以更改连接字符串中的提供程序以获取访问权限):@987654321 @ 或 stackoverflow.com/questions/17597485/…
  • 嗨。担。非常感谢您的帮助。我的老板说我可以通过某种数组函数来做到这一点。真的吗?你是说没有办法将数据粘贴到我输入自己的 BDH 函数的单元格下方,而不会像任何事件更改一样进行黑客攻击。谢谢。
  • 有人建议使用 Ctrl+Shift+Enter。我仍在努力寻找解决方案。 =)

标签: excel vba ms-access bloomberg


【解决方案1】:

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

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

例如

【讨论】:

    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 2017-11-11
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多