2013-04-08 102 views
1

所以我花了一天的时间调试我的VBA类模块,并出现了令人担忧的现象。Excel VBA意外截断

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

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

然而,当我在转让之后检查存储在myClass.loanDefault_7值时,它仅具有4个小数位精确度。

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

任何帮助非常感谢!

回答

3

尝试使用Value2属性来代替:

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

从MSDN:

此属性和价值属性之间的唯一区别是,Value 2属性不使用货币和日期数据类型。您可以使用Double数据类型将使用这些数据类型格式化的值作为浮点数返回。

看来,Value属性将自动强制值成货币数据类型(其AFAIK,仅能够表示4个数字在小数点右侧的)。