检查Excel单元格值是否为错误(NaN,N / A,#ERROR等)

时间:2015-10-22 08:05:09

标签: excel vbscript

我正在尝试创建一个函数来处理Excel中单元格值的错误。当我运行它时,我收到一个错误,因为VBScript中不存在IsError函数。

Function errValue(j, pos)
    er=false
    ran = Mid(oSht.Cells(1, pos).Address, 2, InStr(2, oSht.Cells(1, pos).Address, "$") - 2)&j
    'ran is D17

    Set R = oSht.Range(ran)
    If IsError(R.Value) Then
        Select Case R.Value
            Case CVErr(xlErrValue)
                er=true
            Case CVErr(xlErrDiv0)
                er=truee
            Case CVErr(xlErrName)
                er=true
            Case Else
                er=true
        End Select
    End If
    errValue = er
End function

还有其他办法吗?

2 个答案:

答案 0 :(得分:1)

WorksheetFunction对象应该允许您使用VBScript和VBA中的Excel函数:

Set xl = CreateObject("Excel.Application")

...

If xl.WorksheetFunction.ISERROR(R.Value) Then
    Select Case R.Value
        Case CVErr(xlErrValue)
            er=true
        Case CVErr(xlErrDiv0)
            er=truee
        Case CVErr(xlErrName)
            er=true
        Case Else
            er=true
    End Select
End If

我现在无法访问Excel,所以我无法测试。

答案 1 :(得分:0)

OP提出的解决方案:

Function errValue(j, pos)
  er = False
  ran = Mid(oSht.Cells(1, pos).Address, 2, _
        InStr(2, oSht.Cells(1, pos).Address, "$") - 2) & j
  Set R = oSht.Range(ran)

  If Not VarType(R.Value) <> vbError Then
    er = True
  End If

  errValue = er
End Function

可以简化为:

Function errValue(j, pos)
  addr = oSht.Cells(1, pos).Address
  ran  = Mid(addr, 2, InStr(2, addr, "$") - 2) & j

  errValue = VarType(oSht.Range(ran).Value) = vbError
End Function