2013-10-14 23 views
1

在這個特定的代碼中,我試圖測試一個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)。該程序會將該變量作爲雙精度型返回,或者以雙精度值作爲前兩個99的返回值。沒有任何投入會破壞這兩種情況。

編輯:即使更改convertValuetoNumeric()的方法簽名接受類型爲Variant而不是String類型的變量不會解決該錯誤。

+0

很難猜到沒有看到'convertValuetoNumeric'和輸入值的例子。 –

+0

@TimWilliams我在轉換代碼中爲你添加了 – ahjohnston25

+0

如果convertValuetoNumeric的輸入是一個字符串,那麼它會失敗,因爲它期望一個double ...你可以將inpur參數類型改爲Variant,如果它可以是數字或字符串。 'Msgbox TypeName(SampleTable![Value])'給了你什麼? –

回答

0

爲什麼不使用變ICD將在VBA和VBScript中是有效的:

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]爲列名。

+0

非常感謝!這工作完美。 – ahjohnston25

+0

很高興這對你有用。 – jacouh