提问人:Starbucks 提问时间:10/11/2023 最后编辑:Starbucks 更新时间:10/11/2023 访问量:58
刷新事件 VBA 之前/之后的错误处理程序
Error Handler on Before/After Refresh Event VBA
问:
为了从 SQL Server 导入数据,我有一个参数化查询,需要用户输入日期。
当用户正确输入开始日期和结束日期时,一切都按正确的顺序完成,案例关闭。
但是,当日期不正确时,不会触发错误处理程序,并且宏会一直持续到 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
答: 暂无答案
上一个:C.无法处理,我需要建议
评论
Exit Sub
End Sub
On Error Goto
Sub demo() On Error GoTo X ThisWorkbook.RefreshAll Exit Sub X: MsgBox "never gets here" End Sub