看来这个错误是如此通用,以至于许多现有的解决方案都解决了不同的问题。
在我的情况下,我创建了一个在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年的连接字符串结构,还是有其他问题在起作用?
答案 0 :(得分: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;"
它就像一个魅力。
感谢那些回复的人。
答案 1 :(得分:0)
将您的媒体资源.Refresh BackgroundQuery:=False
更改为.Refresh
。关于这一点,从2007年到2010年没有任何变化,因此如果更改属性不能解决问题,则会发生其他事情,例如工作簿的一部分已损坏。
答案 2 :(得分:0)
从宏调用存储过程时遇到了同样的问题。在搜索互联网寻找解决方案一整天后,我终于找到了解决方案。
我使用了SET NOCOUNT ON;
有效!
答案 3 :(得分: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
答案 4 :(得分:0)
我有这个确切的错误。调试也会把我带到.refresh行。我竭尽所能地解决了这一问题。没事。
“常规ODBC错误”字样让我想到...我去运行>> Microsoft ODBC Administrator >>选择我的数据源>>单击“配置”按钮>>单击“测试连接”
返回一个错误,提示我密码已过期,并且数据库设置为只读。我的Windows用户密码尚未过期,但是它在我“应该”更改密码的时间之内...我使用的是工作机,并且每60-90天左右(约30天)更改一次强制性用户帐户密码天宽限期。甚至都不知道。
并不是说这是为您解决的问题,但是我遇到了完全相同的错误,并且尝试了所有小技巧并编辑了该网站,而Internet却没有运气。我注销,重设Windows用户帐户密码,重新登录,打开excel文件,点击“刷新按钮”宏……然后它起作用了。
无论如何,也许这会帮助某人...