2016-01-29 127 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