我有一个for循环,它遍历证券列表并获得如下历史数据:
diter = 0
field = "px_last"
For Each d In dates
diter = diter + 1
For s = 1 To numb_sec
bbticker = securities(s)
wsSec.Range(cl & diter).Formula = _
"=BDH(""" & bbticker & """,""" & field & """,""" & d & """,""" & d & """)"
wsSec.Calculate
Next s
Next d
显然,这导致数据在下一次安全启动之前未加载 .
由于我在此循环后保存文件,因此每个单元格只能获得 #N/A Requesting Data
.
因此,我正在寻找一种方法,等待提取完成后再继续下一个安全和日期 .
我在网上看了一下,发现你可以使用:
Application.OnTime Now + TimeValue("00:00:01"), "NextFunction"
The problem with this :此方法仅在1秒后启动另一个功能 .
-
怎么能将这个应用到我的代码中?也许把它放在循环的最后还是有更好的方法从VBA中的Bloomberg获取数据?
-
此外,如果我不知道取出需要多长时间,我该怎么办,现在我等待1秒,但也许应该更多?
2 回答
您每次插入
BDH
公式时都试图计算工作表 .另一种方法(未经测试,因为我没有Bloomberg库)是执行以下操作:
禁用事件
循环插入
BDH
公式但是还没有计算...重新启用事件
调用
Application.Calculate
将进行工作表计算等到计算结束 - 见here
保存工作表
示例代码将是这样的(再次,未经测试):
离布隆伯格怎么样?!他和我都去了约翰霍普金斯大学,我喜欢这个人,因为他是纽约市市长12年,但是我认为没有任何意义可以为你得到的东西付出很多钱自由 .
从 Headers 为“获取Excel电子表格以从Google财经下载批量历史股票数据”的链接下载该文件
http://investexcel.net/multiple-stock-quote-downloader-for-excel/