繁体   English   中英

Excel VBA - 用于处理范围的数组更改单元格的格式

[英]Excel VBA - array used to process ranges changes the format of the cells

我正在使用数组来处理工作表中的值(和文本):

Dim arr As Variant

arr = Application.ActiveSheet.UsedRange
'do stuff
Application.ActiveSheet.UsedRange = arr

但是,这有一个副作用:将数组转储回单元格时,Excel 的默认行为会更改单元格格式。 例如,存储为以“0”开头的文本的数字将转换为数字,而“0”将被删除。 或者像“1-11”这样的文本被转换为日期(“11 月 1 日”); 可能还有一些我还没有发现的。

如果我监视 Locals 窗口,字符串会一直作为字符串保存在数组中,直到那一刻,因此卸载将事情搞砸了。

有没有办法避免这种行为?

编辑:我也试过:

Application.ActiveSheet.UsedRange.Value = arr
Application.ActiveSheet.UsedRange.Value2 = arr
Application.ActiveSheet.UsedRange.text = arr

每个结果相同。

您可以使用 valuetype 选项来保留格式等:11 是 xlRangeValueXMLSpreadsheet

Sub CopyWithFormat()
Dim var As Variant
var = Range("A8:A11").Value(11)
Range("C8:C11").Value(11) = var
End Sub

但这将使修改数组中的值变得困难。 所以它可能是最简单的循环数组添加 '

Sub CopyWithFormat2()
    Dim var As Variant
    Dim j As Long
    var = Range("A8:A11").Value
    For j = 1 To UBound(var)
        If VarType(var(j, 1)) = vbString Then var(j, 1) = "'" & var(j, 1)
    Next j
    Range("C8:C11").Value = var
End Sub

也试试

YourRangeVariable.NumberFormat = "@"

YourRange.Value=Your Array

这将首先将范围转换为文本。 使用 01-11 之类的值时对我有用,并且不必执行循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM