访问VBA - 如何将记录集中的值从文本转换为数字?

问题描述:

所以我在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的答案:) –

在应用数字转换函数之前,使用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' ..我总是忘记这一点!谢谢汉斯! –

试试下面的代码

Do While Not rsEPH.EOF 

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

Loop