我正在使用excel做一些数据分析工作。
情况是这样的:
我使用一些excel插件组件从远程站点获取数据。
例如,将=get_the_latest_data(ID)放在A1中,则将调用此函数,并将ID的数据填充在A2A11中。
我的目标是

for each id in id_array
    sheet1.range("a1") = get_the_latest_data(id)
    create a new sheet named id
    save data from a2 to a11 to thi new sheet
next


我的问题是get_the_latest_data函数需要一些时间才能从远程获取所有数据。因此,在我的代码中,新工作表无法获得正确的结果。我尝试使用application.wait,然后再将数据从sheet1复制到新工作表。
但这没用。

从远程获取所需数据后,有什么方法可以确保将数据复制到新工作表吗?顺便说一句,我无权访问get_the_latest_data的源代码。

最佳答案

通常,VBA仅在完全完成前一步之后才执行下一步。除非该调用触发某些后台操作(例如,刷新启用了“背景刷新”的数据连接)。

您可以执行以下操作来解决此问题:

禁用后台刷新:如果您查看连接的属性,请取消选择“启用后台刷新”

等待直到刷新完成,然后执行特定于数据查询的检查:通过以下方式修改代码:

Range(“ A11”)。Clear'启用检查
subCallToTriggerDataLoadHere
While Range(“ A11”)。Value“”'或其他任何特定检查,以确保刷新完成
活动事件
温德
...


使用查询的AfterRefresh事件:See this post for details

08-26 02:44