【问题标题】:Assigning to a Range ignores the type of data being assigned - workarounds?分配给范围会忽略分配的数据类型 - 解决方法?
【发布时间】:2014-06-12 05:01:23
【问题描述】:

如果我有一个变体数组(即元素可以是各种类型)并将数组分配给 Range.Value(或 Range.Formula 的常量)属性,那么 Excel 会自动将传递的值转换为 '基于目标单元格的 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 控制其解释。

是否有任何好的解决方法来防止或处理这种情况?

我唯一能想到的就是遍历数组,测试它是否是一个字符串,如果是,则在前面添加一个撇号。这具有撇号实际存在于工作簿中的不良副作用(尽管出于 Range.Value 等目的而被 Excel 本身忽略)。不可能(据我所知)将数字格式分配给基于整体的单元格(否则可以准备一个具有数据数字格式的数组以“预加载”具有正确数字格式的单元格) .

我经常使用数组和集合来大大提高数据处理的性能,但我希望在最终抽出数据时保留数据类型。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您可以通过在任何文本值前面加上撇号来解决此问题:

    Sub foo()
    
        Selection.Value = Array( _
            100, _
            "'100", _
            "A Cat", _
            "'2012-05-02", _
            "'36.4")
    
    End Sub
    

    【讨论】:

    • 谢谢-这是一种解决方法,尽管这也是我的第一个想法(“我唯一能想到的就是遍历数组,测试它是否是字符串并在如果是的话,就放在前面”)。也许这是唯一的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    • 2021-04-04
    • 2014-11-19
    • 1970-01-01
    • 2017-03-23
    • 2018-02-07
    • 2018-05-20
    相关资源
    最近更新 更多