我正在尝试修复我使用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
我在录制时选择了刷新按钮,但未记录此操作。 谢谢你的期待。
答案 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手动计算所有打开的工作簿。