首页 文章

从PowerQuery刷新查询时无法捕获VBA中的错误

提问于
浏览
1

我有一个工作簿与其他工作簿的几个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

谢谢!

1 回答

  • 0

    两种选择:

    • 检查Power Query M代码中的错误 . 如果检测到错误,则输出不同的数据表,可能是仅包含错误代码的1x1表 . 发生此错误时,PQ刷新成功完成(就PQ而言),用户不会收到任何错误消息,并且您的VBA代码可以检查PQ是否生成错误表 .

    • 对QueryTable使用AfterRefresh事件,如下所述:How to check whether Connection Refresh was successful

    我过去使用过#1 . 我刚发现#2并尝试过它 . 它适用于我,但它不会阻止PQ错误消息 .

相关问题