Kald af Funktion I workbook1 fra workbook2
Hvordan kalder man en vba funktion placeret i workbook1 module1, fra workbook2 ?Der skal overføres et array af user defined type, i funktions kaldet.
vi anvender følgende metoder:
'--------------Workbook1.module1-------------
Public Type myType
IDName As String * 50
Data(1) As Double
End Type
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Public Sub TypeData2Array(arrArray() As Byte, typeData As myType)
ReDim arrArray(0 To Len(typeData)) As Byte
CopyMemory arrArray(0), typeData, Len(typeData)
End Sub
Private Sub CommandButton1_Click()
Dim test As myType
test.IDName = "Casper"
test.Data(0) = 4.1
test.Data(1) = 4.2
Dim a() As Byte
Call TypeData2Array(a, test)
Application.Run "Book1.xls!Receive", a
End sub
'--------------workbook2 module 1-----------
Public Type myType
IDName As String * 50
Data(1) As Double
End Type
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Public Sub Array2TypeData(typeData As myType, ByRef arrArray() As Byte)
CopyMemory typeData, arrArray(0), UBound(arrArray)
End Sub
public sub Receive(rec() as byte)
Dim q As myType
Call Array2TypeData(q, rec)
end sub
-----------------------------------------------
resultatet er :
q.IDName = "Casper"
q.Data(0) = 4.1
q.Data(1) = 1.112536e-309 ????
Hvorfor er q.Data(1) ikke 4.1 ?
Hvis Data() dimensioneres 1 element større end nødvendigt(dvs Data(2) i dette tilfælde) da er q.Data(1) = 4.1
Hvad går der galt.. Kan man overhovedet anvende copymemory ?
