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

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

Dim arr As Variant arr = Application.ActiveSheet.UsedRange 'do stuff Application.ActiveSheet.UsedRange = arr 

但是,这有一个副作用:将数组转储回单元格时,单元格格式将由Excel的默认行为更改。 例如,存储为以“0”开头的文本的数字被转换为数字,并且“0”被删除。 或“1-11”等文字转换为date(“11月1日”); 也许还有一些我还没有发现的其他的。

如果我监视本地窗口,string被保存为数组中的string,直到这个时刻,所以这是卸载,弄乱了事情。

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

编辑:我也试过:

 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