Страницы: 1
RSS
Как сделать SQL запрос внутри книги на основе динамического именованного диапазона
 
Здравия желаю уважаемые жители Планета Excel. Бью челом и уповаю на Вашу мудрость и снисходительность. Три дня и три ночи бьюсь с окаянной задачей, а она не бьётся. Пытаюсь внутри одной книги (прилагается) сделать выборку с именованного динамического диапазона "таб_дан", который формируется на основе данных листа "данные", и выгрузить её на лист "выборка", но Microsoft Query не видит указанный именованный диапазон.
Подскажите, пожалуйста, каким SQL запросом можно обратиться к именованному динамическому диапазону? (в первую очередь интересует вариант без использования макросов, если это возможно вообще)
Мира и спокойствия всем и помогающим, и заглядывающим, и не заглядывающим. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, не все имена достаточно именитые ;)
В качестве имён ADO воспринимает только ссылку на диапазон. Даже имена умных таблиц не могут быть использованы. Скрипт от Владимира (ZVI) для получения списка имён таблиц (листы и именованные диапазоны), которые видит ADO.
Код
Public Sub PrintTableNames()
    Dim pConn As Object, pRSet As Object
    
    Set pConn = CreateObject("ADODB.Connection")
    pConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties='Excel 12.0;HDR=YES';"
    
    Set pRSet = pConn.OpenSchema(adSchemaTables)
    Do Until pRSet.EOF
        Debug.Print pRSet("TABLE_NAME").Value
        pRSet.MoveNext
    Loop
    pRSet.Close: pConn.Close
    Set pRSet = Nothing: Set pConn = Nothing
End Sub


Успехов.
 
Андрей VG, спасибо за Ваше участие в данной теме.
Относительно вопроса, т.е. не судьба скормить запросу динамический именованный диапазон или проблема в имени?
По поводу макроса. Открыл злополучную книгу, в ВБА редакторе добавил новый модуль, вставил код. При попытке его выполнения выдаётся ошибка на строке №7:
Код
    Set pRSet = pConn.OpenSchema(adSchemaTables)
Текст ошибки:
Цитата
Run-time error '3251': Объект или поставщик не может выполнить требуемую операцию.
Что я делаю не так? (офис 2010 х64, винда 7 х64)
Спасибо.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
JayBhagavan, извините, делал на раннем связывании, и при переделке на позднее не поменял имя константы перечисления на её значение. Должно быть
Код
Set pRSet = pConn.OpenSchema(20)

Цитата
т.е. не судьба скормить запросу динамический именованный диапазон
С этим действительно не судьба, поскольку это скорее похоже на именованную функцию, чем на диапазон данных.
Изменено: Андрей VG - 04.11.2015 13:13:54
 
Андрей VG, простите, что Вас безпокою. Спасибо за макрос. В общем моя хотелка нереализуема тем способом, который я выбрал, как я понял. Ну, что же, не будем унывать - будем искать другие пути решения. :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Доброе время суток
JayBhagavan, вроде, разобрался, почему ADO не считает динамический именованный диапазон, возвращаемый формулами, за допустимый. В свойстве RefersToRange объекта Name в этом случае ошибка. Можно воспользоваться следующим кодом.
Код
Private Function IsAdoName(ByVal thisName As Name) As Boolean
On Error GoTo errHandle
    Dim pRange As Range
    Set pRange = thisName.RefersToRange
    IsAdoName = True
Exit Function
errHandle:
    IsAdoName = False
End Function
Public Sub TestNames()
    Dim pName As Name
    For Each pName In ThisWorkbook.Names
        Debug.Print pName.Name & " = " & IsAdoName(pName)
    Next
End Sub


Успехов.
P. S. как выяснилось, имена умных таблиц вообще не входят в коллекцию имён книги, хотя в интерфейсе показываются наряду с обычными именами.
 
Андрей VG, доброго Вам здравия. Спасибо, что уделяете внимание поднятому вопросу. Возьму себе на заметку всё Вами сказанное и показанное.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
Страницы: 1
Наверх