2016-11-07 5 views
1

Я пытаюсь использовать SQL для запроса таблицы (покупок) в Excel. Тем не менее, я получаю сообщение об ошибке при запуске сценария ниже.Ошибка Запрос таблицы с использованием ADODB с VBA в Excel

Переменная tableaddress производит Покупки! $ A $ 2: $ F $ 1200, который является диапазоном таблицы «Покупки».

SQL-запрос, который производится:

Select * From [Purchases!$A$2:$F$1200] 

Сам ток УВА, как показано ниже:

Dim cn As New ADODB.Connection 
    Dim rs As New ADODB.Recordset 
    Dim strSQL As String 
    Dim tableAddress As String 

    Set cn = New ADODB.Connection 
    cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name 

    cn.Open 
    tableAddress = "Purchases!" & Range("Purchases").Address 
    strSQL = "Select * From [" & tableAddress & "]" 
    rs.Open strSQL, cn 
    cn.Close 

Однако при выполнении я получаю ошибку ниже ...

[Microsoft][ODBC Excel Driver] 'Purchases!$A$2:$F$1200' is not a valid name. 
Make sure that it does not include invalid characters or punctuation and that it is no too long. 

Я вижу апострофы в ошибке, но не уверен, относится ли это к пунктуации или как избавиться если так.

Спасибо!

+0

Пробовали ли вы без '[]'? –

+0

У меня есть, что вызывает проблему «Синтаксическая ошибка в FROM». Я изначально имел это таким образом, но добавил скобки после того, как увидел эти ссылки в других инструкциях ADODB. –

+1

Что такое 'ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name'. Вы уверены, что 'ActiveWorkbook' - это тот, который, по вашему мнению, есть, и на нем есть вкладка« Покупки »? Также попробуйте квалифицировать полный путь к файлу в инструкции SQL. ' –

ответ

1

Следующий код должен работать:

Dim cn As New ADODB.Connection 
Dim rs As New ADODB.Recordset 
Dim strSQL As String 
Dim tableAddress As String 

Set cn = New ADODB.Connection 
cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name 

cn.Open 
tableAddress = "Purchases$" & Range("Purchases").Address(False, False) 
strSQL = "Select * From [" & tableAddress & "]" 
rs.Open strSQL, cn 
cn.Close 
+0

Хорошо на '' '. Я знал, что здесь есть какой-то трюк, что я забыл! –

+0

@ScottHoltzman - Мне нужно было найти его, чтобы найти ответ - я всегда использую имя прямого диапазона при указании области источника. – YowE3K

+0

Это прекрасно! Я знал, что я пропустил что-то простое. Спасибо за помощь! –