Перестало работать ADODB соединение от VBA - PullRequest
7 голосов
/ 07 октября 2011

У нас есть электронная таблица Exccel, используемая для управления ротацией инженеров службы поддержки в нерабочее время. Некоторое время назад я добавил немного кода 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 ]

16 голосов
/ 07 октября 2011

ОК, нашел проблему.Похоже, в какой-то момент одна из внешних ссылок на материал 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 в рабочей книге макроса, - это открыть фактическую рабочую книгу, а затем он выполняет оставшуюся часть кода VBA без изменений.

3 голосов
/ 02 апреля 2012

Я много работаю в 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
2 голосов
/ 17 сентября 2012

У меня была похожая проблема, когда мой код VBA работал нормально на моем локальном компьютере (Windows 7), но запуск его с сервера Citrix (Windows 2003 Server) не сработал и завершился с ошибкой времени выполнения 430 при попыткеустановить соединение (Set Conn = New ADODB.Connection).

Я не думал о различиях в версиях Windows, пока не прочитал эти ответы, и поэтому, когда я не проверял"Данные Microsoft ActiveXБиблиотека объектов 2.8 "и отмечены " Библиотека данных Microsoft ActiveX 2.7 ", все работало нормально.

Просто хочу передать это и сказать спасибо за эти посты, которые привели меня вправильное направление.

...