通知Excel文件中的宏中是否有错误

时间:2018-10-08 13:27:44

标签: vba excel-vba

直到现在,如果其中一个宏代码中存在错误,它将宣布错误

我想让他知道他必须去找经理

这就是我现在拥有的代码

SELECT Column1, Column2, Column3, Count('x') AS CountX
FROM [SchmaName].[SQLView]
WHERE ("SomeWhereStatement")
GROUP BY Column1, Column2, Column3
HAVING Count('x') > 1; 

如何显示文件中所有错误的消息

如果这还不够清楚,请给我写信

1 个答案:

答案 0 :(得分:-1)

我建议不要使用On Error GoTo error1错误陷阱方法。您可以直接捕获预期的错误,而不是通用的“全部捕获” 方法。

使用On Error GoTo error1会错误捕获整个代码。您甚至都不知道哪一行会引发错误,如果您的代码很长,则会出现问题。


在这里,您将如何正确地将整个代码包装在通用的“全部捕获” 错误陷阱中。您需要在代码后使用Exit Sub。这样可以确保仅在错误实例上到达您的错误行。

Sub Generic ()

On Error GoTo error1

'Code goes here
Exit Sub

''''''''''''''''''''''''''''''''''''''
error1:
MsgBox "Error, Contact Administrator"

End Sub

更好的方法是预见潜在的错误并编码出错误,或者以更直接的方法处理它们。由于我们不知道您要捕获什么错误,因此我仅举一个例子。以下代码旨在复制Column A中最后使用的单元格并将其复制到单元格B2

Sub CopyRange()

Dim LRow as Long 'Last Row

LRow = Range("A" & Rows.Count).End(xlUp).Row
Range("A" & LRow).Copy Destination:= Range("B2") '<---- anticipated error line

End Sub

如果没有复制范围LRow = 0,那么如果A0,此代码将出现错误。您可以将整个代码包装在通用错误陷阱中,也可以直接处理错误。检查LRow的值并在其中显示您的消息。现在您将知道错误是什么!

Sub CopyRange()

Dim LRow as Long 'Last Row

LRow = Range("A" & Rows.Count).End(xlUp).Row

'Error Trap Here!
If LRow = 0 Then
    MsgBox "LRow Calculation Issue. Notify Admin!"
    Exit Sub '<---- code will stop here before the error has a chance to be raised
End If

Range("A" & LRow).Copy Destination:= Range("B2") '<---- anticipated error line

End Sub