Соединение ADODB с VBA перестало работать

У нас есть таблица 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 ответов


OK нашел проблему. Похоже, в какой-то момент одна из внешних ссылок для материала VBA была снята (набор записей ADO 2.8). Я добавил ссылку, и теперь она работает нормально.

Так как у меня как-то есть 3 upvotes для ответа на мой собственный вопрос (!), Я бы лучше поставил немного больше деталей, если другие люди видят эту проблему:

в Редакторе Visual Basic в разделе Инструменты - > ссылки у меня было Microsoft ActiveX Data Objects 2.8 Library выбранные. Но!--1--> был снят. Интересно, что эта библиотека даже не отображается как опция при просмотре ее под Windows 7, но макросы работают без нее.

еще одна заметка, так как, очевидно, у многих людей есть эта проблема... Мой ответ выше решил проблему, но только до тех пор, пока некоторые люди не отредактируют файл снова, и в этот момент их версия Office автоматически воссоздает проблему, и мне пришлось решить ее снова.

есть два долгосрочных решений:

1) Вы можете использовать поздняя привязка, и избавиться от ссылочной библиотеки полностью. Вижу http://support.microsoft.com/kb/245115 подробнее об этом.

2) для моих целей я полностью переместил макросы в другую книгу - эти макросы должны запускаться только с центрального сервера в любом случае (у людей, просто просматривающих реестр, не будет настроен источник данных ODBC, поэтому макросы все равно не будут запускаться). Итак, теперь первый шаг VBA в книге макроса - открыть фактический реестр книга, а затем выполняется остальная часть кода VBA без изменений.


Я делаю много работы VBA и много сталкивался с этим в последнее время. Я напишу программу и она будет работать хорошо в течение длительного времени (лет в некоторых случаях), а затем в один прекрасный день некоторые компьютеры начинают получать эту ошибку.

одна из наиболее очевидных вещей для разработчика-это ADODB.Подключение и / или ADODB.Recordset перестают самостоятельно капитализировать себя. Либо ADODB строчный, либо вторая часть. Иногда, правда, capiltization нормально и он по-прежнему происходит.

разделение создания объекта connection и / или recordset от изменения кода части "Set new" исправило его каждый раз для меня.

в частности, следующие настройки кода всегда исправляли это для меня:

изменить создание любых объектов подключения из:

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

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

Я не думал о различиях в версиях windows, пока не прочитал эти ответы, и поэтому, когда я unchecked "Microsoft ActiveX Data Objects 2.8 Library" и проверил " Microsoft ActiveX Data Objects 2.7 Library", все работало нормально.

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