Соединение 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", все работало нормально.
просто хочу это и сказать спасибо за эти посты, которые ведут меня в правильном направлении.