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接続にあります。何かご意見は?
実際にはかなり簡単です。既存の接続を確認すると、パワークエリの接続名がどのように始まるかがわかります。「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文字)が文字列「クエリ-」に等しい場合
大量のクエリがある場合は、一度にすべてのパワークエリを更新しないことをお勧めします。コンピューターがおそらくクラッシュし、Excelが自動保存されていない可能性があります。
ハッピーコーディング:)
Power Pivotとは異なるPower Queryを使用しているため、2つのオプションがあります。
更新するためのVBAスクリプトを作成する
For Each cn In ThisWorkbook.Connections If cn = "Power Query – Employee" Then cn.Refresh Next cn End Sub
ループを介してすべての接続を更新すると、これが発生する順序を制御できなくなります。シーケンスの制御が必要な場合、またはいくつかのパワークエリのみを更新する必要がある場合、これもオプションです。
最初の関数は、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
このコードも試すことができます
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形式としても保存されます:)