2009-11-18 4 views
0

Ссылка Excel VBA to SQL Server without SSISADODB.Connection неопределенных

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

 
    Const CS As String = "Driver={SQL Server};" _ 
         & "Server=****;" _ 
         & "Database=****;" _ 
         & "UID=****;" _ 
         & "PWD=****" 
    Dim DB_Conn As ADODB.Connection 
    Dim Command As ADODB.Command 
    Dim DB_Status As String
в подобный модуль в другой таблице. Я также скопировал в тот же модуль
 
Sub Connect_To_Lockbox() 
    If DB_Status <> "Open" Then 
     Set DB_Conn = New Connection 
     DB_Conn.ConnectionString = CS 
     DB_Conn.Open ' problem! 
     DB_Status = "Open" 
    End If 
End Sub
Я добавил ту же ссылку (ADO 2.8)

Первая электронная таблица все еще работает; seccond в DB_Conn.Open всплывает «Ошибка времени выполнения» -214767259 (80004005) ': [Microsoft] [Менеджер драйверов ODBC] Имя источника данных не найдено, а драйвер по умолчанию не указан » Удаление ссылок на обоих, сохранение файлов, повторное открытие, повторное добавление ссылок не помогает. Он все еще работает, а другой получает ошибку.

?!?

+0

С другой таблицей, которую я предполагаю в том же документе, правильно? – Stevoni

+0

@Stevoni: Нет, он копировал модуль из одной электронной таблицы в другую. Обе таблицы должны были подключаться к одному экземпляру SQL Server, поэтому единственное, что нужно изменить, это аутентификация для конкретной БД. Теперь я ушел на пенсию и не могу сказать, как я это разрешил, но я знаю, что это в конечном итоге сработало. – WGroleau

ответ

0

Когда появляется всплывающее окно, проверьте свои локальные окна, чтобы увидеть, что удерживает CS. Вид> Окно локалей

0

Задача: Ваша константа не найдена компилятором.

Решение: При постоянном расположении в отдельном модуле вам необходимо установить его как общедоступный для другого кода, чтобы увидеть его.

Доказательство:
Чтобы доказать эту теорию, вы можете сделать следующее: Откройте новую таблицу Excel Перейти к конструктору VBA и добавить новый модуль В этом модуле ГОВОРЯ:

Const TestString As String = "Test String" 

Затем добавьте следующий код ThisWorkbook:

Public Sub TestString() 
    MsgBox (TestString) 
End Sub 

После добавления этого возвращения к й электронной книги и добавить кнопку, выбрав «TestString» в качестве макроса для запуска при нажатии.

Нажмите кнопку и появится пустое окно сообщения. Вернитесь к дизайнеру VBA и измените const в модуле 1 на общедоступный Нажмите кнопку в электронной таблице, и теперь вы должны увидеть «Test String» в окне сообщения.

+0

Нет, они были в том же модуле. Простите, что раньше не было ясно. – WGroleau

0

Я понимаю, что этот вопрос действительно старый. Но для записи я хочу документировать мои решения для ошибки здесь: это была ошибка, связанная с данными в электронной таблице! Столбец был отформатирован как дата и содержал значение 3000000. Изменение формата на числа разрешило ошибку 80004005.

+0

Не то же самое. Отладчик показал, что произошла ошибка при попытке выполнить метод открытого подключения. – WGroleau

1

Я наблюдал такое же сообщение об ошибке, и в моем случае ничего не изменилось. Я задавался вопросом, нужно ли переустановить мой драйвер odbc (на основе того, что я читаю онлайн). В любом случае, перезапуск excel сделал трюк. Иногда решение намного проще. :-)

+0

Перезапуск не исправил его для меня, как показывает текст вопроса. – WGroleau

Смежные вопросы