2011-10-07 59 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庫」,這一切工作得很好。

只是想通過這一點,並說這些帖子,讓我在正確的方向感謝你。