Excel 2013 – 1004运行时错误刷新查询表BackgroundQuery:= False
在使用BackGroundQuery设置为False的情况下刷新QueryTable时(我们的目的,BackgroundQuery必须设置为false),我遇到了Excel 2013中的一个问题。 如果提供的查询不返回数据,则会发生1004运行时错误,则不返回数据的最常见原因是特定时间范围或特定资源上没有logging。
我的同事和我自己一直在试图解决这个问题,但是还没有find解决scheme,而且我们还没有发现任何东西,表明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#环境运行这些报告,这样我们必须等待数据填充并保存报告。 捕捉错误并继续也不是一个可接受的解决scheme,因为这是一个非常关键的地方非常通用的错误。
Excel 2007和2010也没有这个问题。
任何有关这个问题的帮助将不胜感激。
谢谢大家的反馈和想法。 我们发现一个工作对我们来说影响相当小。
我们发现这个问题仅在Excel 2013中存在,在查询表刷新之前应用了筛选器。
我们的解决方法是简单地从QueryQuery中调用RefreshQuery的表单中移除filter,将BackgroundQuery设置为false,然后将filter应用到我们的外部数据范围。
例:
Sheet3.AutoFilterMode = False Sheet3.QueryTables(1).Refresh BackgroundQuery:=False Sheet3.Range("ExternalData_3").AutoFilter
这个解决scheme适用于我们的需求,我希望其他任何遇到这个问题的人都认为这个工作很有用。