所以我花了大部分时间来调试我的VBA Class模块并且出现了令人担忧的现象。
在主电子表格中,我有一个格式为“货币”的单元格,小数点后9位精度。在我的VBA类中,我有一个属性(一个double),它在实例化时接受该单元格值。即,
myClass.loanDefault_7 = Range("loanDefaults")(1,7)
但是,当我在赋值后检查存储在myClass.loanDefault_7中的值时,它只有4个小数位精度。
我的问题是为什么VBA会自动(未经我许可)截断此值?我想了解为什么会发生这种情况,以及我将来如何阻止它。
非常感谢任何帮助!
答案 0 :(得分:3)
请尝试使用Value2
属性:
myClass.loadDefault_7 = Range("loadDefaults")(1,7).Value2
来自MSDN:
此属性与Value属性之间的唯一区别是Value2属性不使用Currency和Date数据类型。您可以使用Double数据类型将使用这些数据类型格式化的值作为浮点数返回。
似乎Value
属性会自动将值强制转换为Currency数据类型(AFAIK,只能表示小数点右边的4个数字)。