刷新带有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也不存在此问题。
在这个问题上的任何帮助将不胜感激。
谢谢大家的反馈和想法。我们发现解决此问题对我们的影响很小。
我们发现此问题仅在刷新了QueryTable之前已对其应用了筛选器的Query Table的Excel 2013中出现。
我们的工作只是从具有QueryTable调用的表(将BackgroundQuery设置为false)的工作表中删除过滤,然后将过滤器应用于我们的外部数据范围。
例子:
Sheet3.AutoFilterMode = False Sheet3.QueryTables(1).Refresh BackgroundQuery:=False Sheet3.Range("ExternalData_3").AutoFilter
该解决方案可以满足我们的需求,希望所有遇到此问题的人都能从中找到有用的解决方案。