从下面代码结果可以看出,字串数组在内存中的位置并不是连续的,所以Index函数一定是一个一个的拷贝字串值,而拷贝时很可能字串使用的是LPSTR类型
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Sub test()
Dim arr, arr1
Dim i As Long, j As Long
Dim lCount As Long
Dim s(1 To 1024) As Byte
Dim lLen As Long, lRefCount As Long
Debug.Print "元素", "内存地址", "元素值"
arr = Range("a1:b5").Value
For j = LBound(arr, 2) To UBound(arr, 2)
For i = LBound(arr, 1) To UBound(arr, 1)
CopyMemory lCount, ByVal VarPtr(arr(i, j)) + 8, 4& * 1 ' 取得字符串真实地址
Debug.Print "arr(" + CStr(i) + "," + CStr(j) + ")", ; lCount, ;
CopyMemory ByVal VarPtr(s(1)), ByVal lCount, LenB(arr(i, j)) ' 取得字符串内容
Debug.Print s
Next i
Next j
Debug.Print
arr = Application.WorksheetFunction.Index(arr, 0, 2)
For j = LBound(arr, 2) To UBound(arr, 2)
For i = LBound(arr, 1) To UBound(arr, 1)
CopyMemory lCount, ByVal VarPtr(arr(i, j)) + 8, 4& * 1 ' 取得字符串真实地址
Debug.Print "arr(" + CStr(i) + ","; CStr(j) + ")", ; lCount, ;
CopyMemory ByVal VarPtr(s(1)), ByVal lCount, LenB(arr(i, j)) ' 取得字符串内容
Debug.Print s
Next i
Next j
Debug.Print
arr = Range("a6:b10").Value
arr1 = Application.WorksheetFunction.Index(arr, 0, 2)
End Sub
|