2015-01-29 2 views
4

Я создал макрос, который отправляет новый CommandText в ODBC-соединение в моей электронной таблице Excel, а затем обновляет таблицу результатов, связанных с запросом. Это работает отлично, но я заметил, что каждый раз, когда я запускаю макрос, он перезаписывает строку соединения с некоторыми значениями по умолчанию, которые работают на моей машине, но не будут работать на компьютерах других пользователей, потому что у них нет сохраненного файла подключения что у меня есть. Более конкретная строка подключения, определяющая адрес сервера, работает при вводе вручную, но будет перезаписана в любое время, когда выполняется макрос.Настройка строки подключения ODBC в VBA

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

Мой код выглядит следующим образом:

Sub NewData() 

Dim lStr As String 
lStr = "" 
lStr = lStr & " USE myDBname; " 
lStr = lStr & " WITH X AS (" 
lStr = lStr & " SELECT" 
lStr = lStr & " column1, column2, column3, etc" 
lStr = lStr & " FROM" 
lStr = lStr & " etc. etc. etc." 

With ActiveWorkbook.Connections("PayoffQuery").ODBCConnection 

.CommandText = lStr 
.Connection = "SERVER=myserveraddress;UID=SYSTEM;Trusted_Connection=Yes;APP=2007 Microsoft Office system;WSID=SYSTEM;DATABASE=myDBname;" 

End With 

End Sub 

.CommandText все еще обновляет просто отлично, но .Connection выбрасывает сообщение об ошибке выполнения 1004: Application или объекта определенные ошибки.

Любая идея, что я делаю неправильно здесь? ТИА.

ответ

4

В коде VBA добавьте ODBC; к началу вашей новой строки подключения.

.Connection = "ODBC;SERVER=myserveraddress;UID=SYSTEM;Trusted_Connection=Yes;APP=2007 Microsoft Office system;WSID=SYSTEM;DATABASE=myDBname;" 
+0

Спасибо, это сработало! Интересно, что эта часть не отображается в окне свойств соединения после запуска макроса. Но это должно иметь влияние, поскольку оно не работает, если эта часть опущена. – CactusCake

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