我正在使用Excel Visual Basic编辑器在VBA中编写Excel宏。我无法弄清楚如何复制/克隆一个Range对象,而不是创建对同一个Object的第二个引用。
MemberwiseClone()函数似乎不可用。我认为它将用于内置类型。我需要自己实施吗?
在尝试解决这个问题时,我可能会在VBA,Visual Basic和Visual Basic .Net之间的区别中迷失方向。
答案 0 :(得分:1)
虽然不一定是同一件事,但您可以通过根据范围的值创建一个Variant
对象来涵盖大多数用例。这样就产生了一个可变数组,您可以在内存中根据心脏的内容对其进行操作。
Dim originalRange As Range, rangeCopy As Variant
' ...
rangeCopy = originalRange.Value
要使其正常工作,需要考虑以下几点:
Variant
-不要声明Variant数组,否则它将失败。rangeCopy(row, column)
。完整示例:
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