我有一个包含4个工作表的电子表格,每个工作表都连接到一个电源查询,该查询连接到OLEDB数据库并运行select以将数据导入工作簿。
我正在尝试自动刷新查询。
我在工作簿中有VBA
- 禁用后台刷新,
- 运行Workbook.RefreshAll,
- 将后台刷新重置为true(因为我需要这个以便自动化软件能够首先运行它)和
- 然后等待30秒,以便在开始保存工作簿之前为自动化软件提供一些时间。
所有软件都会调用工作簿中的宏,然后保存后续执行。
查询正确地一个接一个地执行,我可以告诉表中的数据已经刷新。
已经下载行的电源查询确认发生在VBA完成执行之后,因此自动化软件在完成此操作之前保存它并且Excel将下载报告为失败。当一切正常时,这不是问题,但我们不知道下载何时真正失败,除非我添加某种行计数比较,这实际上是一种解决方法而不是实际解决方案。
我尝试在工作簿中创建两个subs,一个用于刷新,另一个用于调用第一个sub然后等待30秒,我希望下载在第一个子完成执行后完成,但是这并没有&# 39; t发生。我尝试一次刷新一个连接而不是使用RefreshAll,尝试刷新实际的电源查询表而不是连接,并尝试刷新后台查询设置为true然后循环直到刷新标记为完成(如果你工作一步一步,但如果你只是完全运行VBA就会崩溃。
我还尝试在VBA末尾保存电子表格,但它仍会等到保存完成后才能更新电源查询状态。
我最新的VBA:
Sub Workbook_RefreshAll()
Application.DisplayAlerts = False
For Each objConnection In ThisWorkbook.Connections
'Temporarily disable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = False
objConnection.OLEDBConnection.MaintainConnection = False
Next
ActiveWorkbook.RefreshAll
For Each objConnection In ThisWorkbook.Connections
'Re-enable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = True
objConnection.OLEDBConnection.MaintainConnection = True
Next
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 30
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
End Sub
(我无法记住维护连接参数是否真的有帮助,因为我试图强制连接在每次刷新后丢弃,但它确实有效,所以无法将其取出。)
答案 0 :(得分:1)
而不是var viewModel = kendo.observable({
isVisible: true,
onSave: function(e) {
kendoConsole.log("event :: save(" + kendo.stringify(e.values, null, 4) + ")");
},
products: new kendo.data.DataSource({
schema: {
model: {
id: "ProductID",
fields: {
ProductName: { type: "string" },
UnitPrice: { type: "number" }
}
}
},
batch: true,
transport: {
read: {
url: "https://demos.telerik.com/kendo-ui/service/products",
dataType: "jsonp"
},
update: {
url: "https://demos.telerik.com/kendo-ui/service/products/update",
dataType: "jsonp"
},
create: {
url: "https://demos.telerik.com/kendo-ui/service/products/create",
dataType: "jsonp"
},
parameterMap: function(options, operation) {
if (operation !== "read" && options.models) {
return {models: kendo.stringify(options.models)};
}
}
}
})
});
kendo.bind($("#example"), viewModel);
尝试以下内容:
Application.Wait