下面是我用VBA编写的函数。
Option Explicit
Function MyMatrix(mtx As Range, vec As Range) As Variant
On Error GoTo Exception
Dim M
M = Application.MInverse(mtx)
MyMatrix = Application.MMult(M, vec)
Exit Function
Exception:
MsgBox prompt:="Test", Buttons:=[vbOKCancel,vbCritical], Title:="Two"
End Function
但是,当我尝试使用它时,msgbox没有显示错误。下面是一个具有确定零的矩阵,您不能与另一个矢量复用。我相信我的代码正在识别确定为零,因为我在电子表格的框中得到了错误,但我的消息框不会弹出。什么会导致这个错误?
我试图阅读其他一些例子,但他们没有帮助。而且我不想使用“On Error Resume Next”。
从VBA调用工作表函数有两种方法:
1)Application.MInverse 2)Application.WorksheetFunction.MInverse
发生错误时1)返回包含错误的变体,但2)引发错误。因此,您需要使用1)与If Iserror(M) Then
或2)与您现有的代码。
注意使用2)比1)快
另见我关于UDF https://fastexcel.wordpress.com/2011/06/06/writing-efficient-vba-udfs-part-2/的博客文章