来自VBA的ADODB连接停止工作

我们有一个用于pipe理工作时间以外的支持工程师的Rota电子表格。 前一段时间,我添加了一些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 

我仍然可以运行我的笔记本电脑上的macros,它可以正常工作。 而在中央服务器上,我仍然可以使用Excel,并正确连接到数据源。 在这台服务器上不再需要使用VBA。

macros上午9时正确运行,并将所有电话转移到办公室,但下午5点转移到工作人员macros没有工作。 我看不到Windows今天已经更新,或者真的有任何其他更改。

有没有人见过这个问题?

OKfind了问题。 看起来在某些时候,VBA的外部引用之一是未经挑战的(ADO 2.8 Recordset)。 我已经添加了参考,它现在似乎工作正常。

由于我不知何故有3个upvotes回答我自己的问题(!),我最好多一些细节,以防其他人看到这个问题:

在Visual Basic编辑器的“工具” – >“引用”下,select了“ Microsoft ActiveX Data Objects 2.8 Library 。 但是Microsoft ActiveX Data Objects Recordset 2.8 Library未被选中。 有趣的是,当在Windows 7下查看时,这个库甚至不会显示为一个选项,但是这个macros没有它。

还有一个注意事项,很明显,很多人都有这个问题…我上面的答案解决了这个问题,但只有当某些人再次编辑文件,在这一点上,他们的Office版本自动重新创build问题,我不得不再次解决。

有两个更长期的解决scheme:

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

2)为了我的目的,我将macros移到了另一个工作簿中 – 这些macros只能从中央服务器运行(只是查看名单的人不会设置ODBC数据源,所以macros不会运行无论如何)。 所以现在macros的工作簿中的VBA的第一步是打开实际的名册工作簿,然后运行其余的VBA代码不变。

我做了很多VBA工作,最近碰到这个。 我将编写一个程序,它会运行良好很长一段时间(在某些情况下多年 ),然后有一天,一些计算机开始得到这个错误。

对于开发人员来说更明显的事情之一是ADODB.Connection和/或ADODB.Recordset停止自我资本化。 ADODB是小写字母还是第二部分。 但是,有时候,这种化解还不错,而且还是会发生的。

将连接和/或logging集对象的创build与“设置新的”部分代码更改分离已经固定每次为我。

具体来说,下面的代码调整总是为我解决这个问题:

从以下位置更改任何连接对象的创build:

 Dim con as New ADODB.Connection 

至:

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

同样,从以下位置更改任何logging集对象的创build:

 Dim rs as New ADODB.Recordset 

至:

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

我有一个类似的问题,我的VBA代码在我的本地计算机(Windows 7)上工作正常,但是从Citrix服务器(Windows 2003 Server)运行它并没有失败,尝试build立连接时运行时错误为430 (Set Conn = New ADODB.Connection)。

我没有想到在Windows版本的差异,直到阅读这些反应,所以当我取消选中 “Microsoft ActiveX数据对象2.8库”,并选中 “Microsoft ActiveX数据对象2.7库”,这一切工作正常。

只是想通过这一点,并说这些post,让我在正确的方向感谢你。