我有一个工作簿,其中有几个PowerQuery查询到其他工作簿。
每年每年都会更新此工作簿 - 这意味着查询需要每年指向新的工作簿。这当然可以手动完成,但是有很多查询,普通用户不知道如何(以及大部分PowerQuery功能都是故意隐藏的)。
所以我编写了一些代码以允许用户选择要指向的新工作簿,然后此代码使用新的源工作簿更新PQ公式。一切正常。
问题是,我需要确保用户选择了有效的工作簿,以便查询仍然有效。我的计划是简单地使用新的工作簿名称更新公式,然后运行Refresh,并捕获任何错误(如果刷新工作正常,那么我的假设是选择的工作簿是有效的。)
但这是问题所在。当我在VBA中使用.Refresh方法时,不会报告错误。有一个用户对话框报告错误,但VBA没有捕获任何内容 - 代码继续运行,好像一切正常,并且没有引发错误编号。
而且,对话框不会对Application.DisplayAlerts = False做出反应。它仍然显示,然后VBA代码继续,好像什么也没发生。
所以有人知道我是否有任何方法可以捕获此错误?仅供参考我用于重新打包的代码如下(简化):
Application.DisplayAlerts = False ' This does not stop the user dialog!
Dim conn as WorkbookConnection
Set conn = ThisWorkbook.Connections("MyQueryName")
conn.Refresh 'No error raised here, even if the Refresh fails
(there is however a user error dialog)
(如果我使用conn.OLEDBConnection.Refresh,问题是相同的)
根据MS文档,我应该能够停止对话框,但它对我不起作用(参见https://msdn.microsoft.com/VBA/Excel-VBA/articles/workbookconnection-refresh-method-excel)
谢谢!
答案 0 :(得分:0)
两个选项:
检查Power Query M代码中的错误。如果检测到错误,则输出不同的数据表,可能是仅包含错误代码的1x1表。发生此错误时,PQ刷新成功完成(就PQ而言),用户不会收到任何错误消息,并且您的VBA代码可以检查PQ是否生成了错误表。
对QueryTable使用AfterRefresh事件,如下所述: How to check whether Connection Refresh was successful
我过去使用过#1。我刚发现#2并尝试过它。它适用于我,但它不会阻止PQ错误消息。