参考:Public Sub MergeAnyArray(ByRef vArraySource As Variant, ByRef vArrayDest As Variant, Optional ByVal iPos As Long = -1)
   Dim i        As Long
   Dim iLBound  As Long
   Dim iUBound  As Long
   Dim iUBound2 As Long
   Dim iTemp    As Long
  
   If (Not IsArray(vArraySource)) Or (Not IsArray(vArrayDest)) Then Exit Sub
   
   iLBound = LBound(vArraySource)
   iUBound = UBound(vArraySource)
   iUBound2 = UBound(vArrayDest)
   iTemp = iUBound - iLBound + 1
   
   If (iPos > UBound(vArrayDest) + 1) Or (iPos = -1) Then iPos = UBound(vArrayDest) + 1
   If iPos < 0 Then iPos = 0
   
   ReDim Preserve vArrayDest(LBound(vArrayDest) To UBound(vArrayDest) + iTemp)
   For i = iUBound2 To iPos Step -1
      vArrayDest(i + iTemp) = vArrayDest(i)
   Next i
   
   iUBound = iPos + iTemp - 1
   
   For i = iPos To iUBound
      vArrayDest(i) = vArraySource(i - iPos)
   Next i
   
   Erase vArraySource
End Sub

解决方案 »

  1.   

    我有一个我认为最快的办法:直接内存拷贝
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub Command1_Click()
        
        Dim a(1 To 1000) As Byte
        Dim b(1 To 1000) As Byte
        Dim c(1 To 2000) As Byte
        
        CopyMemory c(1), a(1), Len(a(0)) * 1000
        CopyMemory c(1001), b(1), Len(b(1)) * 1000
        
    End Sub
    注意:a,b,c三个数组的类型一定要相同;一定要弄准a,b,c三个数组的个数及分界点,以免拷贝错误。
    我想不到还有比这个更快的办法,给分吧。
    如果调试有误,可以在QQ(4822210)上给我留言,以作进一步探讨.
      

  2.   


        Dim a(1 To 2) As Byte
        Dim b(1 To 2) As Byte
        Dim c(1 To 4) As Byte
        
        a(1) = 1
        a(2) = 2
        
        b(1) = 3
        b(2) = 4
        
        c(1) = 5
        c(2) = 6
        
        CopyMemory c(1), a(1), Len(a(1)) * 2
        CopyMemory c(2), b(1), Len(b(1)) * 2
        
        Stop
    End Sub
    结果:c(1) =1
    c(2) =3
    c(3) =4
    c(4) =0不对
      

  3.   

    你copymemory copy错了,应该是
    CopyMemory c(1), a(1), Len(a(1)) * 2
    CopyMemory c(3), b(1), Len(b(1)) * 2
    可以加分了吧?