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

时间:2017-12-11 17:46:38

标签: 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

lngPNumber可以是:

  • 整数值(f.i.4111)
  • 浮点值(41.111111)
  • 或只是一个 字符串值(通常&#34; xxxx&#34;但也可以用字符串填充 喜欢&#34; asdasd&#34;,&#34; dasdsadasd&#34;等...)

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

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

1 个答案:

答案 0 :(得分:6)

If会尝试解析Or的两边,无论第一个是false还是true,如果CDbl(lngPNumber)是文本,lngPNumber将会出错。

将它们分成两部分。

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

现在只有当lngPNumber是数字时才会触发第二个。