非Variant参数可以变成vbError吗?

时间:2017-10-05 10:29:50

标签: vba error-handling

我正在浏览一些vba代码并找到了以下片段的等价物。 If中的条件是否真的可以,如果是,如何?

Public Sub check(param As String)
    If VarType(param) = vbError Then
    ...

如果将param定义为Variantparam如何成为错误,该怎么办?

Public Sub check2(param As Variant)
    If VarType(param) = vbError Then
    ...

根据评论,该声明可简化为:

If IsError(param) Then

3 个答案:

答案 0 :(得分:3)

字符串是VarType 8并且是固定的,因此第一个示例中的条件永远不会为真。 然而,第二种情况可能发生。如果您将包含无效值(例如#VALUE)的单元格的值读入变量,它将获得VarType 10(vbError)

仅作为一个例子:

Sub testVBError()
With ActiveSheet
    .Cells(1, 1) = 3
    .Cells(1, 2) = 0
    .Cells(1, 3).Formula = "=A1/B1" ' Divide by zero
    Dim v As Variant
    v = .Cells(1, 3).Value
    Debug.Print VarType(v)
End With
End Sub

答案 1 :(得分:1)

vbError是一个枚举。它等于10.如果VarType(param)是10,那么它将是真的。

以下是如何播放并使其与Variant一起使用:

Public Sub TestMe()

    On Error Resume Next

    Dim i As Variant
    i = "a"
    Debug.Print VarType(i + 2)

    If VarType(i + 10) = vbError Then
        Debug.Print "VarType equals vbError"
    End If

End Sub

答案 2 :(得分:0)

答案是否定的,只有Variant可以成为vbError。您可以使用CVErr函数创建错误。

Sub errorType()
    Dim v As Variant
    Dim s As String

    On Error GoTo finish
    v = CVErr(13)

    Debug.Print VarType(v) = vbError 'True: Variant can become error

    s = CVErr(13) 'Jumps to finish
    Debug.Print "String can become error"
    Exit Sub
finish:
    Debug.Print "String can't become error"
End Sub