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适用于我们的需求,我希望其他任何遇到这个问题的人都认为这个工作很有用。