通过VBA自动更新电源查询连接

Sal*_*lim 6 excel vba data-connections powerquery

我在myexcel.xlsx中设置了Power Query.我将其连接的属性设置为 thisthis.

我写了一个如下的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
Run Code Online (Sandbox Code Playgroud)

当我手动打开myexcel.xslx时,Power Query连接会更新.但是通过VBA代码却没有.我应该添加我使用旧式Excel连接测试它,并通过VBA代码正常工作.但问题出在Power Query连接上.有什么想法吗?

Jam*_*fer 10

这实际上相当简单,如果你查看你现有的连接,你可以看到电源查询连接名称是如何开始的,它们都是从"查询 - "开始,然后是名字......所以它们都是相同的.我的项目,我写了这个代码有效:

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
Run Code Online (Sandbox Code Playgroud)

这将刷新您的所有电源查询,但在代码中您可以看到它:

If Left(con.name, 8) = "Query - " Then
Run Code Online (Sandbox Code Playgroud)

这只是意味着如果连接的名称,从LEFT开始并向右移动的前EIGHT字符(前8个字符)等于字符串"Query - "则...

  • 如果您知道查询的名称,请将8调整为一个数字,该数字将指示查询名称中的字符数,然后使该语句等于查询连接名称,而不是所有电源查询连接的开头( "查询 - ")...

如果您有大量的查询,我建议不要立即更新所有电源查询.您的计算机可能会崩溃,并且您的Excel可能没有自动保存.

快乐编码:)


小智 7

如果通过循环刷新所有连接,则无法控制发生这种情况的顺序。如果您需要控制顺序,或者只需刷新几个 Power Queries,这也是一个选项:

第一个函数刷新一个 Power Query。括号中的函数参数是在 Excel 的“查询和连接”窗格中可见的查询名称。请注意如何通过添加“Query - ”作为前缀将其转换为连接名称。

然后,第二个函数使用第一个函数以特定顺序调用特定的 Power Queries,从而为您提供完全控制权。

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
Run Code Online (Sandbox Code Playgroud)
Public Sub RefreshListOfPowerQueries()

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

End Sub
Run Code Online (Sandbox Code Playgroud)


Hil*_* DG 4

由于您使用的是与 Power Pivot 不同的 Power Query,因此您有两个选择:

\n\n
    \n
  1. 文件打开时自动更新数据源 - ( http://www.excel2013.info/power-query/automatic-update/ )
  2. \n
  3. 编写一个 VBA 脚本来更新它

    \n\n

    \nFor Each cn In ThisWorkbook.Connections \n If cn = "Power Query \xe2\x80\x93 Employee" Then cn.Refresh \n Next cn \nEnd Sub\n

  4. \n
\n\n

从这里复制:\n https://devinknightsql.com/category/power-query/

\n