将Recordset数据作为参数传递

时间:2013-10-14 19:07:55

标签: vba access-vba recordset

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

以下是有问题的代码:

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

我的convertValuetoNumeric方法突出显示“编译错误:类型不匹配”错误。现在输入是高度规范化的,所以我知道传递给convert方法的任何字符串都将返回double。我相信错误来自传递给convertValuetoNumeric的参数已经是一个double或者因为从表中调用数据返回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)。该程序要么将变量返回为double,要么将其返回为前面的99。没有输入会破坏这两种情况。

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

1 个答案:

答案 0 :(得分: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]是列名。