如何在VBA中克隆范围对象

问题描述 投票:3回答:1

我正在使用Excel Visual Basic编辑器在VBA中编码Excel宏。我无法弄清楚如何复制/克隆范围对象,而不是为同一对象创建第二个引用。

MemberwiseClone()函数似乎不可用。我认为它将针对内置类型实现。我需要自己实施吗?

为了弄清楚这一点,我可能对VBA,Visual Basic和Visual Basic .Net之间的区别有所了解。

excel-vba vba excel
1个回答
0
投票
values创建Variant对象来涵盖大多数用例。这样就产生了一个可变数组,您可以在内存中根据您的心脏内容对其进行操作。

Dim originalRange As Range, rangeCopy As Variant ' ... rangeCopy = originalRange.Value 要使其正常工作,需要考虑一些事项:

该对象必须声明为Variant-不要声明Variant数组,否则它将失败。

    您显然只会从原始范围获得值。
  • 生成的Variant数组是
  • always二维-即使仅复制单个单元格也是如此。将您的值设置为rangeCopy(row, column)
  • 将数组写回到工作表时,请确保将其写入与Variant数组大小相同的Range中。潜在地,您还需要调整单元格编号格式。
完整示例:
  • Sub RangeCopyTest() Dim originalRange As Range, rangeCopy As Variant With ActiveWorkbook.Worksheets(1).ListObjects(1) ' Range object Set originalRange = .ListRows(1).Range ' Make a copy (into an array) - values only rangeCopy = originalRange.Value ' Manipulate array ' Note: resulting array is ALWAYS 2-dimensional (row, column) rangeCopy(1, 1) = 2 rangeCopy(1, 2) = "copy" rangeCopy(1, 3) = rangeCopy(1, 3) - 1 rangeCopy(1, 4) = rangeCopy(1, 4) / 2 ' Insert the copy back in .ListRows.Add .ListRows(2).Range.Value = rangeCopy End With End Sub

    Result

  • © www.soinside.com 2019 - 2024. All rights reserved.