ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4209|回复: 14

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

[复制链接]

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2019-3-14 11:04 | 显示全部楼层
没有附件看不懂

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-14 11:20 | 显示全部楼层
本帖最后由 wsdrm 于 2019-3-14 11:22 编辑

或者简单点,不要管ABC的数据来源是什么,怎么实现:操作1次,让A先刷新,然后B再自动刷新,然后C再自动刷新?如果用VBA实现,命令怎么写?

TA的精华主题

TA的得分主题

发表于 2019-3-14 11:23 | 显示全部楼层
PQ默认的刷新就是按照你希望的顺序进行的

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-14 11:38 | 显示全部楼层
PowerBI极客 发表于 2019-3-14 11:23
PQ默认的刷新就是按照你希望的顺序进行的

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

TA的精华主题

TA的得分主题

发表于 2019-3-14 11:49 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-14 12:13 | 显示全部楼层
201228 发表于 2019-3-14 11:49
这是个好问题,持续关注

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

TA的精华主题

TA的得分主题

发表于 2019-3-16 09:25 | 显示全部楼层
wsdrm 发表于 2019-3-14 11:38
老大,真不是的。我的表要点2次“全部刷新”,最后的表才反映出真实数据。由于数据量非常大,在点击“全 ...

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

TA的精华主题

TA的得分主题

发表于 2019-3-16 10:21 | 显示全部楼层
假设你有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

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-16 22:38 | 显示全部楼层
本帖最后由 wsdrm 于 2019-3-16 22:41 编辑
zjnfxxh 发表于 2019-3-16 10:21
假设你有3个查询:查询名1   查询名2  查询名3   ,你想依次执行:
  执行RefreshSequence过程即可(在exc ...

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

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 03:29 , Processed in 0.042998 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表