首页 文章

如何在vba中的excel中刷新/加载RTD Bloomberg函数(BDH)

提问于
浏览
7

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

Targeting Developers have faced similar issue/ have Bloomberg terminal

我试过了什么 -

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

BDH功能不会重新加载它们 .

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

由于Bloomberg加载项在VBE中被锁定,我无法找到必要的代码 . 我错过了任何彭博参考吗?任何彭博专家/用户都能指出我正确的方向吗?谢谢 .

4 回答

  • 6

    我通过在记事本中打开它来搜索xla中的关键字“refresh” . 找到了以下目标:

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

    我逐个尝试了它们,前两个通过调用:

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

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

    RefreshAllWorkbooks
    

    要么

    RefreshAllStaticData
    

    谢谢你的帮助

  • 1

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

    关于打开受密码保护的VBA代码,谷歌或stackoverflow搜索应该给你答案 .

  • 0

    我发现改变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
    
  • 1

    这对我有用:

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

相关问题