web-dev-qa-db-ja.com

VBAのExcelでRTDブルームバーグ関数(BDH)を更新/ロードする方法

VBAコードにブルームバーグ関数(スプレッドシート内)を強制してその値を更新する方法があるかどうかを知りたい(任意のBDH関数)

ターゲット開発者が同様の問題に直面している/ブルームバーグターミナルを持っている

私は何を試しましたか?

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

BDH機能は、それらを再ロードしません。

現在、これらを更新できる唯一の方法は、BloomBergアドインのリボンの[WorkBookを更新]ボタンをクリックすることです。

ブルームバーグアドインはVBEでロックされているため、必要なコードを見つけることができません。ブルームバーグリファレンスがありませんか?ブルームバーグの専門家/ユーザーは私を正しい方向に向けることができますか?ありがとう。

7
Larry

Xlaで「refresh」というキーワードをメモ帳で開いて検索しました。次のターゲットが見つかりました:

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

私はそれらを1つずつ試してみました。最初の2つは次のように呼び出して動作します。

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

しかし、それらを単独で呼び出すのではありません(Application.runを使用して、保護されたPUBLICプロシージャをなんとかして呼び出すことができるためです)

RefreshAllWorkbooks

または

RefreshAllStaticData

助けてくれてありがとう

6
Larry

私はあなたが求めていることをなんとかしたことがありません。最新のデータを取得するための唯一の信頼できる方法は、BLP_DATA_CTRLLib.BlpDataを使用してVBAから直接APIを呼び出し、回答を待ち、結果をシートに入れることです。

パスワードで保護されたVBAコードを開くことに関して、グーグルまたはスタックオーバーフロー検索があなたに答えを与えるはずです。

1
assylias

これは私にとってはうまくいきます:

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

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
RECosgrove