Vba 指定给范围会忽略指定的数据类型-变通方法?
如果我有一个变量数组(即,元素可以是各种类型),并将数组分配给Range.Value(或constants to Range.Formula)属性,那么Excel将根据目标单元格的NumberFormat自动将传递的值转换为“最佳猜测”类型 例如,在下面的示例中,如果将所有“存储为字符串的数字”(有意)分配给具有“常规”数字格式的单元格,则它们将转换为数字类型Vba 指定给范围会忽略指定的数据类型-变通方法?,vba,excel,Vba,Excel,如果我有一个变量数组(即,元素可以是各种类型),并将数组分配给Range.Value(或constants to Range.Formula)属性,那么Excel将根据目标单元格的NumberFormat自动将传递的值转换为“最佳猜测”类型 例如,在下面的示例中,如果将所有“存储为字符串的数字”(有意)分配给具有“常规”数字格式的单元格,则它们将转换为数字类型 Sub foo() Selection.Value = Array( _ 100, _ "10
Sub foo()
Selection.Value = Array( _
100, _
"100", _
"A Cat", _
"2012-05-02", _
"36.4")
End Sub
换言之,Range.Value=Range.Value不是往返的,因为在返回Range.Value的赋值中,要返回的数据中的类型信息被忽略,只有Range.NumberFormat控制其解释
有什么好的解决办法来防止或处理这种情况吗
我能想到的唯一方法是遍历数组,测试它是否是字符串,如果是,则在前面添加一个撇号。这有一个不希望出现的副作用,即撇号实际上出现在工作簿中(尽管出于Range.Value等目的,Excel本身忽略了撇号)。(据我所知)不可能将数字格式全部分配给单元格(否则可以准备一个具有数据数字格式的数组,以“预加载”具有正确数字格式的单元格)
我经常使用数组和集合来极大地提高数据处理的性能,但我希望在最终输出数据时保留数据类型。您可以通过在任何文本值前面加一个撇号来解决这个问题:
Sub foo()
Selection.Value = Array( _
100, _
"'100", _
"A Cat", _
"'2012-05-02", _
"'36.4")
End Sub
谢谢-这是一个解决方法,尽管这也是我的第一个想法(“我唯一能想到的是遍历数组,测试它是否是字符串,如果是,在前面添加一个撇号”)。也许这是唯一的解决办法。