2016-01-29 162 views
1

我看到這裏有一些舊東西,但我希望有人找到了新的解決方案。更新工作表後刷新BDH。彭博。 Vba

與我的套路,我更新3個工作簿的日期,使BDH命令獲取最新的價格,然後我從這些工作簿3的結果複製到一個單獨的總結工作簿。但是,正如常見的那樣,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實現這一目標。彭博公式在宏暫停時不會更新。彭博社有關WAPI的常見問題部分有例子。下面是從那裏你可以找到一個示例電子表格。


[下載示例!在此下載一個可用的Excel VBA示例] 我們的任何BDx()函數系列返回的數據都是異步的。因此,如果您的Excel VBA中的應用[宏觀]取決於返回彭博社的數據,我們建議您結合下面的邏輯到您的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」相當枯燥的工作。 任何方式我可以從所有3個工作簿中選擇一次,然後更新? – Ken

+0

如上更新。以K3 = tradeday更新日期,L3 = Prevtradeday,然後刷新BDH選擇。 但後來我需要它做了3個或4個工作簿 – Ken