我有一个工作簿,其中包含多个PowerQuery查询连接到其他工作簿。
每年在财年结束时需要更新此工作簿 - 这意味着查询需要指向新的工作簿。当然可以手动完成这些操作,但是有很多查询而且普通用户不知道如何操作(并且大部分PowerQuery功能对用户来说是故意隐藏的)。
因此,我编写了一些代码,允许用户选择指向新工作簿,然后该代码将使用新的源工作簿更新PQ公式。这一切都运行正常。
问题是,我需要确保用户选择了有效的工作簿,以便查询仍然能够工作。我的计划是简单地更新公式为新工作簿名称,然后运行"Refresh",并捕获任何错误(如果刷新正常,则我的假设是所选工作簿是有效的)。
但是这里出现了问题。当我在VBA中使用".Refresh"方法时,没有报告任何错误。确实有一个用户对话框报告错误,但是VBA没有捕获任何信息-代码继续运行,就好像一切都很正常,也没有引发任何错误编号。
而且,该对话框不会响应Application.DisplayAlerts = False。它仍然显示,然后VBA代码继续运行,就好像什么也没有发生一样。
那么,有人知道是否有任何方法可以捕获此错误吗?FYI我用于"Refresh"的代码如下(简化版):
每年在财年结束时需要更新此工作簿 - 这意味着查询需要指向新的工作簿。当然可以手动完成这些操作,但是有很多查询而且普通用户不知道如何操作(并且大部分PowerQuery功能对用户来说是故意隐藏的)。
因此,我编写了一些代码,允许用户选择指向新工作簿,然后该代码将使用新的源工作簿更新PQ公式。这一切都运行正常。
问题是,我需要确保用户选择了有效的工作簿,以便查询仍然能够工作。我的计划是简单地更新公式为新工作簿名称,然后运行"Refresh",并捕获任何错误(如果刷新正常,则我的假设是所选工作簿是有效的)。
但是这里出现了问题。当我在VBA中使用".Refresh"方法时,没有报告任何错误。确实有一个用户对话框报告错误,但是VBA没有捕获任何信息-代码继续运行,就好像一切都很正常,也没有引发任何错误编号。
而且,该对话框不会响应Application.DisplayAlerts = False。它仍然显示,然后VBA代码继续运行,就好像什么也没有发生一样。
那么,有人知道是否有任何方法可以捕获此错误吗?FYI我用于"Refresh"的代码如下(简化版):
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,问题仍然存在。
根据微软的文档,我应该能够停止对话框,但是对我没有用(请参见https://msdn.microsoft.com/VBA/Excel-VBA/articles/workbookconnection-refresh-method-excel)。
谢谢!