Вместо добавления другой таблицы запросов методом add
, вы можете просто обновить свойство CommandText соединения.Однако вы должны знать, что при обновлении свойства CommandText
соединения ODBC существует ошибка.Если вы временно переключаетесь на соединение OLEDB, обновите свойство CommandText
, а затем переключитесь обратно на ODBC, чтобы новое соединение не создавалось.Не спрашивайте меня, почему ... это просто работает для меня.
Создайте новый модуль и вставьте следующий код:
Option Explicit
Sub UpdateWorkbookConnection(WorkbookConnectionObject As WorkbookConnection, Optional ByVal CommandText As String = "", Optional ByVal ConnectionString As String = "")
With WorkbookConnectionObject
If .Type = xlConnectionTypeODBC Then
If CommandText = "" Then CommandText = .ODBCConnection.CommandText
If ConnectionString = "" Then ConnectionString = .ODBCConnection.Connection
.ODBCConnection.Connection = Replace(.ODBCConnection.Connection, "ODBC;", "OLEDB;", 1, 1, vbTextCompare)
ElseIf .Type = xlConnectionTypeOLEDB Then
If CommandText = "" Then CommandText = .OLEDBConnection.CommandText
If ConnectionString = "" Then ConnectionString = .OLEDBConnection.Connection
Else
MsgBox "Invalid connection object sent to UpdateWorkbookConnection function!", vbCritical, "Update Error"
Exit Sub
End If
If StrComp(.OLEDBConnection.CommandText, CommandText, vbTextCompare) <> 0 Then
.OLEDBConnection.CommandText = CommandText
End If
If StrComp(.OLEDBConnection.Connection, ConnectionString, vbTextCompare) <> 0 Then
.OLEDBConnection.Connection = ConnectionString
End If
.Refresh
End With
End Sub
Эта подпрограмма UpdateWorkbookConnection
работает только при обновлении OLEDBили соединения ODBC.Соединение не обязательно должно быть связано с сводной таблицей.Это также устраняет другую проблему и позволяет обновлять соединение, даже если существует несколько сводных таблиц, основанных на одном и том же соединении.
Чтобы инициировать обновление, просто вызовите функцию с объектом соединения и текстовыми параметрами команды, например так:
UpdateWorkbookConnection ActiveWorkbook.Connections("Connection"), "exec sp_MyAwesomeProcedure"
Также можно обновить строку подключения.