我在Excel中很缺乏经验,我遇到了编程宏的问题。无论我是否设置了断点并逐步结束,它都会停止,不会出现任何错误对话框。Excel VBA宏和错误消息
我错过了什么吗?我是否必须明确地打开错误消息?
这样的事情,在一个模块中:
Function Provoke(XYZ As Integer) As Integer
Provoke = XYZ/0
End Function
功能是使用的公式在细胞内,这样
=Provoke(4711)
我怎么能让他抱怨师零?
我在Excel中很缺乏经验,我遇到了编程宏的问题。无论我是否设置了断点并逐步结束,它都会停止,不会出现任何错误对话框。Excel VBA宏和错误消息
我错过了什么吗?我是否必须明确地打开错误消息?
这样的事情,在一个模块中:
Function Provoke(XYZ As Integer) As Integer
Provoke = XYZ/0
End Function
功能是使用的公式在细胞内,这样
=Provoke(4711)
我怎么能让他抱怨师零?
如果在从工作表的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
是的,你需要作出规定告诉VBA如果发生错误做什么。
这个错误是因为该行代码中存在的:
Provoke = XYZ/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
如果您还希望捕获其他特定错误,请检查http://onlinelibrary.wiley.com/doi/10.1002/9781 118257616.app3/pdf以及(我总是保持书签)。 –
在你的第一段很好! – curious