Страницы: 1
RSS
VBA Power Pivot изменить путь к источникам
 

Коллеги, здравствуйте!

 Кому-нибудь уже удавалось с помощью VBA успешно изменить путь к внешним  источникам Power Pivot (подключение к источникам из PP, PQ не  задействован)? Всё перепробовал и перелазил инет. Неужели, это  невозможно?

 
Доброе время суток
Цитата
Сергей написал:
 Кому-нибудь уже удавалось с помощью VBA успешно изменить путь к внешним  источникам Power Pivot (подключ
Не пробовали изучить ModelConnection object (Excel) или ждёте, что кто-то будет готов статью написать по этому поводу? Так для этого как минимум нужно не постесняться сообщить о версии Excel :)  Или вы считаете, что на форуме вас должны уговаривать, типа это отвечающему нужно, а не вопрошающему? А остальные, быть может знающие, но не понимающие суть вопроса могут ходить мимо, чтобы не засорять ВАШУ тему, ибо вам некогда отвечать на разные вопросы? :)
Изменено: Андрей VG - 07.08.2019 23:16:21
 
Андрей VG,версия 2019, ModelConnection изучал, ковырял, тестировал. Но, оказывается, что если соединение установлено из PP, то connection read-only. https://stackoverflow.com/questions/29900967/use-excel-vba-to-change-powerpivot-connection-to-csv-file Вопрос задал, с надеждой, что кто-нибудь нашёл обходной путь.
 
Зачем пользоваться костылем соединения в PP?

Я столкнулся с похожей проблемой и тоже хотел идти через PP, но в итоге решил ее через удаление старого подключения и добавления такого же нового в PQ. Проблема read-only в таком случае нас совсем не волнует.
Если нужно решить конкретно read-only проблему, то нужно понимать, что работать в окне power pivot (менять типы данных, делать какие-то трансформации) нельзя. Что-то похожее на ниже сделано у меня.
Код
    With ThisWorkbook
        On Error Resume Next
     
            .Connections("название вашей связи").Delete
            .Queries("название вашего запроса").Delete '''не обязательно, но для спокойствия души
            
        On Error GoTo 0
        
        .Queries.Add Name:="название вашей связи", Formula:= "ваша query формула"   
        .Connections.Add2 "добавляете реквизиты отталкиваясь от запроса строкой выше"
    End With

Если используете связи, то потом делаем вот это:
Код
Sub addToDataModel(m As Excel.Model, fkTable, fkColumn, pkTable, pkColumn)
    Dim pkTbl As ModelTable
    Dim fkTbl As ModelTable
    Dim fkCol As ModelTableColumn
    Dim pkCol As ModelTableColumn

    DoEvents
    
    Set pkTbl = m.ModelTables(pkTable)
    Set fkTbl = m.ModelTables(fkTable)
    Set fkCol = fkTbl.ModelTableColumns(fkColumn)
    Set pkCol = pkTbl.ModelTableColumns(pkColumn)
    
    m.ModelRelationships.Add _
        ForeignKeyColumn:=fkCol, _
        PrimaryKeyColumn:=pkCol
    Application.StatusBar = False
End Sub

Sub addQueryToDataModel()
   Dim md As Model

   Set md = ThisWorkbook.Model
   addToDataModel md, "Таблица1 "Ключ1", _
                        "Таблица2", "Ключ2"
''' Далее повторяем для всех связей с другими названиями (это понятно)
   addToDataModel md, "Таблица1 "Ключ1", _
                        "Таблица2", "Ключ2"
End sub

Есть еще один способ. Связан с удалением всех связей в модели данных. В таком случае (если не было трансформаций и манипуляций в power pivot) формулу в запросе можно менять.
Изменено: Все_просто - 08.08.2019 14:43:53
С уважением,
Федор/Все_просто
Страницы: 1
Наверх