1

所以我花了一天的大部分时间来调试我的 VBA 类模块,并遇到了一个令人担忧的现象。

在主电子表格上,我有一个格式为“货币”的单元格,精度为 9 位小数。在我的 VBA 类中,我有一个属性(双精度),它在实例化时采用该单元格值。IE,

myClass.loanDefault_7 = Range("loanDefaults")(1,7)

但是,当我在分配后检查存储在 myClass.loanDefault_7 中的值时,它只有 4 位小数精度。

我的问题是为什么 VBA 会自动(未经我的许可)截断这个值?我想了解为什么会发生这种情况,以及将来如何防止这种情况发生。

任何帮助深表感谢!

4

1 回答 1

4

尝试使用该Value2属性:

myClass.loadDefault_7 = Range("loadDefaults")(1,7).Value2

来自 MSDN:

此属性与 Value 属性之间的唯一区别是 Value2 属性不使用 Currency 和 Date 数据类型。您可以使用 Double 数据类型将使用这些数据类型格式化的值作为浮点数返回。

似乎该Value属性会自动将值强制转换为货币数据类型(AFAIK 只能表示小数点右侧的 4 个数字)。

于 2013-04-08T13:39:29.850 回答