逐行异步执行宏

时间:2013-03-07 17:44:45

标签: excel vba bloomberg

我正在尝试修复我使用Bloomberg Excel加载项的问题。我每天都会为500多只股票填写31天的历史价格数据。

$ A $ K3 =“ACE US EQUITY”$ AL $ 3 =“= BDH(AK3,”PX_LAST“,$ D $ 1,$ C $ 1,”DTS = h“,”dir = h“)”$ C $ 1 =“= WORKDAY(TODAY(),0)”$ D $ 1 =“= BAddPeriods(C1,”NumberOfPeriods = -31“,”Per = wd“,”CDR = #A“)”

应该发生的是,在$ AL $ 3:$ BQ $ 3中,将有31天的价格。

即使Bloomberg可执行文件未运行,我也会打开工作簿,因为Bloomberg DDE会话将保持打开状态3天。

有时没有问题,当我第二天上班时,数据会向前移动一天。其他时候,大部分数据都丢失了,我不得不选择并刷新每个$ AL $ _字段。这个问题是由于某种原因,刷新是同步发生的,我认为这会对DDE连接和/或Excel造成严​​重破坏。导致缓慢/无更新。此外,如果我刷新整个工作表,一些公式将被静态数据覆盖!

我想要做的是创建一个宏:

  

1)清除$ AL $ 中的所有数据:$ BQ $& $ BS $ :$ CX $

     

2)设置$ AL $ _ =的值   “= BDH(AK $ _”,PX_LAST “$ d $ 1,$ C $ 1, ”DTS = H“, ”DIR = H“)”

     

3)等到数据填入$ AL $ :$ BQ $ 之后再去   $ AL $(+ 1):$ BQ $(+ 1);如果$ AM $ _有一个值,那么很可能数据有   在那一行填充。

     

4)然后当$ AL $ :$ BQ $ 完成时,对$ BS $ 执行相同操作:$ CX $

我一直在等待Bloomberg的支持,以便在一个多月内完成此请求,但没有结果。

我没有足够的经验来实现这一目标。

我使用录音机创建了一小段代码:

Sub PopulateData()
'
' PopulateData Macro 
'

'
Range("AL2:BQ2").Select
Selection.ClearContents
Range("AL2").Select
ActiveCell.FormulaR1C1 = _
    "=BDH(RC[-1],""PX_LAST"",R1C4,R1C3,""DTS=h"",""dir=h"")"
Range("AL2").Select
End Sub

我在录制时选择了刷新按钮,但未记录此操作。 谢谢你的期待。

1 个答案:

答案 0 :(得分:0)

一次运行公式一行的宏解决方案,然后使用值覆盖公式,以便在下一次迭代时不执行同步查询:

Sub CalculateLineByLine
   For Each c In Range("AL2:AL501")
      c.FormulaR1C1 = "=BDH(RC[-1],""PX_LAST"",R1C4,R1C3,""DTS=h"",""dir=h"")"
      Calculate
      Range(c.address, "BQ" & c.row)).Copy
      c.PasteSpecial xlPasteValues
   Next c
End Sub

我没有手动清除内容,因为我认为旧的数据只会被paste special覆盖。我希望这可以作为一种可能的解决方案。

如果我正确阅读了您的上一条评论,那么当公式设置为手动时,您希望按F9手动计算所有打开的工作簿。