我正在浏览一些vba代码并找到了以下片段的等价物。 If
中的条件是否真的可以,如果是,如何?
Public Sub check(param As String)
If VarType(param) = vbError Then
...
如果将param
定义为Variant
,param
如何成为错误,该怎么办?
Public Sub check2(param As Variant)
If VarType(param) = vbError Then
...
根据评论,该声明可简化为:
If IsError(param) Then
答案 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