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

时间:2016-04-28 00:01:48

标签: excel vba powerquery data-connections

我在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

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

4 个答案:

答案 0 :(得分:7)

实际上相当简单,如果你查看现有的连接,你可以看到电源查询连接名称是如何开始的,它们从它们开始的意义上来说都是一样的"查询 - & #34;然后是名字......在我的项目中,我编写了这个有效的代码:

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

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

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

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

快乐编码:)

答案 1 :(得分:2)

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

  1. 自动在文件打开时更新数据源 - (http://www.excel2013.info/power-query/automatic-update/
  2. 编写用于更新它的VBA脚本

    <receiver android:name=".AlarmReceiver" android:enabled="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> <intent-filter> <action android:name="dk.aau.student.b211.sleepattention.SET_NOTIFICATIONS" /> </intent-filter> </receiver>

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

答案 2 :(得分:1)

如果通过循环刷新所有连接,则无法控制发生的顺序。如果您需要控制顺序,或者只需要刷新几个电源查询,也可以选择以下方法:

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

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

Public Sub RefreshListOfPowerQueries()

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

End Sub
{{1}}

答案 3 :(得分:0)

您也可以尝试此代码

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格式:)