我想将数据从一张纸复制并粘贴到另一张纸上。原始数据来自Bloomberg API函数。我发现Bloomberg数据单元仅在宏完成运行后更新。我尝试构建一个私有函数,让我在复制之前更新静态数据。这是我的代码:
Private Sub ProcesData()
Application.Run
Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData")
End Sub
Sub Macro3()
Dim i As Integer
i = 1
Do Until i > 2
Sheets("Sheet1").Activate
Cells(1, 3).Value = Cells(i, 1)
i = i + 1
Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData")
Range("C4:E181").Select
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row
Range("A" & lMaxRows + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Loop
End Sub
答案 0 :(得分:1)
因此,当您使用函数调用执行Bloomberg请求时,单元调用站点将收到回调并刷新数据。
问题是,w.r.t。自动化,数据可以部分返回,您必须等到完成后再继续处理数据。
因此,此解决方案有3种方法。
我建议,如果可能的话,选择3。虽然需要更多努力,但代码变得更加清晰。当您的工作簿在结构等方面变得更加复杂时,选项1.和2.可能很难调试。
如果你搜索你的彭博帮助(那个史无前例的'F1 F1'帮助服务应该能指出你正确的方向。在我看来,这是迄今为止最令人印象深刻的帮助系统!)布隆伯格确实有一些例子演示上面强调的方法。
所以,随着手头的问题,并最终回答你的问题:) 我会重构您的代码以实际执行最初执行计算的函数调用(它将调用您对Bloomberg的请求)。然后进入递归函数,该函数调用自身直到数据中没有错误。然后,您将复制数据。
希望有所帮助。