【问题标题】:Excel 2013 - 1004 runtime error Refresh Query Table BackgroundQuery:=FalseExcel 2013 - 1004 运行时错误刷新查询表 BackgroundQuery:=False
【发布时间】:2013-11-23 20:56:50
【问题描述】:

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

对于这个问题的任何帮助将不胜感激。

【问题讨论】:

  • 不是 1=0 总是会返回零结果吗?
  • 是的。这是一个示例查询,因此其他人可以轻松重现我们看到的问题。
  • 知道了,我明白你现在说什么了。对不起
  • 可以使用 RefreshComplete 事件并在后台运行它吗?

标签: c# sql excel vba excel-2013


【解决方案1】:

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

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

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

例子:

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

此解决方案适用于我们的需求,我希望遇到此问题的其他人发现此解决方法很有用。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 2013-04-15
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    相关资源
    最近更新 更多