刷新 QueryTable 并将 BackGroundQuery 设置为 False 时,我遇到了 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 也没有这个问题。
对此问题的任何帮助将不胜感激。