如果我有一个变量数组(也就是说,元素可以是各种类型)并将数组赋值给Range.Value(或Range.Formula的常量)属性,则Excel会自动将传递的值转换为' “best-guess”类型基于目标单元格的NumberFormat。
例如,在下面所有'存储为字符串的'数字'(有意)将被转换为数字类型,如果它们被分配给具有“常规”数字格式的单元格。
Sub foo()
Selection.Value = Array( _
100, _
"100", _
"A Cat", _
"2012-05-02", _
"36.4")
End Sub
换句话说,Range.Value = Range.Value执行不往返,因为在返回Range.Value的任务中忽略了被分配的数据中的类型信息,只有Range.NumberFormat控制其解释。
有什么好的解决方法可以预防或处理这个问题吗?
我能想到的唯一一个是遍历数组,测试它是否是一个字符串,如果是,则在前面添加一个撇号。这有一个不可取的撇号实际存在于工作簿中的副作用(尽管 Excel 本身为了Range.Value等目的而忽略了它)。 (据我所知)不可能将数字格式分配给基于单元格的单元格(否则可以准备一个具有数据格式的数组,以“预加载”具有正确数字格式的单元格)
我经常使用数组和集合来大大提高数据处理的性能,但我希望在最终抽出数据时保留数据类型。
答案 0 :(得分:1)
你可以通过在任何文本值前放置一个撇号来解决这个问题:
Sub foo()
Selection.Value = Array( _
100, _
"'100", _
"A Cat", _
"'2012-05-02", _
"'36.4")
End Sub