Vba 在路透社检索到数据后继续

Vba 在路透社检索到数据后继续,vba,excel,reuters,Vba,Excel,Reuters,汤森路透Eikon使用: 我需要从路透社获得有关外汇现货价格的数据。用路透社公式很容易做到这一点。但是,我需要在VBA脚本中使用此数据。VBA脚本的一部分插入了公式,然后路透社检索数据,但这可能需要一段时间(10-20秒) 如何使VBA脚本暂停,直到reuters检索到数据?(路透社数据的单元格在前10秒内显示:“检索…” Range("B2").value = Application.Evaluate("RtGet(" & IDN & "," & RWAL &

汤森路透Eikon使用:

我需要从路透社获得有关外汇现货价格的数据。用路透社公式很容易做到这一点。但是,我需要在VBA脚本中使用此数据。VBA脚本的一部分插入了公式,然后路透社检索数据,但这可能需要一段时间(10-20秒)

如何使VBA脚本暂停,直到reuters检索到数据?(路透社数据的单元格在前10秒内显示:“检索…”

Range("B2").value = Application.Evaluate("RtGet(" & IDN & "," & RWAL & "," & MIDPRICE & "," & TYPENUM & ")")

此代码现在用于插入公式,其中RWAL是汇率标识符(例如EUR=)

我们需要使用application.run将代码中的RtGet函数用作工作表函数。因为它是工作表函数,所以在代码运行时不会检索数据

为了解决这个问题,我们使用Application.RTD.RefreshData从RTD服务器提取数据

Function getField(ric As String, field As String) As String
    Data = Application.Run("RtGet", "IDN", ric, field)
    Do While VBA.Left(CStr(Data), 3) = "Ret" 'ie loop while it is retrieving data
        Application.RTD.RefreshData
        DoEvents
        Data = Application.Run("RtGet", "IDN", ric, field)
        Debug.Print Data
    Loop
    getField = Data
End Function

Public Sub testGetField()
    Dim test
    test = getField("EUR=", "BID")
End Sub

您可以进行
Do-While
循环,该循环将重复类似于
Sleep 1000
的操作,直到单元格值发生变化(与存储在变量中的先前值相比)。Sleep(和wait)举起整个excel,对吗?这意味着公式也不再试图检索路透社的数据。你只需要一次价格快照,还是需要价格不断地流到excel工作表中?。函数
RtGet()
适用于后一种情况。另外,请使用您正在使用的桌面软件更新您的问题(例如,Reuters 3000 Xtra或Thomson Reuters Eikon)。我当前需要一个一次性快照(他们现在获取快照的方式是通过流式传输,然后复制粘贴值).我使用汤森路透Eikon如果您进行编码,您最好使用专有的汤森路透数据访问接口,如用于实时数据的AdxRtList。