2016-01-29 2 views
1

Я вижу, что есть некоторые старые вещи, но я надеюсь, что кто-то нашел новое решение.Обновите лист BDH после обновления. Bloomberg. Vba

с моей рутиной, я обновляю даты в 3 книгах, так что команды BDH получают самые последние цены, а затем копирую результаты из этих трех книг в отдельную сводную книгу. Однако, как обычно, функция BDH не обновляется и не обновляется даже после временной паузы.

Каковы последние результаты по обновлению или повторному запросу команд BDH до того, как я скопирую их в лист результатов?

===========

Twenty.Worksheets("Portfolio_2016").Activate 
[K3].Value = TradeDay 
[L3].Value = PrevTradeDay 

'Japan.Worksheets("Portfolio_2016").Activate 
'[K3].Value = TradeDay 
'[L3].Value = PrevTradeDay 

'AAR.Worksheets("Portfolio_2016").Activate 
'[K3].Value = TradeDay 
'[L3].Value = PrevTradeDay 

Call RefreshStaticLinks 

End Sub 

Public Sub RefreshStaticLinks() 

Call Twenty.Worksheets("Portfolio_2016").Range("K7:Q26").Select 
Call Application.Run("RefreshCurrentSelection") 
Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData") 

End Sub 

Private Sub ProcessData() 

Dim c As Range 

For Each c In Selection.Cells 
    If c.Value = "#N/A Requesting Data..." Then 
     Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData") 
     Exit Sub 
    End If 
Next c 

Call CopyPaste 

End Sub 

ответ

3

Вы должны использовать Application.OnTime для достижения этой цели. Формулы Bloomberg не будут обновляться, пока макрос приостановлен. В разделе часто задаваемых вопросов о WAPI в Bloomberg есть примеры. Ниже приведена таблица, в которой вы также найдете пример таблицы.


[Пример загрузки! Загрузите рабочий пример Excel VBA здесь] Данные, возвращаемые любым из наших семейств функций BDx(), являются асинхронными. Поэтому, если ваше приложение Excel VBA [macro] зависит от возвращенных данных Bloomberg, мы рекомендуем включить в ваш код VBA следующую логику, которая по существу приостанавливает ваше приложение, пока данные будут заполнены в ваших ячейках Excel:

Option Explicit 
Private Const MAXROWS = 25 

Sub fillFormula() 

Range("B2:B" & MAXROWS).Clear 
Range("B2").Formula = "=BDP($A2,B$1)" 
Range("B2").AutoFill Range("B2:B" & MAXROWS), xlFillDefault 
checkStatus 

End Sub 

Sub checkStatus() 

Dim i 

For i = 2 To MAXROWS 

' Check to make sure that the cells are NOT requesting data 
If "#N/A Requesting Data..." = Cells(i, 2) Then 

Application.OnTime (Now + TimeValue("00:00:02")), "checkStatus" 
Exit Sub 

End If 

Next i 

MsgBox "We just finished getting the values" 
' Add code here that would process the data now that it's updated 

End Sub 

Приведенный выше код может быть добавлен в пустой модуль и следующий код будет добавлен в обработчик события щелчка, например, кнопки на листе: fillFormula

+0

Найдено, что помощь нить на WAPI. Cheerss. – Ken

+0

Получил его работу для одной книги. Однако мне нужно обновить все 3 книги. Это делает использование «refreshcurrentselection» довольно утомительной работой. В любом случае я могу выбрать из всех трех книг сразу, а затем обновить? – Ken

+0

Как обновлено выше. Обновление дат по K3 = tradeday, L3 = Prevtradeday, а затем обновление BDH. Но тогда мне нужно это сделать для 3 или 4 книг – Ken

 Смежные вопросы

  • Нет связанных вопросов^_^