2013-09-25 58 views
1

所以我在Access以下代碼:訪問VBA - 如何將記錄集中的值從文本轉換爲數字?

Dim db As DAO.Database 
Dim qdEPH As DAO.QueryDef  
Dim rsEPH As DAO.Recordset 

Set qdEPH = DBEngine(0)(0).QueryDefs("MyQuery") 

qdEPH.Parameters(0) = Text10.Value 

Set db = CurrentDb 

Set rsEPH = qdEPH.OpenRecordset 

Set oExcel = CreateObject("Excel.Application") 
Set oBook = oExcel.Workbooks.Add 
Set oSheet = oBook.Worksheets("Sheet1") 
oSheet.Activate 

Dim Count as Long 
Count = 1 

Do While Not rsEPH.EOF 

    oSheet.Range("A" & Count).Value = rsEPH("Value1") 
    Count = Count + 1 
    rsEPH.MoveNext 

Loop 

用戶將一個值在文本框Text10窗體上並點擊按鈕來運行上述代碼。它運行查詢MyQuery並將結果轉儲到名爲rsEPH的記錄集中。其中一個字段Value1作爲正在查詢的表中的文本值存儲。但是,它實際上是一個數字。如何將rsEPH("Value1")轉換爲一個數字(返回Null或失敗的東西),然後將它除以100?

+2

嘗試'= CDbl(rsEPH( 「值1」)) '如果你需要小數精度,或'= CLng(rsEPH(「Value1」))'如果你只需要整數? –

+1

因此,我得到'運行時錯誤:94 - 無效使用空值'。 「Value1」中的一個或多個記錄可能沒有任何內容。有沒有辦法處理空值?在C#中,我會做'TryParse'或類似的東西。 –

+1

看起來像Access有一個內置函數來轉換空值,請參閱@ HansUp的答案:) –

回答

3

在應用數字轉換函數之前,使用Nz來轉換文本字段中的空值。我選擇了CDbl作爲轉換函數。

oSheet.Range("A" & Count).Value = CDbl(Nz(rsEPH("Value1"), "0")) 

但是你提到除以100,所以也許你要這個......

oSheet.Range("A" & Count).Value = CDbl(Nz(rsEPH("Value1"), "0"))/100 
+0

啊是的..'Nz' ..我總是忘記這一點!謝謝漢斯! –

0

試試下面的代碼

Do While Not rsEPH.EOF 

    oSheet.Range("A" & Count).Value = IIf(IsNull(rsEPH("Value1")), 0, CDbl(rsEPH("Value1"))) 
    Count = Count + 1 
    rsEPH.MoveNext 

Loop 
相關問題