西游记中孙悟空最神奇的本领之一就是拔根毫毛,瞬间变出无数个孙猴子。代码中的数组可谓神通广大,如何实现瞬间变身呢?其实也很简单。
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" ( _
Destination As Any, _
Source As Any, _
ByVal Length As Long)
Sub CopyArray()
Dim i As Integer
Dim avntData As Variant
Dim avntNew(1 To 4)
Dim avntCopy As Variant
avntData = Array(0, 1, 2, 3, 4, 5, 6, 7, 8)
Debug.Print "avntData:" & Join(avntData, ",")
avntCopy = avntData
Debug.Print "avntCopy:" & Join(avntCopy, ",")
CopyMemory ByVal VarPtr(avntNew(1)), _
ByVal VarPtr(avntData(3)), _
4 * 16
Debug.Print "avntNew:"; Join(avntNew, ",")
End Sub
- 照葫芦画瓢 – 全复制
新数组名 = 原数组名,第13行代码克隆产生一个完全相同的数组。示例代码中的avntCopy = avntData将avntData数组内容全部复制到数组avntCopy中,也就是说两个数组完全相同。 - 断章取义 – 部分复制
使用API函数CopyMemory可以复制指定位置开始的指定数量的数组元素到一个新数组。参数Destination指定目标数组在内存中的起始地址,参数 Source指定源数组中需要复制的元素在内存中的起始地址, 参数Length指定复制的内存空间尺寸(单位是字节)。
VarPtr(avntNew(1))获取目标数组中第一个元素的内存地址,与此类似VarPtr(avntData(3))获取源数组中第2个元素(下标下届为0)的内存地址,avntData是Variant型数组,每个元素需占用16个字节内存空间,4为所要的单元个数,即复制4个数组元素。
【立即窗口】中的输出结果:
avntData:0,1,2,3,4,5,6,7,8
avntCopy:0,1,2,3,4,5,6,7,8
avntNew:3,4,5,6
本文介绍了一种在VBA中复制数组的有效方法。通过全复制和部分复制两种方式,展示了如何利用内置函数轻松地从一个数组复制数据到另一个数组。全复制通过简单的赋值操作即可完成,而部分复制则借助了CopyMemory函数来实现特定位置的数据复制。
&spm=1001.2101.3001.5002&articleId=81586167&d=1&t=3&u=d4f9bdcb3ed0438399cf96183cc3e4f8)
2820

被折叠的 条评论
为什么被折叠?



