【问题标题】:How to refresh/load RTD Bloomberg function (BDH) in excel in vba如何在 vba 中的 excel 中刷新/加载 RTD Bloomberg 函数 (BDH)
【发布时间】:2021-04-23 03:19:26
【问题描述】:

我想知道 VBA 代码中是否有办法强制彭博函数(在电子表格中)更新其值(任何 BDH 函数)

目标开发者面临类似问题/拥有彭博终端

我尝试了什么--

Application.RTD.RefreshData
Application.RTD.throttleInterval = 0
Application.CalculateFull

BDH 函数不会自行重新加载。

我现在可以刷新它们的唯一方法是:单击 BloomBerg 加载项功能区上的“刷新工作簿”按钮。

由于 Bloomberg 插件被锁定在 VBE 中,我找不到必要的代码。 我是否缺少任何彭博参考资料?任何彭博专家/用户可以指出我正确的方向吗?谢谢。

【问题讨论】:

  • 你如何调用彭博函数?除非您使用“实时”Bloomberg 字段,否则 Bloomberg 会缓存数据。单击功能区按钮将清除缓存,然后重新加载数据。使用 Bloomberg API,您需要执行相同的操作(例如 RefreshAllStaticData())。
  • @creamyegg 您好,感谢您的回复。所以我可以在 vba 中调用“RefreshAllStaticData()”作为功能区按钮“刷新工作簿”上的单击事件?另外,我在哪里可以找到这些信息?是否有这样的 vba 彭博参考链接?提前致谢
  • 是的,但您需要参考 Bloomberg API。看看 Bloomberg API 页面上的示例(我不记得页面的名称)。它应该会给你一些方向。
  • 抱歉,我可以提供我需要安装的 VBA Bloomberg API 的链接吗?所以我可以安装它。彭博网站上有很多 API。
  • 抱歉,我不知道参考的名称,也无法再访问彭博社。如果您有 Bloomberg Excel 加载项,那么您已经拥有它,因此它会在参考对话框中列出。

标签: vba excel bloomberg


【解决方案1】:

我通过在记事本中打开它在 xla 中搜索了关键字“刷新”。找到以下目标:

RefreshAllWorkbooks
blpmain.xla!RefreshAllStaticData
blpmain.xla!'RefreshWorkbookFundamentalsData
blp.xla!IsBlpRefreshAvailable

我一一试了, 前两个通过调用来工作:

Application.run "RefreshAllWorkbooks"
Application.run "RefreshAllStaticData"

但不要单独调用它们(我想这是因为我可以使用 Application.run 调用受保护的 PUBLIC 过程)

RefreshAllWorkbooks

RefreshAllStaticData

感谢大家的帮助

【讨论】:

  • 也是一个有趣的替代方案:stackoverflow.com/questions/7660971/… 但您的方法似乎更好(假设他们不经常更改代码)。
  • @assylias 这是一个解决方案。但考虑到我正在处理不同工作表中的约 200 个 BDH 函数。我不想清除所有受影响的工作表并在每个单元格中搜索 BDH 函数。 OP 的原始方法很接近,只需删除 blpmain.xla 部分就可以了
【解决方案2】:

我最近从 bbg chat 收到了这个答案。我想这就是我们都在寻找的……

bbg 帮助台:通常我们不会在帮助台上提供有关 VBA 的帮助,但我发现了以下内容。 您可以使用以下 VBA 命令刷新 BDx() 公式:

Refresh based on default option setting: Application.Run "RefreshData"  
Refresh current selection: Application.Run "RefreshCurrentSelection"
Refresh current worksheet: Application.Run "RefreshEntireWorksheet"
Refresh current workbook: Application.Run "RefreshEntireWorkbook"
Refresh all workbooks: Application.Run "RefreshAllWorkbooks"

注意:使用 VBA 宏刷新 Bloomberg 公式时, 触发刷新的宏正在运行时,公式无法完成请求数据。 您必须使用 Application.OnTime() 来安排第二个函数在触发刷新退出的子例程之后运行。 以下代码 sn -p 演示了刷新所有工作簿的 VBA 代码,然后在调用 processSheet 子例程之前有 10 秒的延迟:

    Sub refreshSheet()
        Application.Run "RefreshEntireWorksheet"  
        Application.OnTime (Now + TimeValue("00:00:10")), "processSheet"
    End Sub


    Sub processSheet()
        ' perform processing here
    End Sub

【讨论】:

    【解决方案3】:

    我从来没有做到你要求的。我发现获取最新数据的唯一可靠方法是使用 BLP_DATA_CTRLLib.BlpData 直接从 VBA 调用 API,等待答案,然后将结果放入工作表中。

    关于打开受密码保护的 VBA 代码,google 或 stackoverflow 搜索应该会给你答案。

    【讨论】:

    • LOL :) 我明白,但你认为彭博会批准吗?想象一下,如果您创建了一个加载项并用密码保护它,如果有人讨论如何破解它,您会同意吗?)......只是一个想法......
    • 谢谢,我认为您的解决方案是从 Excel 调用 Bloomberg API 的标准方式。我的问题是我的用户在 excel 上生成了数百个 BDH 函数。如果我使用您的方法,通用方法是覆盖彭博的 UDF?我不是通过破解 .xla 文件找到的解决方案。我只是打开记事本编辑 xla 文件,然后搜索所有“刷新”关键字。发现“RefreshAllStaticData”和“RefreshAllWorkbooks”都有效!不管怎么说,还是要谢谢你。我将在 6 小时内给你赏金(SO 限制)@SiddharthRout 也感谢你的帮助,请参阅上面的答案
    • @Larry:我想提供帮助并且会提供帮助,但不知道从哪里下载插件,因此我问你从哪里下载它,但是当你问我有关破解受密码保护的 xla 文件的问题。很高兴你的问题得到解决:)
    • @Larry 老实说,我认为我不应该得到这个赏金。至于“如何安装API”:install Bloomberg,API 自带。对于 Hello World 示例,最佳位置是 WAPI (仅对订阅者可用,从终端)。
    【解决方案4】:

    我发现更改 BDH 公式中的某些内容会导致刷新。查找并替换 = 符号即可。

    Public Sub Recalc()
        Dim ws As Worksheet, FormulaCells As Range, c As Range
        Application.Calculation = xlCalculationManual
        For Each ws In ThisWorkbook.Worksheets
            On Error Resume Next
            ws.Activate
            Set FormulaCells = ws.UsedRange.SpecialCells(xlCellTypeFormulas).Cells
            If Err = 0 Then
                For Each c In FormulaCells
                    c.Formula = Replace(c.Formula, "=", "=")
                Next 'c
            Else
                Err.Clear
            End If
        Next 'ws
        Application.Calculation = xlCalculationAutomatic
    End Sub
    

    【讨论】:

      【解决方案5】:

      这对我有用:

      WS.Select
      WS.Range("A5").Select 'the cell that contains the BDH function
      Application.Run "RefreshCurrentSelection"
      

      【讨论】:

        猜你喜欢
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-23
        • 1970-01-01
        • 2016-12-29
        • 2015-05-13
        • 2013-12-03
        相关资源
        最近更新 更多