VBAコードにブルームバーグ関数(スプレッドシート内)を強制してその値を更新する方法があるかどうかを知りたい(任意のBDH関数)
ターゲット開発者が同様の問題に直面している/ブルームバーグターミナルを持っている
私は何を試しましたか?
Application.RTD.RefreshData
Application.RTD.throttleInterval = 0
Application.CalculateFull
BDH機能は、それらを再ロードしません。
現在、これらを更新できる唯一の方法は、BloomBergアドインのリボンの[WorkBookを更新]ボタンをクリックすることです。
ブルームバーグアドインはVBEでロックされているため、必要なコードを見つけることができません。ブルームバーグリファレンスがありませんか?ブルームバーグの専門家/ユーザーは私を正しい方向に向けることができますか?ありがとう。
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
助けてくれてありがとう
私はあなたが求めていることをなんとかしたことがありません。最新のデータを取得するための唯一の信頼できる方法は、BLP_DATA_CTRLLib.BlpData
を使用してVBAから直接APIを呼び出し、回答を待ち、結果をシートに入れることです。
パスワードで保護されたVBAコードを開くことに関して、グーグルまたはスタックオーバーフロー検索があなたに答えを与えるはずです。
これは私にとってはうまくいきます:
WS.Select
WS.Range("A5").Select 'the cell that contains the BDH function
Application.Run "RefreshCurrentSelection"
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