2

刷新 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 也没有这个问题。

对此问题的任何帮助将不胜感激。

4

1 回答 1

2

谢谢大家的反馈和想法。我们发现了一个对我们影响相当小的解决方法。

我们发现此问题仅存在于 Excel 2013 中在刷新 QueryTable 之前应用了过滤器的查询表上。

我们的解决方法只是从工作表中删除了过滤,该工作表调用了将 BackgroundQuery 设置为 false 的刷新,然后将过滤器应用于我们的外部数据范围。

例子:

    Sheet3.AutoFilterMode = False
    Sheet3.QueryTables(1).Refresh BackgroundQuery:=False
    Sheet3.Range("ExternalData_3").AutoFilter

这个解决方案可以满足我们的需求,我希望遇到这个问题的其他人发现这个解决方法很有用。

于 2013-11-12T16:03:39.990 回答