1

在这个特定的代码中,我试图测试一个 double 是否满足某个条件。这个双精度是通过将记录集(应该是一个字符串)中的输入转换为双精度来生成的。

以下是有问题的代码:

Do Until SampleTable.EOF
If (isCancer(convertValuetoNumeric(SampleTable![Value]))) Then
    'Some stuff done here
    '...
End If

我的 convertValuetoNumeric 方法突出显示时出现“编译错误:类型不匹配”错误。现在输入是高度标准化的,所以我知道传递给 convert 方法的任何字符串都将以双精度返回。我相信错误是因为传递给 convertValuetoNumeric 的参数已经是双精度,或者是因为从表中调用数据返回的是 RecordSet 对象,而不是我期望的 String 。

下面是转换代码:

Function convertValuetoNumeric(ICD As String) As Double
 If IsNumeric(ICD) Then
     convertValuetoNumeric = CDbl(ICD)
 Else
     convertValuetoNumeric = CDbl(Replace(ICD, "V", "99")) 'Replace V with 99 and convert
 End If
 End Function

输入要么是双精度(例如 1000.5),要么是前面带有 V 的双精度(例如 V100000.5)。程序要么将变量返回为未更改的双精度变量,要么返回前面带有 99 的双精度变量。没有任何输入会破坏这两种情况。

编辑:即使更改 convertValuetoNumeric() 的方法签名以接受类型变量Variant而不是String修复错误也无济于事。

4

1 回答 1

0

为什么不使用在 VBA 和 VBScript 中都有效的 Variant ICD:

Function convertValuetoNumeric(ByVal ICD) As Double
  If IsNumeric(ICD) Then
     convertValuetoNumeric = CDbl(ICD)
  Else
    convertValuetoNumeric = CDbl(Replace(ICD, "V", "99")) 'Replace V with 99 and convert
  End If
End Function

在通话中:

Do Until SampleTable.EOF
  If (isCancer(convertValuetoNumeric(SampleTable![Value].Value))) Then
      'Some stuff done here
      '...
  End If
....

我想 [Value] 是列名。

于 2013-10-14T19:29:57.377 回答