可以使用For ..循环迭代刷新Bloomberg数据吗?

时间:2017-11-04 05:02:35

标签: vba loops bloomberg

我正在对800份信用衍生品合约的样本进行分析。我正在编写一个我想要执行以下操作的宏:

  1. 将8个代码复制到预定义的BDH()公式中。
  2. 对BDH()返回的数据运行计算。
  3. 将这些计算的结果复制并粘贴到另一个标签中。
  4. 将接下来的8个代码复制到BDH()公式中并重复。
  5. 我搜索了网站(以及MrExcel,Chip Pearson的网站,OzGrid等)并收集了我想要在BDH()函数刷新后运行的任何子等等,需要成为其中一部分新子 - 请参阅链接hereherehere,了解StackExchange上的类似问题。我已经多次修改了我的脚本,但是我很难让它运行起来。

    我认为问题在于我正在使用For ...循环,需要在循环的每次迭代期间刷新BDH()。代码如下。

    Dim i As Long
    Dim wb As Workbook
    Dim issuer As Range
    Dim issuer_2 As Range
    Dim tickers As Range
    Dim data As Range
    Dim hVaR As Range
    Dim outputcol As Range
    
    Sub GethVaR()
    
    With Excel.Application
       .DisplayAlerts = False
       .ScreenUpdating = False
       .EnableEvents = False
       .Calculation = xlCalculationAutomatic
    End With
    
    Set wb = ThisWorkbook
    Set issuer = wb.sheets("Tickers").Range("A2")
    Set tickers = wb.sheets("Tickers").Range("V2:AC2")
    Set issuer_2 = wb.sheets("Data").Range("W2:W9")
    
    For i = 0 to 99
    
    wb.Sheets("Tickers").Select
    tickers.Offset(i * 1, 0).Select
    Set data = Selection
    data.Copy
    
    wb.Sheets("Data").Select
    Range("D6").PasteSpecial xlPasteValuesAndNumberFormats
    issuer_2 = issuer.Offset(i * 1, 0)
    
    Application.Run ("RefreshEntireWorkbook")
    
    CheckData
    
    Next i
    
    End Sub
    
    Sub CheckData()
    
    Set wb = ThisWorkbook 'not sure why I have to do this twice, seems to help the code run
    Set hVaR = wb.Sheets("Data").Range("W2:AB9")
    Set outputcol = wb.Sheets("Output").Range("A1")
    
    If Application.WorksheetFunction.Countifs(ActiveWorkbook.Sheets("Data"). _
    Range("C7").CurrentRegion, "#N/A Requesting Data...") > 0 Then
    
    Application.OnTime (Now + TimeValue ("00:00:01")), "CheckData"
    
    End If
    
    wb.Sheets("Data").Select
    hVaR.Select
    hVaR.Copy
    
    wb.Sheets("Output").Select
    
    If Application.WorksheetFunction.CountA(Range("A:A")) < 2 Then
    
    outputcol.Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats
    
    Else
    
    outpulcol.End(xlDown).PasteSpecial xlPasteValuesAndNumberFormats
    
    End If
    
    End Sub
    

    如上所述,“hVaR.copy”最终将相同的结果一遍又一遍地粘贴到“输出”选项卡中,即使Application.OnTime方法位于不同的子目录中也是如此。我认为这是因为第一个sub有一个调用第二个sub的循环,其中使用了Application.OnTime方法。我想不出另一种方法来循环遍历各组代码并对它们进行计算。

    有没有办法使用For循环遍历800代码并保留随后的计算结果?或者我被BDH()刷新异步并冻结循环中所有代码的事实所困扰?我熟悉通过将其分解为两个子实现刷新的WAPI示例;我还没有找到一个例子,可以每次使用不同的代码刷新数据,然后保存结果。

    非常感谢任何和所有建议,谢谢。

0 个答案:

没有答案