Excel VBA записывает SQL запрос данных из таблицы Excel - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть таблица на листе в MS Excel, и я пытаюсь записать запрос из таблицы1 и вставить результаты в другой лист. (в таблице есть другие подробности, которые позволяют иметь 2 строки с одним и тем же поставщиком и продуктом).

Table1:
Product     Supplier   
apple       A           
apple       A           
apple       B           
apple       C           
banana      A           

Я хочу сделать запрос наподобие этого: «ВЫБЕРИТЕ поставщика из таблицы1 ГДЕ Продукт =» яблоко "GROUP BY Supplier". Сначала я просто попытался написать запрос с именами таблиц и столбцов, но это не сработало. Поэтому я попытался использовать диапазоны вместо имен таблиц и столбцов.

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim tblRng As Range
Dim clmRng1 As Range
Dim clmRng2 As Range

strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

tblRng = Sheets("sheet1").ListObjects("table1").DataBodyRange
clmRng1 = Sheets("sheet1").ListObjects("table1").ListColumns("Supplier").DataBodyRange
clmRng2 = Sheets("sheet1").ListObjects("table1").ListColumns("Product").DataBodyRange

strSQL = "SELECT " & clmRng1 & " FROM " & tblRng & " WHERE " & clmRng2 & " = 'apple' GROUP BY " & clmRng1
rs.Open strSQL, cn

Debug.Print rs.GetString

Я получаю сообщение об ошибке «Переменная объекта или переменная блока не установлена». Моя главная проблема в том, что я чувствую, что это очень косвенный способ сделать это, и мне было интересно, есть ли более простой способ выполнить sh эту задачу?

1 Ответ

1 голос
/ 23 апреля 2020

Попробуй,

    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim objList As ListObject
'    Dim tblRng As Range
'    Dim clmRng1 As Range
'    Dim clmRng2 As Range
    Dim s As String

    strFile = ThisWorkbook.FullName
    strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open strCon

'    tblRng = Sheets("sheet1").ListObjects("table1").DataBodyRange
'    clmRng1 = Sheets("sheet1").ListObjects("table1").ListColumns("Supplier").DataBodyRange
'    clmRng2 = Sheets("sheet1").ListObjects("table1").ListColumns("Product").DataBodyRange
    Set objList = Sheets(1).ListObjects("table1")
    s = objList.Range.Address(0, 0)

    'strSQL = "SELECT " & clmRng1 & " FROM " & tblRng & " WHERE " & clmRng2 & " = 'apple' GROUP BY " & clmRng1
    strSQL = "SELECT supplier FROM [Sheet1$" & s & "]  WHERE  Product = 'apple' GROUP BY supplier "

    rs.Open strSQL, cn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...