2

看起来这个错误是如此普遍,以至于许多现有的解决方案都解决了不同的问题。

在我的例子中,我创建了一个在 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 年的连接字符串结构,还是有其他问题在起作用?

4

5 回答 5

3

解决方案:

我在 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;"

它就像一个魅力。

感谢那些做出回应的人。

于 2013-04-23T01:44:38.897 回答
0

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

于 2013-04-22T16:17:30.160 回答
0

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

我使用了 SET NOCOUNT ON;

有效!

于 2015-07-02T13:09:07.897 回答
0

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

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

有关此的 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
于 2017-05-26T14:24:45.547 回答
0

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

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

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

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

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

于 2019-06-17T19:03:44.210 回答