访问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?
答
在应用数字转换函数之前,使用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
尝试'= CDbl(rsEPH( “值1”)) '如果你需要小数精度,或'= CLng(rsEPH(“Value1”))'如果你只需要整数? –
因此,我得到'运行时错误:94 - 无效使用空值'。 “Value1”中的一个或多个记录可能没有任何内容。有没有办法处理空值?在C#中,我会做'TryParse'或类似的东西。 –
看起来像Access有一个内置函数来转换空值,请参阅@ HansUp的答案:) –