我对Excel非常缺乏经验,而且我遇到了编程宏的问题。无论是否设置断点并跳过,它都会在没有任何错误对话框的情况下停止。
我错过了什么吗?我是否必须明确打开错误消息?
这样的事情,在一个模块中:
Function Provoke(XYZ As Integer) As Integer
Provoke = XYZ / 0
End Function
函数用在单元格内部的公式中,如此
=Provoke(4711)
我怎么能让它以零为由抱怨?
答案 0 :(得分:4)
如果在从工作表调用UDF时函数中发生错误,您将看不到任何错误消息 - 您只是将#VALUE错误返回到单元格
如果从VBA中的Sub调用相同的函数,您将看到错误。
如果您希望能够返回更具体的错误消息,则需要进行更多编码。
E.g。
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
答案 1 :(得分:1)
是的,您需要做出规定告诉VBA如果发生错误该怎么做。
由于代码中的这一行而发生错误:
Provoke = XYZ / 0
没有数字可以被0整除,并且会产生错误。基础数学:any number ÷ 0 = ∞
。
要第一手验证,您可以尝试这样的方法来捕获错误编号以及来源和描述:
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