【发布时间】:2013-11-23 20:56:50
【问题描述】:
在刷新 BackGroundQuery 设置为 False 的 QueryTable 时,我遇到了 Excel 2013 的问题(出于我们的目的,BackgroundQuery 必须设置为 false)。当提供的查询不返回数据时,会发生 1004 运行时错误,不返回数据的最常见原因是特定时间范围或特定资源上没有记录。
我和我的同事一直在尝试解决此问题,但尚未找到解决方案,我们进一步发现没有任何迹象表明 Excel 处理刷新查询表的方式发生了变化。
查看 VBA 中发生了什么的代码示例:
Dim sql As String
sql = "SELECT 1 WHERE 1=0"
Sheet1.QueryTables(1).sql = sql
Sheet1.Activate
Sheet1.Range("b11").Select
Sheet1.QueryTables(1).Refresh BackgroundQuery:=False
刷新是我们收到错误的时候。将 Where 条件更改为 1=1 会导致成功运行。
我们在 C# 环境中运行这些报告,因此我们必须等待数据填充并保存报告。捕获错误并继续也不是一个可接受的解决方案,因为它是在相当关键的地方出现的非常普遍的错误。
Excel 2007 和 2010 也没有这个问题。
对于这个问题的任何帮助将不胜感激。
【问题讨论】:
-
不是 1=0 总是会返回零结果吗?
-
是的。这是一个示例查询,因此其他人可以轻松重现我们看到的问题。
-
知道了,我明白你现在说什么了。对不起
-
可以使用 RefreshComplete 事件并在后台运行它吗?
标签: c# sql excel vba excel-2013