【问题标题】:Access VBA - how can i convert a value in recordset from text to number?Access VBA - 如何将记录集中的值从文本转换为数字?
【发布时间】:2013-09-25 22:48:23
【问题描述】:

所以我在 Access 中有以下代码:

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?

【问题讨论】:

  • 如果您需要小数精度,请尝试=CDbl(rsEPH("Value1")),如果您只需要整数,请尝试=CLng(rsEPH("Value1"))
  • 这样,我得到Run-time error: 94 - Invalid Use of NullValue1 中的一条或多条记录可能没有任何内容。有没有办法处理 Null 值?在 C# 中,我会做 TryParse 或类似的事情。
  • 看起来 Access 有一个内置函数来转换空值,请参阅@HansUp 的回答 :)

标签: ms-access vba


【解决方案1】:

在应用数值转换函数之前,使用Nz 转换文本字段中的 Null。我选择CDbl作为转换函数。

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

但是你提到了除以 100,所以也许你想要这个......

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

【讨论】:

  • 啊是的 .. Nz .. 我总是忘记这一点!谢谢汉斯!
【解决方案2】:

试试下面的代码

Do While Not rsEPH.EOF

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

Loop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多