我在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连接上。有什么想法吗?
答案 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个字符)等于字符串"查询 - "然后... 的
如果您有大量电源查询,我建议您不要立即更新所有电源查询。您的计算机可能会崩溃,并且您的Excel可能没有自动保存。
快乐编码:)
答案 1 :(得分:2)
由于您使用的Power Query与Power Pivot不同,因此您有两种选择:
编写用于更新它的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>
答案 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格式:)