在带有子类型Error变体的Select Case中,类型不匹配



下面代码中显示的范围包含一个VLOOKUP公式。如果VLOOKUP返回一个#N/A,代码将通知用户。

但是,我在下面的Case CVErr(xlErrNA)行上得到一个类型不匹配错误。为什么?我该如何解决这个问题?

Private Sub Worksheet_Calculate()
  Dim c As Range
  For Each c In Range("N7:N13,N30:N36,N53:N59,N85:N91,N108:N114,N137:N137")
     Select Case [c]
             Case CVErr(xlErrNA)
                   MsgBox "hello"          
      End Select
  Next c
End Sub

显然,子类型Error的变体(如CVErr的输出)不喜欢与任何其他类型进行比较。当发生这种情况时,将抛出类型不匹配。只要c不包含错误代码,您就会得到此错误。

因此,您必须将Select Case语句分成两部分:一部分处理错误代码,另一部分处理其他所有内容。

Dim c As Range
For Each c In Range("N7:N13,N30:N36,N53:N59,N85:N91,N108:N114,N137:N137")
    If IsError(c.Value) Then
        'Deal with error codes
        Select Case c.Value
            Case CVErr(xlErrNA)
                MsgBox "#N/A"
            Case CVErr(xlErrDiv0)
                MsgBox "Divide by zero."
                'etc.
        End Select
    Else
        'Deal with everything else
        Select Case c.Value
            Case 1
                MsgBox "1"
            Case "a"
                MsgBox "a"
                'etc.
        End Select
    End If
Next c

最新更新