web-dev-qa-db-fra.com

Comment actualiser/charger la fonction Bloomberg RTD (BDH) dans Excel dans vba

J'aimerais savoir s'il existe un moyen dans le code VBA de forcer les fonctions de bloomberg (dans le tableur) à mettre à jour sa valeur (toutes les fonctions BDH)

Cibler les développeurs ont été confrontés au même problème/ont un terminal Bloomberg

Qu'est-ce que j'ai essayé--

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

La fonction BDH ne se recharge pas automatiquement. 

La seule façon dont je peux les actualiser maintenant est la suivante: je clique sur le bouton "Actualiser le classeur" sur le ruban du complément BloomBerg. 

Le complément Bloomberg étant verrouillé dans VBE, je ne parviens pas à trouver le code nécessaire. Me manque-t-il d'une référence Bloomberg? Est-ce qu'un expert/utilisateur Bloomberg peut me diriger dans la bonne direction? Merci. 

7
Larry

J'ai fait une recherche du mot clé "refresh" dans la xla en l'ouvrant dans le bloc-notes. Trouvé les cibles suivantes: 

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

Je les ai essayées une à une, Les 2 premières œuvres en appelant: 

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

Mais ne pas les appeler seuls (je suppose que c'est parce que je peux en quelque sorte appeler une procédure PUBLIC protégée en utilisant Application.run)

RefreshAllWorkbooks

ou

RefreshAllStaticData

Merci pour votre aide

6
Larry

Je n'ai jamais réussi à faire ce que vous demandez. La seule méthode fiable que j'ai trouvée pour obtenir des données à jour consiste à appeler l'API directement à partir de VBA avec BLP_DATA_CTRLLib.BlpData, à attendre la réponse et à placer le résultat dans une feuille.

En ce qui concerne l’ouverture de code VBA protégé par mot de passe, une recherche google ou stackoverflow devrait vous donner votre réponse.

1
assylias

J'ai trouvé que changer quelque chose dans la formule BDH provoquerait un rafraîchissement. Rechercher et remplacer le signe = suffirait.

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

Cela fonctionne pour moi:

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