VBA - 为什么IsNumeric无法正确评估

agu*_*tin 0 excel vba excel-vba

我有以下代码VBA来评估变量lngPNumber以将"正确"值发送到WorksheetFunction.vLookup函数:

Dim lngPNumber As Variant
lngPNumber = ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Value
        If IsNumeric(lngPNumber) = False Or CDbl(lngPNumber) <> Round(CDbl(lngPNumber)) Then
        lngPNumber = CStr(ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Text)
        End If
Run Code Online (Sandbox Code Playgroud)

lngPNumber可:

  • 整数值(fi 4111)
  • 浮点值(41.111111)
  • 或者只是一个字符串值(通常是"xxxx",但也可以用"asdasd","dasdsadasd"等字符串填充......)

在最后两种情况下,我想发送单元格文本而不是单元格值lngPNumber获取的位置.

但是,如果值是类似于列表中最后一个示例的字符串,则会出现Type Missmatch错误.有帮助吗?

Sco*_*ner 6

If将尝试解析Or的两边,无论第一个是false还是true,因此CDbl(lngPNumber)如果lngPNumber是text ,则会出错.

所以将它们分成两部分.

Dim lngPNumber As Variant
lngPNumber = ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Value
        If Not IsNumeric(lngPNumber) Then
            lngPNumber = CStr(ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Text)
        ElseIF CDbl(lngPNumber) <> Round(CDbl(lngPNumber)) Then
            lngPNumber = CStr(ActiveSheet.Cells(objInitialCell.Row, INT_ACCP_COL_PNUMBER).Text)     
        End If
Run Code Online (Sandbox Code Playgroud)

现在第二个只有在lngPNumber数字时才会触发.