【问题标题】:Can non Variant parameter become vbError?非 Variant 参数可以变成 vbError 吗?
【发布时间】:2017-10-05 10:29:49
【问题描述】:

我正在浏览一些 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
    ...

基于 cmets,该语句可以简化为:

If IsError(param) Then

【问题讨论】:

    标签: vba error-handling


    【解决方案1】:

    字符串是 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
    

    【讨论】:

    • 所以 OP 的同事并没有像IsError(param) 那样简单地使用VarType(param)=vbError...我印象深刻! :)
    【解决方案2】:

    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
    

    【讨论】:

    • 它没有回答how can the param become an error
    • 注意第一个例子中param的类型是String
    【解决方案3】:

    答案是否定的,只有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
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      相关资源
      最近更新 更多