Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA如何防止/捕获参数中的数据类型不匹配错误_Vba_Excel_Type Mismatch - Fatal编程技术网

Excel VBA如何防止/捕获参数中的数据类型不匹配错误

Excel VBA如何防止/捕获参数中的数据类型不匹配错误,vba,excel,type-mismatch,Vba,Excel,Type Mismatch,我有一个Excel VBA用户定义函数,其中我为函数的一个参数声明了一个数据类型。我希望能够捕获潜在的错误,以防 有人没有输入正确的数据类型。看起来应该很简单,但无法理解 请参阅下面的示例,其中我使用了一个子过程来演示该问题 Sub MyTest() MsgBox myfunction("123a") End Sub Function myfunction(mynum As Double) As String On Error Resume Next If IsNum

我有一个Excel VBA用户定义函数,其中我为函数的一个参数声明了一个数据类型。我希望能够捕获潜在的错误,以防 有人没有输入正确的数据类型。看起来应该很简单,但无法理解

请参阅下面的示例,其中我使用了一个子过程来演示该问题

Sub MyTest()
    MsgBox myfunction("123a")
End Sub

Function myfunction(mynum As Double) As String
    On Error Resume Next

    If IsNumeric(mynum) Then
        myfunction = "ok"
    Else
        myfunction = "not ok"
    End If
End Function

额外注意:虽然我使用一个子过程来演示这个问题,但实际上我使用的是一个用户定义的函数,并从我的工作表中调用该函数。因此,在调用“MyFunction”过程之前,在“MyTest”过程中添加保护并非易事。

请查看,因为您已将参数键入为
Double
使用非数值调用
MyFunction
的任何尝试都将失败,并且不会调用
MyFunction
。当用作自定义项时,这将产生一个
#值错误。如果必须处理
myFunction
中的错误,请将
mynum
声明为
Variant
,并使用
TypeName
确定传递的实际类型。这很有意义,感谢您查看,因为您已将参数键入为
Double
使用非数值调用
myFunction
将失败,并且不会调用
myFunction
。当用作自定义项时,这将产生一个
#值错误。如果必须处理
myFunction
中的错误,请将
mynum
声明为
Variant
,并使用
TypeName
确定传递的实际类型。这很有意义,谢谢