Excel VBAmacros和错误消息

我在Excel中经验不足,而且我遇到了一个编程macros的问题。 无论我是否设置了断点,都可以简单地停止,不会出现任何错误对话框。

我错过了什么吗? 我是否必须明确地打开错误消息?

就像这样,在一个模块中:

Function Provoke(XYZ As Integer) As Integer Provoke = XYZ / 0 End Function 

函数用在单元格内部的公式中,像这样

 =Provoke(4711) 

我怎么能让它抱怨由零分割?

如果在从工作表调用UDF时发生错误,则不会看到任何错误消息 – 只是返回到单元格的#VALUE错误,

如果您从VBA中的Sub调用相同的函数,您将看到错误。

如果你想能够返回更具体的错误信息,你需要多一点编码。

例如

 Function Provoke(XYZ As Integer) On Error GoTo haveError Provoke = XYZ / 0 Exit Function haveError: 'what type of error did we get? Select Case Err.Number Case 11: Provoke = CVErr(xlErrDiv0) Case Else: Provoke = "Error!" End Select End Function 

这是一个很好的参考: http : //www.cpearson.com/excel/ReturningErrors.aspx

是的,你需要做出规定,告诉VBA如果发生错误,该怎么做。

由于代码中的这一行发生错误:

 Provoke = XYZ / 0 

没有数字可以被零整除,它会产生一个错误。 基本math: any number ÷ 0 = ∞

要亲自validation,您可以尝试类似的方法来捕获错误编号以及来源和描述:

 Function Provoke(XYZ As Integer) On Error Resume Next Provoke = XYZ / 0 If Err.Number <> 0 Then Provoke = "Error# " & Err.Number & " - generated by " & Err.Source & " - " & Err.Description On Error GoTo 0 End Function 

现在,如果你尝试

 =Provoke(4711) 

你会得到如下结果:

 Error# 11 - generated by VBAProject - Division by zero