2016-04-28 4 views
2

У меня есть Power Query, установленный в myexcel.xlsx. Я установил свойства своих соединений как this и this.Автоматическое обновление подключения к источнику питания через VBA

Я написал код VBA, как следующего

Sub UpdateData() 
    Dim filename As String 
    Dim wbResults As Workbook 
    filename = "C:\myexcel.xlsx" 
    Set wbResults = Workbooks.Open(filename) 

    ActiveWorkbook.RefreshAll 
    wbResults.Close savechanges:=True 

End Sub 

Когда я открыть myexcel.xslx вручную, обновление подключения питания запросов. Но через код VBA это не так. Я должен добавить, что я тестировал это со старомодным Excel Connection, и он отлично работает через код VBA. Но проблема связана с подключениями Power Query. Есть предположения?

+0

Я бы не предложил использовать метод RefreshAll, ВСЕ, КОГДА-ЛИБО! Просто потому, что в моей книге у меня будет более 300 запросов, если мы случайно удалим обновление, компьютер будет разбиваться. Вы можете обновить запрос по его имени или если запрос начинается с определенных символов. Если у вас есть ваши запросы, подобные мне и использующие соглашение об именах, вы можете обновить запросы «grp1_Qry_1», «grp1_Qry_2» и т. Д., Вы можете - например: обновить все quereis, которые начинаются с «grp1_». Гораздо лучше, чем обновлять все запросы. Маленькие подсказки * вопросы с запросами на подключение начинаются с «Query -» ... См. Мой ответ :) –

ответ

1

Поскольку вы используете питания запроса, которая отличается от мощности Pivot, у вас есть два варианта:

  1. Автоматическое обновление источника данных, когда файл открыт - (http://www.excel2013.info/power-query/automatic-update/)
  2. Напишите VBA скрипт для обновления его

    For Each cn In ThisWorkbook.Connections If cn = "Power Query – Employee" Then cn.Refresh Next cn End Sub

скопирована с ч ere: https://devinknightsql.com/category/power-query/

+0

Я сделал оба. Это не работает.Я даже написал код как это: Dim сп Как WorkbookConnection Для каждого сп В ThisWorkbook.Connections cn.Refresh Следующая сп – Salim

+0

могли бы вы добавить изображение другой вкладке соединения? –

+0

@Hila_DG Спасибо, что ответили! Я только что добавил – Salim

3

Это довольно просто, если вы проверите свои существующие соединения, вы можете увидеть, как начинается имя подключения к источнику питания, они все одинаковы в том смысле, что они начинаются с «Запроса» - а затем имя ... в моем проекте, я написал этот код, который работает:

Sub RefreshQuery() 
Dim con As WorkbookConnection 
Dim Cname As String 

For Each con In ActiveWorkbook.Connections 
    If Left(con.name, 8) = "Query - " Then 
    Cname = con.name 
     With ActiveWorkbook.Connections(Cname).OLEDBConnection 
      .BackgroundQuery = False 'or true, up to you 
      .Refresh 
     End With 
    End If 
Next 
End Sub 

Это обновит все энергетические запросы, но и в коде вы можете видеть, что говорит:

If Left(con.name, 8) = "Query - " Then 

Это означает, что если название соединения, первые восемь символов, начиная от левого и движется в направлении вправо (первые 8 символов) равна строка «Query -» затем ...

  • и если вы знаете имя ваш запрос, настройте 8 на число, которое укажет количество символов в вашем имени запроса, а затем сделайте оператор равным имени вашего запроса, а не началу всех подключений запроса питания («Запрос -»).

Я бы посоветовал НИКОГДА не обновлять все энергетические запросы сразу, если у вас их большое количество. Возможно, ваш компьютер сработает, и ваше преимущество может не быть сохранено автоматически.

Счастливое кодирование :)