● 構造体をコピーする ●

2通り方法はある。さて LSet を知ってますか? 時々、便利かもしれない。

'メモリーコピー
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Type udtSample
    A As Integer
    B As Long
    C As String
End Type

Private Sub Command1_Click()

    Dim udtFrom As udtSample
    Dim udtTo As udtSample

    With udtFrom
        .A = 200
        .B = 300
        .C = "400"
    End With

    '構造体をコピー
    LSet udtTo = udtFrom

    With udtTo
        Debug.Print .A
        Debug.Print .B
        Debug.Print .C
    End With

End Sub

Private Sub Command2_Click()

    Dim udtFrom As udtSample
    Dim udtTo As udtSample

    With udtFrom
        .A = 200
        .B = 300
        .C = "400"
    End With

    '構造体をコピー、第3引数は Len ではなく LenB とするのが重要
    Call CopyMemory(ByVal VarPtr(udtTo), ByVal VarPtr(udtFrom), LenB(udtFrom))

    With udtTo
        Debug.Print .A
        Debug.Print .B
        Debug.Print .C
    End With

End Sub

戻る