7

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

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

我试过什么——

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

BDH 功能不会自行重新加载。

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

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

4

5 回答 5

9

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

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

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

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

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

RefreshAllWorkbooks

或者

RefreshAllStaticData

感谢所有的帮助

于 2013-01-17T04:23:37.257 回答
3

我最近从 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() 安排第二个函数在触发刷新退出的子例程之后运行。以下代码片段演示了刷新所有工作簿的 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
于 2021-04-22T19:19:26.893 回答
1

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

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

于 2013-01-16T17:44:54.430 回答
1

我发现更改 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
于 2015-02-25T18:46:34.847 回答
1

这对我有用:

WS.Select
WS.Range("A5").Select 'the cell that contains the BDH function
Application.Run "RefreshCurrentSelection"
于 2018-10-31T09:15:55.743 回答