在BackGroundQuery设置为False的情况下刷新QueryTable时,我遇到了Excel2013的问题(出于我们的目的,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没有此问题。
在这个问题上的任何帮助都将不胜感激。
发布于 2013-11-13 00:03:40
感谢你们所有人的反馈和想法。我们找到了一个对我们影响很小的工作。
我们发现这个问题只存在于Excel2013的查询表中,这些查询表在QueryTable刷新之前应用了筛选器。
我们的工作只是简单地从表中删除了过滤,该表的QueryTable调用refresh with BackgroundQuery设置为false,然后将过滤器应用到外部数据区域。
示例:
Sheet3.AutoFilterMode = False
Sheet3.QueryTables(1).Refresh BackgroundQuery:=False
Sheet3.Range("ExternalData_3").AutoFilter
这个解决方案可以满足我们的需求,我希望遇到这个问题的任何其他人都能找到有用的工作。
https://stackoverflow.com/questions/19916824
复制相似问题