[已解决] 请教:1个文件中3个PQ查询,怎样实现先后刷新而不是同时...

  [复制链接]
查看82565 | 回复104 | 2021-2-19 00:10:21 | 显示全部楼层 |阅读模式
在1个文件有3个查询(名称分别为A、B、C),其中:A查询引用其他工作簿的表,B使用本地表和A查询合并查询,C是引用B查询制作的透视表、PQ自动建立的查询。当其他工作簿的表数据修改后并保存关闭,点击1次“全部刷新”后,A更新了数据,但B和C还是使用旧数据刷新,因为他们是同时刷新的。所以请问,有没有什么办法(除了各自刷新,要操作3次),操作1次,让A先刷新,然后B自动刷新,然后C自动刷新?如果是用VBA,怎么写?谢谢!
回复

使用道具 举报

laponland | 2021-2-19 00:17:21 | 显示全部楼层
没有附件看不懂
回复

使用道具 举报

dgvios | 2021-2-19 00:20:22 | 显示全部楼层
或者简单点,不要管ABC的数据来源是什么,怎么实现:操作1次,让A先刷新,然后B再自动刷新,然后C再自动刷新?如果用VBA实现,命令怎么写?
回复

使用道具 举报

赤脚天使 | 2021-2-19 00:26:22 | 显示全部楼层
PQ默认的刷新就是按照你希望的顺序进行的
回复

使用道具 举报

嘉瓜 | 2021-2-19 00:31:22 | 显示全部楼层
PQ默认的刷新就是按照你希望的顺序进行的


老大,真不是的。我的表要点2次“全部刷新”,最后的表才反映出真实数据。由于数据量非常大,在点击“全部刷新”时,可以看到每个查询的刷新纪录滚动数,他们的记录数是同时滚动的增加的,而不是一个增加完后,另一个才开始滚动增加的。
回复

使用道具 举报

宝来 | 2021-2-19 00:36:22 | 显示全部楼层
这是个好问题,持续关注
回复

使用道具 举报

wwolf | 2021-2-19 00:42:23 | 显示全部楼层
这是个好问题,持续关注


谢谢!由于我是财务出身,非常喜好计算机软硬件和编程,而且已经用Excel的常规表函数制作了相同功能的数据计算文件,因此对PQ(刚接触3个月,主要看界面各功能生成的命令和论坛高手提供的函数帮助文档)最后生成的数据十分肯定其准确性。同时对PQ刷新的各种细节数据观察比较仔细。以前使用VFP+SQL编程,后来玩彩票用Visual Studio的VB编过一点,这些面向对象的语言的编程思路和方法很像,只是不知道VBA中如指向或者调用PQ查询。
回复

使用道具 举报

dgzxg | 2021-2-19 00:45:23 | 显示全部楼层
老大,真不是的。我的表要点2次“全部刷新”,最后的表才反映出真实数据。由于数据量非常大,在点击“全 ...


可以搞个几行的示例数据,把文件传上来我测试一下
回复

使用道具 举报

宫城飞雪 | 2021-2-19 00:50:23 | 显示全部楼层
假设你有3个查询:查询名1 查询名2查询名3 ,你想依次执行:
执行RefreshSequence过程即可(在excel中文版,注意在查询名前要加 “查询 - ”!)。
    过程里面调用UpdatePowerQuery函数
---------------------------------------------------
Sub RefreshSequence()
    UpdatePowerQuery "查询 - 查询名1"
    UpdatePowerQuery "查询 - 查询名2"
    UpdatePowerQuery "查询 - 查询名3"
End Sub
------------------------------------------------------

Public Function UpdatePowerQuery(sQueryName As String) As Boolean
  'Written by Ken Puls (www.excelguru.ca)
  'Function Purpose: Update Power Queries without background refresh
  ' (This allows completion before next step of macro is triggered)
  
  Dim cn As WorkbookConnection
  On Error Resume Next
  Set cn = ThisWorkbook.Connections(sQueryName)
  If Err.Number  0 Then
  Err.Clear
  GoTo NoConnection
  End If
  
  With cn
  .OLEDBConnection.BackgroundQuery = False
  .Refresh
  .OLEDBConnection.BackgroundQuery = True
  End With
  
  UpdatePowerQuery = True
  Exit Function
  
NoConnection:
  UpdatePowerQuery = False

End Function
回复

使用道具 举报

xuhui2004 | 2021-2-19 00:56:23 | 显示全部楼层
假设你有3个查询:查询名1 查询名2查询名3 ,你想依次执行:
执行RefreshSequence过程即可(在exc ...


把您的提供的程序新建个按钮并加入click事件程序。为了对比,复制了几个文件副本。
1、点击运行后,看到3个查询的滚动行次是按照程序审计的顺序依次进行滚动更新的,一下子心花怒放。
2、与用表函数做的模型得出的数据结果,以及单纯是多次点击“全部刷新”菜单得出的数据结果对比,您的程序结果是一次得出了正确的结果。

总之,这段程序就是我想要的程序,您完美解决了我想要处理的问题。即使不是为了得到最后的结果,只是想人为地选择刷新哪些查询、控制刷新顺序,您的程序都完全实现了。太感谢了!谢谢您了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则