在使用设置为False的BackGroundQuery刷新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也没有此问题。
非常感谢有关此问题的任何帮助。
答案 0 :(得分:1)
谢谢大家的反馈和想法。我们发现对我们的影响相当小。
我们发现此问题仅存在于Excel 2013中的查询表上,并且在刷新QueryTable之前已对其应用了过滤器。
我们的工作只是从具有QueryTable调用刷新的工作表中删除过滤,将BackgroundQuery设置为false,然后将过滤器应用于我们的外部数据范围。
示例:
Sheet3.AutoFilterMode = False
Sheet3.QueryTables(1).Refresh BackgroundQuery:=False
Sheet3.Range("ExternalData_3").AutoFilter
此解决方案适用于我们的需求,我希望遇到此问题的其他任何人都能发现这项工作非常有用。