web-dev-qa-db-ja.com

VBAを介したPower Query接続の自動更新

Myexcel.xlsxにPower Queryを設定しています。接続のプロパティを this および this に設定しました。

私は次のような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を手動で開くと、Power Query接続が更新されます。しかし、VBAコードではそうではありません。昔ながらのExcel接続でこれをテストしましたが、VBAコードで問題なく動作します。しかし、問題はPower Query接続にあります。何かご意見は?

6
Salim

実際にはかなり簡単です。既存の接続を確認すると、パワークエリの接続名がどのように始まるかがわかります。「Query-」で始まり、その後に名前が続くという意味では、すべて同じです...私のプロジェクト、私は動作するこのコードを書きました:

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文字(最初の8文字)が文字列「クエリ-」に等しい場合

  • クエリの名前がわかっている場合は、8をクエリ名の文字数を示す数字に調整し、すべてのパワークエリ接続の開始ではなく、クエリ接続名と同じステートメントを作成します( 「クエリ-")...

大量のクエリがある場合は、一度にすべてのパワークエリを更新しないことをお勧めします。コンピューターがおそらくクラッシュし、Excelが自動保存されていない可能性があります。

ハッピーコーディング:)

11
James Heffer

Power Pivotとは異なるPower Queryを使用しているため、2つのオプションがあります。

  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

ここからコピー: https://devinknightsql.com/category/power-query/

3
Hila DG

ループを介してすべての接続を更新すると、これが発生する順序を制御できなくなります。シーケンスの制御が必要な場合、またはいくつかのパワークエリのみを更新する必要がある場合、これもオプションです。

最初の関数は、1つのPower Queryを更新します。括弧内の関数の引数は、Excelの[クエリと接続]ペインに表示されるクエリの名前です。接頭辞として「Query-」を追加することにより、これがどのように接続名に変換されるかに注意してください。

次に、2番目の関数は最初の関数を使用して特定のパワークエリを特定の順序で呼び出し、完全な制御を提供します。

Public Sub RefreshSpecificPowerQuery(pqName As String)

Dim con As WorkbookConnection
Dim conName As String

conName = "Query - " & pqName

With ActiveWorkbook.Connections(conName).OLEDBConnection
    .BackgroundQuery = False    'or TRUE, as the case requires
    .Refresh
End With

End Sub
Public Sub RefreshListOfPowerQueries()

Call RefreshSpecificPowerQuery("pqMyFirstPowerQueryName")
Call RefreshSpecificPowerQuery("pqMySecondPowerQueryName")

End Sub
1
Nick Van Maele

このコードも試すことができます

Sub auto_open()
    ActiveWorkbook.RefreshAll
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
    ThisWorkbook.Save
    ChDir "D:\Data"
    ActiveWorkbook.SaveAs Filename:="D:\Data\abc.txt", FileFormat:=xlText, CreateBackup:=False
    Application.Quit
End Sub

その時にファイルを開くと、マクロが自動的に実行され、データも保存され、最後のファイルにはTXT形式としても保存されます:)

0
Viper