【问题标题】:Excel 2007 - 1004 Run-time error Refresh Query TableExcel 2007 - 1004 运行时错误刷新查询表
【发布时间】:2013-04-15 14:49:24
【问题描述】:

这个错误似乎太笼统了,以至于许多现有的解决方案都解决了不同的问题。

在我的例子中,我创建了一个在 Excel 2010 中工作但在 Excel 2007 中不工作的宏。

代码总结如下:

cn = "ODBC;Driver={SQL Server Native Client 10.0};Server=serverName;Database=dbName;Trusted_Connection=yes;"
sql = "select top 10 * from tableName"

Dim S As Worksheet
Set S = ActiveWorkbook.Sheets("Medical")

With S.QueryTables.Add(Connection:=cn, Destination:=S.Range("B1"))

        .CommandText = sql
        .Refresh BackgroundQuery:=False

     End With

此代码在 Excel 2010 中完美执行,但在 Excel 2007 中出错。

我需要更改 2007 年的连接字符串结构,还是有其他问题在起作用?

【问题讨论】:

  • 错误 1004 是一般错误,但您有实际的错误文本吗?应该说类似运行时错误 1004:后跟更多描述 - 这将有助于缩小问题范围。
  • 运行时错误“1004”:一般 ODBC 错误
  • Medical sheet的B1区域有查询吗?如果您右键单击单元格,您应该会看到刷新选项。
  • 2010 年有,但 2007 年没有。
  • 您可以尝试将 S.QueryTables.Add(Connection:=cn, Destination:=S.Range("B1")) 更改为 S.QueryTables.Add(Connection:=cn 而不是 .Commandtext , 目的地:=S.Range("B1"), Sql:=sql)?

标签: excel vba odbc runtime


【解决方案1】:

将您的属性 .Refresh BackgroundQuery:=False 更改为 .Refresh。在这方面,从 2007 年到 2010 年没有任何变化,因此如果更改属性不能解决问题,则可能会出现其他问题,例如部分工作簿已损坏。

【讨论】:

  • 感谢您的建议,但不是 .BackgroundQuery 属性导致问题。更改为您的解决方案(或完全删除 BackgroundQuery)没有任何影响。这是导致问题的刷新。
  • 抱歉,我的意思是 .Refresh 不使用 BackgroundQuery:=False。
【解决方案2】:

解决方案:

我在 Excel 2010 中使用的所有机器都有“SQL Server Native Client 10.0”作为 ODBC 数据源的可能驱动程序。装有 Excel 2007 的机器只有“SQL Server”。

我将连接字符串更改为:

cn = "ODBC;Driver=SQL Server;Server=serverName;Database=dbName;Trusted_Connection=yes;"

它就像一个魅力。

感谢回复的人。

【讨论】:

    【解决方案3】:

    从宏调用存储过程时我遇到了同样的问题。在网上搜索了一整天的解决方案后,我终于找到了解决方案。

    我使用了 SET NOCOUNT ON;

    成功了!

    【讨论】:

    • 您能否详细说明这应该去哪里以及它的作用?
    【解决方案4】:

    无法添加评论,因此这是为了解决上面提出的问题。

    这个答案为我节省了很多时间。

    有关此的 MSFT 文档: https://docs.microsoft.com/en-us/sql/t-sql/statements/set-nocount-transact-sql

    下面是一个实现。

    create proc yourSproc
    
    as
    
    set nocount on;
    
    begin
    
        --Contents of sproc
    
    end
    

    【讨论】:

    • 这并没有提供问题的答案。一旦你有足够的reputation,你就可以在任何帖子上comment。还要检查这个what can I do instead
    • 是的,我知道我没有解决 OP,我表示我无法发布旨在解决 @SuperBiasedMan 的评论(这是一个问题)的评论。网站贡献部分的新手,因此试图导航如何在没有足够声誉的情况下进行交互。感谢您的链接。
    【解决方案5】:

    我有这个确切的错误。调试也会带我到 .refresh 行。我用我能想到的所有方法来修复那条线。没有任何效果。

    “常规 ODBC 错误”措辞让我想到...我去运行 >> Microsoft ODBC 管理器 >> 选择我的数据源 >> 单击配置按钮 >> 单击测试连接

    返回的错误是我的密码已过期并且数据库设置为只读。我的 Windows 用户密码尚未过期,但它在我“应该”更改密码的时间范围内……我使用的是工作机器,并且每隔 60-90 天左右强制用户帐户密码更改一次,大约 30 岁左右天宽限期。甚至都不知道。

    并不是说这是对您的解决方案,但我遇到了完全相同的错误,并且尝试了每一个小技巧并编辑了这个网站,互联网,不得不提供但没有运气。我注销,重置我的 Windows 用户帐户密码,重新登录,打开 excel 文件,点击刷新按钮宏......它工作。

    无论如何,也许这会对某人有所帮助......

    【讨论】:

      猜你喜欢
      • 2013-11-23
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2016-07-06
      • 1970-01-01
      相关资源
      最近更新 更多