excel vba同步问题
我正在使用Excel来做一些数据分析工作。 情况是这样的:我使用一些excel插件componnets从远程站点获取数据。 例如,在A1
put =get_the_latest_data(ID)
,那么这个函数将被调用,并且ID的数据将被填充在A2
到A11
。 我的目标是
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
函数需要一些时间才能从远程获取所有数据。 所以,在我的代码中,新的表单不能得到正确的结果。 我试图在将sheet1中的数据复制到新工作表之前使用application.wait。 但它没有工作。
有什么方法可以确保在从远程获取所需数据之后将数据复制到新工作表中? 顺便说一句,我没有访问get_the_latest_data
的源代码。
通常情况下,VBA只在前一步完成后才执行下一步。 这是除非调用触发一些后台操作(例如刷新一个具有“后台刷新”启用的数据连接。
您可以执行以下操作来解决问题:
禁用后台刷新:如果您查看连接的属性,请取消选中“启用后台刷新”
等到数据查询特定检查完成刷新为止:按以下方式修改您的代码:
范围(“A11”)。清除“启用检查 subCallToTriggerDataLoadHere Range(“A11”)。Value“”'或者任何其他特定的检查来查看刷新完成 的DoEvents 蜿蜒 ...
使用查询的AfterRefresh事件: 请参阅此帖以获取详细信息
对于第三方数据供应商来说,这似乎是一个典型的例子,他们的generics数据请求是非同步的 ,并不能很好地向用户公开。 在这种情况下,您可能需要与您的供应商确认您所调用的方法的行为。 必须至less有一个boolean
types的variables被设置为至less要selectasynchronous或同步请求/检索。
例如。 如果您要发送一个指数代码来获得前10名成员,那么这种方法现在是收集所有的指数代号,并与所有的数据拍摄回来。 因此,检查返回的数据是否可以拆分,例如,它是一个multidimensional array,您可以根据id
将数据分离到工作表中。 否则,请与这个应用程序的API开发人员交谈,因为DoEvents
可能太弱,无法处理这个问题。
我build议你使用anarrayList / collection项来保存每个id的方法返回的数据。 一旦完成,您可以开始创build工作表,因为您已经在本地捕获了数据。
Dim al as Object Set al = CreateObject("System.Collections.ArrayList") for each id in id_array al.add get_the_latest_data(id) '--possibly returning a variant next '--for each item in arrayList then you create a sheet by outputing the data for i = 0 to al.Count '--Create new sheet put your code here '--transpose the data Sheets(i+1).Range("A2").Resize(UBound(al(i))) = Application.Transpose(al(i)) Next i