asynchronous执行一个macros的行

我正试图解决一个问题,我与彭博社加载在Excel中。 我每天填写31天的500多只股票的历史价格数据。

$ 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天的价格。

即使彭博的可执行文件没有运行,我也会在彭博DDE会话保持开放3天的情况下让工作簿保持打开状态。

有时候没有问题,第二天上class的时候,数据向前移动了一天。 其他时候,大部分数据都丢失了,我不得不select并刷新每个$ AL $ _字段。 这个问题是出于某种原因刷新正在同步发生,我认为这是DDE连接和/或Excel造成的浩劫。 导致缓慢/没有更新。 另外,如果我刷新整个工作表,一些公式将被静态数据覆盖!

我想要做的是创build一个macros,它将:

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 $做同样的操作

我一直在等待彭博的支持,在一个多月的时间里完成这个请求,没有任何结果。

我没有足够的经验去做这件事。

我使用logging器创build的代码数量非常less:

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 

当我在录制时select刷新button时,此操作未被录制。 感谢您的期待。

一次运行公式一行的macros解决scheme,然后用这些值覆盖公式,所以在下一次迭代中不会执行同时查询:

 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 

我没有手动清除内容,因为我认为旧的数据只会被粘贴特殊覆盖。 我希望这会作为你的一个可能的解决scheme。

如果我正确地阅读了您的最后一条评论,则当公式设置为手动时,您正在按F9手动计算所有打开的工作簿。