Opis problemu:
Oddajmy głos Krzysztofowi Naworycie:
Dim f As Access.Form DoCmd.OpenForm "form1" Set f=Forms!form1 Set f.PrzekazywanyArgument = Me
Rozwiązanie:
'******************************************************************Private Sub Polecenie1_Click() Dim oData As Object Set oData = Me!Tekst1 DoCmd.OpenForm "Drugi", WindowMode:=acDialog, OpenArgs:=ObjPtr(oData)' tu sobie spokojnie czeka na zamknięcie wywołanego formuarzaMsgBox "ok" End Sub'******************************************************************
'******************************************************************Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" _ (Destination As Any, _ Source As Any, _ ByVal Length As Long) Dim loData As Object Private Sub Form_Open(Cancel As Integer) Dim lngPointer As Long Dim tmpData As Object' nowa zmienna pomocniczaOn Error GoTo err_exit lngPointer = CLng(Me.OpenArgs) Call CopyMemory(tmpData, lngPointer, 4)' przechwyć obiektSet loData = tmpData' przekaż do docelowej zmiennejCall CopyMemory(tmpData, 0&, 4)' zwolnij przechwyt' i juz można śmiało korzystać z loData ...Me!Tekst2 = loData.Value ' ustaw wartość z przekazanej kontrolki Exit Sub err_exit: MsgBox Err.Description End Sub'******************************************************************
Rozbudowana dyskusja na powyższy temat, dostępna jest tutaj, w archiwum grupy dyskusyjnej.
Dociekliwi znajdą tam szereg informacji także o kontekscie zagadnienia, które jak się okazuje ma swoje pułapki. A dla wszystkich, prezentuję program Pointers.mdb (autorstwa Krzysztofa Naworyty), który zawiera ostatecznie wypracowany sposób wykorzystania wskaźników obiektowych do kilku praktycznych zastosowań.