Avatar billede william_munny Nybegynder
30. juni 2003 - 11:13 Der er 5 kommentarer og
1 løsning

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 ?
Avatar billede agatheb Nybegynder
02. juli 2003 - 11:30 #1
Har du prøvet Tools, References, hvor du knytter bøgerne sammen? Så skal du kalde fra din public procedure til en alm. procedure i din bog, og så kalde på en alm. procedure i bog2.
Avatar billede william_munny Nybegynder
02. juli 2003 - 13:52 #2
Ok det virker, men kan man lave referencen "at runtime",fordi workbook2 ikke altid er den samme, men bliver valgt når makroen køres.
1) Kan man tilføje en reference kode mæssigt ?
2) Og hvordan parser man en user defined type med som argument?
Avatar billede agatheb Nybegynder
02. juli 2003 - 14:22 #3
Det ved jeg ikke; jeg plejer at bruge en standard _startupXXX book, hvor jeg så har alle relevante procedurer i.....
Avatar billede william_munny Nybegynder
22. juli 2003 - 10:08 #4
Det er godt nok ikke helt det jeg er ude efter, lader spm stå åbent lidt endnu
Avatar billede william_munny Nybegynder
01. september 2003 - 12:04 #5
Sker ikke meget herinde
Avatar billede william_munny Nybegynder
30. september 2003 - 08:49 #6
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging