Чтобы вернуть указанные c ошибки от подключенного драйвера ODB C, рассмотрите возможность создания QueryTable из набора записей ADO, который обрабатывает SQL перед передачей в QueryTable. Как показывают QueryTables
документы , аргумент connection может принимать различные формы, включая наборы записей (и даже пример в документации показывает, как такое подключение ADO набор записей):
Источник данных для таблицы запросов может быть одним из следующих:
- Строка, содержащая строку подключения OLE DB или ODB C. Строка подключения ODB C имеет вид
ODBC;<connection string>
. - Объект QueryTable, из которого изначально копируется информация запроса, включая строку подключения и текст SQL, но не включая диапазон адресатов. При указании объекта QueryTable аргумент Sql игнорируется.
- Объект набора записей ADO или DAO. Данные считываются из набора записей ADO или DAO. Microsoft Excel сохраняет набор записей до тех пор, пока таблица запросов не будет удалена или соединение не будет изменено. Результирующая таблица запросов не может быть отредактирована.
...
Скорректированный VBA с обработкой ошибок:
Sub Get_SQL_Data()
On Error GoTo ErrHandle
Dim conn As ADODB.Connection, rst As ADODB.Recordset
Dim sqlstring As String, connstring As String
' OPEN CONNECTION
Set conn = New ADODB.Connection
connstring = "Driver={SQL Server}; ..."
conn.Open connstring
' OPEN RECORDSET
Set rst = New ADODB.Recordset
sqlstring = "SELECT * FROM mytable"
rst.Open sqlstring, conn
With Worksheets("MAIN").QueryTables.Add( _
Connection:=rst, _
Destination:=Range("A1"))
.Name = "SQL_DATA"
.FieldNames = True
.Refresh BackgroundQuery:=False
End With
rst.Close: conn.Close
ExitHandle:
Set rst = Nothing: Set conn = Nothing
Exit Sub
ErrHandle:
MsgBox Err.Number & " - " & Err.Description, vbCritical, "RUNTIME ERROR"
Resume ExitHandle
End Sub