2011-10-07 51 views
7

我们有一个用于管理小时支持工程师的rota的电子表格。后来,我添加了一些VBA代码,它可以在几小时内自动将支持电话号码转移给工程师的电话号码。来自VBA的ADODB连接停止工作

它通过连接到由电话提供商运行的数据库并更新转接号码来完成此操作。

今天下午,它突然不工作在中央服务器上:

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今天已经更新,或者真的有任何其他更改。

有没有人见过这个问题?

回答

16

OK找到了问题。看起来在某种程度上,VBA的外部参考之一是未经挑战的(ADO 2.8 Recordset)。我已经添加了参考,它现在似乎工作正常。 (!)

自从我不知怎么把3个upvotes回答我的问题,我最好还是把更多的详细一点的情况下,其他人看到这个问题:

在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的第一步是打开实际的名册工作簿,然后运行其余的VBA代码不变。

3

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

开发人员更明显的一点是,ADODB.Connection和/或ADODB.Recordset会停止自我资本化。 ADODB是小写字母或第二部分是。虽然有时候,capilization是好的,它仍然发生。

将连接和/或记录集对象的创建与“设置新的”部分代码更改分离已经为我解决了每次。

具体来说,以下代码的调整总是固定这对我来说:

更改从创建的任何连接对象:

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 
2

我在我的VBA代码的工作我的本地机器(Windows 7)中的细类似的问题,但是从Citrix服务器运行它(Windows 2003服务器)没有与失败尝试建立连接时运行时错误为430(Set Conn = New ADODB.Connection)。

我也没多想在Windows版本的差异,直到读这些反应,所以当我选中“Microsoft ActiveX数据对象2.8库”和检查“Microsoft ActiveX数据对象2.7库”,这一切工作得很好。

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