gpt4 book ai didi

excel - 如何在 VBA 中克隆范围对象

转载 作者:行者123 更新时间:2023-12-04 18:01:52 25 4
gpt4 key购买 nike

我正在使用 Excel Visual Basic 编辑器在 VBA 中编写 Excel 宏。我不知道如何复制/克隆范围对象,而不是创建对同一对象的第二个引用。

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

在尝试解决这个问题时,我可能有点迷失了 VBA、Visual Basic 和 Visual Basic .Net 之间的区别。

最佳答案

虽然不一定是同一件事,但您可以通过根据范围的 创建一个Variant 对象来涵盖大多数用例。这会产生一个变体数组,您可以在内存中对其进行随心所欲的操作。

Dim originalRange As Range, rangeCopy As Variant
' ...
rangeCopy = originalRange.Value

要实现这一点,需要考虑一些事项:

  • 对象必须声明为 Variant - 不要声明 Variant 数组,否则会失败。
  • 您显然只会获得原始范围内的值。
  • 生成的 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

Result

关于excel - 如何在 VBA 中克隆范围对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33932000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com