VBA中的ADODB连接停止工作

8

我们有一个用于管理值班支持工程师轮班的Excel电子表格。一段时间以前,我加了一些VBA代码,可以在非工作时间自动将支持电话号码转接到工程师的手机上。

它通过连接由电话提供商运行的数据库来实现,并更新转接号码。

今天下午,中央服务器突然无法正常工作:

Dim Db As ADODB.Connection

Sub ConnectDatabase()
  Set Db = New ADODB.Connection
  Db.Open "SupportMobileDb"
End Sub

代码停在New ADODB.Connection这一行,并报告如下错误:
Run-time error '430':
Class does not support Automation or does not support expected
interface

我仍然可以在我的笔记本电脑上运行宏,并且它能正常工作。在中央服务器上,我仍然可以使用Excel,并正确地连接到数据源。但是,在这个服务器上,无法通过VBA再次运行宏。
上午9点,宏顺利运行并将所有电话转接到办公室,但下午5点的员工转接宏没有成功。我无法看到今天Windows是否有更新,或者其他任何变化。
有人以前见过这个问题吗?
3个回答

20

好的,找到问题了。看起来在某个时候,VBA工具的一个外部引用被取消勾选了(ADO 2.8 Recordset)。我已经重新添加了这个引用,并且现在似乎可以正常工作了。

既然我以某种方式得到了3个赞,回答了自己的问题(!),为了其他人能够看到这个问题,我最好再加些细节:

在Visual Basic编辑器中,在“工具”->“引用”下,我选择了Microsoft ActiveX Data Objects 2.8 Library。但是Microsoft ActiveX Data Objects Recordset 2.8 Library未被选择。有趣的是,在Windows 7下看它时,这个库甚至不会出现作为一个选项,但没有它宏也可以正常运行。

由于显然很多人都遇到了这个问题,我还想说一句...我上面的答案确实解决了问题,但只是在某些人再次编辑文件之前有效。此后,他们的Office版本会自动重新创建问题,我不得不再次解决它。

有两个长期的解决方案:

1)您可以使用晚期绑定,并完全摆脱所需的引用库。有关详细信息,请参见http://support.microsoft.com/kb/245115

2)针对我的目的,我将宏移动到另一个工作簿中——这些宏只能从中央服务器运行(只查看值班表的人不会设置ODBC数据源,因此宏也不会运行)。因此,现在宏所在的工作簿的第一步是打开实际的值班表工作簿,然后继续运行其余的VBA代码。


3
我曾经遇到过类似的问题:我的VBA代码在本地机器(Windows 7)上运行良好,但在Citrix服务器(Windows 2003 Server)上运行时出现了错误,当尝试建立连接(Set Conn = New ADODB.Connection)时,会提示运行时错误430。
直到阅读这些回复时,我没有考虑到Windows版本的差异。因此,当我取消选中"Microsoft ActiveX Data Objects 2.8 Library"并选择"Microsoft ActiveX Data Objects 2.7 Library"时,一切都可以正常运行。
只是想传递这个信息,并感谢这些帖子引导我走向正确的方向。

3
我是一位有用的助手,可以为您翻译以下关于IT技术的内容。最近我经常遇到这个问题,因为我做了很多VBA编程。我写了一个程序,它能长时间(在某些情况下甚至是几年)运行良好,但总会有一天某些计算机开始出现错误。
对于开发人员来说,其中一个比较明显的问题是ADODB.Connection和/或ADODB.Recordset停止自动大写。要么ADODB是小写,要么第二部分是小写。但有时即使大小写是正确的,问题仍然存在。
将连接对象和/或记录集对象的创建与“设置新”部分代码分离可以每次都修复此问题。
具体来说,以下代码调整对我来说总是有效:
将任何连接对象的创建从以下代码更改:
Dim con as New ADODB.Connection

致:

Dim con as ADODB.Connection
Set con = New ADODB.Connection

同样地,将任何记录集对象的创建方式从以下方式更改为:

Dim rs as New ADODB.Recordset

致:

Dim rs as ADODB.Recordset
Set rs = New ADODB.Recordset

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接