刷新事件 VBA 之前/之后的错误处理程序

Error Handler on Before/After Refresh Event VBA

提问人:Starbucks 提问时间:10/11/2023 最后编辑:Starbucks 更新时间:10/11/2023 访问量:58

问:

这是我对查询刷新事件之前/之后的引用

为了从 SQL Server 导入数据,我有一个参数化查询,需要用户输入日期。

  1. 当用户正确输入开始日期和结束日期时,一切都按正确的顺序完成,案例关闭。

  2. 但是,当日期不正确时,不会触发错误处理程序,并且宏会一直持续到 AfterRefresh 事件。

我为每个模块添加了错误处理程序,但它们仍然没有响应。有谁知道如何将错误处理程序添加到刷新前/刷新事件中?

Power Query 代码的逻辑如下所示,但不是以这种方式编写的:

let 
    Source = Sql.Database("MyDataBase", [Query="Select Transaction_date, Customer_ID
                                                from TransactionList
                                                where Transaction_date between @StartDate and @EndDate]
in
    Source

下面的VBA代码

'========== [ Modules ] ========== 
Option Explicit 
Dim colQueries As New Collection

Sub Button_RefreshData() 
On Error GoTo Error_Handler

    Call InitializeQueries
    ThisWorkbook.RefreshAll
Exit Sub
Error_Handler: 
    MsgBox Err.Number & " " & Err.Source & vbNewLine & Err.Description, vbInformation 
    Exit Sub 
End Sub

Sub InitializeQueries() 
On Error GoTo Error_Handler
Dim clsQ As clsQuery 
Dim WS As Worksheet 
Dim QT As QueryTable 
Dim LO As ListObject

For Each WS In ThisWorkbook.Worksheets 
    For Each QT In WS.QueryTables 
        Set clsQ = New clsQuery 
        Set clsQ.MyQuery = QT 
        colQueries.Add clsQ 
    Next QT 
    For Each LO In WS.ListObjects 
        Set QT = LO.QueryTable 
        Set clsQ = New clsQuery 
        Set clsQ.MyQuery = QT 
        colQueries.Add clsQ 
    Next LO 
Next WS
Exit Sub
Error_Handler: 
    MsgBox Err.Number & " " & Err.Source & vbNewLine & Err.Description, vbInformation 
    Exit Sub 
End Sub
'========== [ Class Modules named clsQuery ] ========== 
Option Explicit 
Public WithEvents MyQuery As QueryTable

Private Sub MyQuery_AfterRefresh (ByVal Success As Boolean) 
On Error GoTo Error_Handler
    If Success Then MsgBox ("The entire process is complete.") 
Exit Sub
Error_Handler: 
    MsgBox Err.Number & " " & Err.Source & vbNewLine & Err.Description, vbInformation 
    Exit Sub 
End Sub

Private Sub MyQuery_BeforeRefresh (Cancel As Boolean) 
On Error GoTo Error_Handler
    MsgBox ("The process start now.") 
Exit Sub
Error_Handler: 
    MsgBox Err.Number & " " & Err.Source & vbNewLine & Err.Description, vbInformation 
    Exit Sub 
End Sub
Excel VBA 错误处理 PowerQuery 刷新

评论

0赞 Darren Bartrup-Cook 10/11/2023
我可以看到的主要问题是您的错误处理程序位于代码的主体中。错误处理程序应位于代码末尾的 an 之后和 .我不认为这会阻止您的线路工作,但它会尝试在每个过程结束时显示错误消息,无论是否发生错误。Exit SubEnd SubOn Error Goto
0赞 CHill60 10/11/2023
根据我自己的经验,VBA 无法捕获 Power Query 触发的错误。我将尝试找出我们是否应用了替代的“创造性”解决方案
0赞 Starbucks 10/11/2023
@DarrenBartrup-Cook 对不起,我的问题有误。我实际上将错误处理程序放在 Exit Sub 之前。我将修改我关于这个问题的代码。但错误处理程序仍未触发。
0赞 Starbucks 10/11/2023
@CHill60 根据我的经验,当不使用之前/之后刷新事件时,错误处理程序可以捕获电源查询上的错误。我不知道刷新前/刷新事件的错误处理程序。谢谢你的分享
0赞 CHill60 10/12/2023
刷新前不会触发错误处理程序,因为在刷新之前不会发生错误。与刷新后相同 - 刷新期间发生错误 - 我从未见过 VBA 中的错误对此做出响应。如果你有 - 太好了,这就是你应该寻找的地方。但即使这样也无法为我捕获错误Sub demo() On Error GoTo X ThisWorkbook.RefreshAll Exit Sub X: MsgBox "never gets here" End Sub

答: 暂无答案