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

问题描述 投票:0回答:1

这是我对查询刷新事件之前/之后的参考

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

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

  2. 但是,当日期不正确时,不会触发错误处理程序,宏将继续执行,直到 AfterRefresh 事件发生。

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

电量查询代码逻辑如下,但不是这样写的:

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 error-handling powerquery refresh
1个回答
0
投票

但是,当日期不正确时 - 你说。那么您应该考虑在查询中使用用户输入之前测试它。一种方法是使用 CDate 来验证它是否是有效日期。

尝试将此作为您的用户输入和验证:

Sub InputDates()
' With test of valid date

TryAgainFrom:
    On Error GoTo ErrHandlerFromDate
    FromDate = CDate(InputBox("Input a from date:", "From:", Format(Now() - 365, "DD.MM.YYYY")))

TryAgainTo:
    On Error GoTo ErrHandlerToDate
    ToDate = CDate(InputBox("Input a to date:", "To:", Format(Now() - 365, "DD.MM.YYYY")))

' Bouth dates are valid dates
MsgBox ("Range from " & Format(FromDate, "dd.mm.yyyy") & " to " & Format(ToDate, "dd.mm.yyyy"))

Exit Sub
ErrHandlerFromDate:
    MsgBox "Your input From date is not a valid date! - Please try again."
    Resume TryAgainFrom

ErrHandlerToDate:
    MsgBox "Your input To date is not a valid date! - Please try again."
    Resume TryAgainTo

End Sub


 
© www.soinside.com 2019 - 2024. All rights reserved.