Dr. Pucko, uz svo postovanje, ne zbunjuj coveka. Evo ovako:
Iams dve forme, frmSource i frmTarget. Na frmSource imas text box txtSource i dugme Command2. Na Target formi postoji polje Text0. Na dugmetu na source formi imas Click proceduru, ovako:
Code:
Private Sub Command2_Click()
On Error GoTo Err_Command2_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frmTarget"
If IsNull(Me!txtSource) Then
MsgBox "Polje txtSource je prazno, molim unesite neku vrednost!"
Exit Sub
End If
If IsFormOpenDM(stDocName) Then
'Ako je target forma otvorena, onda je prosto:
Forms(stDocName)!Text0 = Me!txtSource
'Text0 se nalazi na Target formi
'Me!txtSource = nalazi se na ovoj formi Me znaci "ja, tekuca forma"
Else
'Posto forma NIJE otvorena, mozemo da je otvorimo i da joj prabacimo argument
DoCmd.OpenForm FormName:=stDocName, OpenArgs:=CStr(Me!txtSource)
'Moglo je da se ponovo stavi
'Forms(stDocName)!Text0 = Me!txtSource
'ali je upotrebljen OpenArgs kao primer
End If
Exit_Command2_Click:
Exit Sub
Err_Command2_Click:
MsgBox Err.Description
Resume Exit_Command2_Click
End Sub
Evo funkcija koja proverava da li je neka forma trenutno otvorena:
Code:
Function IsFormOpenDM(strFormName As String)
'Purpose: to check if requested form is open
IsFormOpenDM = (SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0)
End Function
Na Target formi postoji polje Text0. Na target formi, na Load eventu imas kod:
Code:
Private Sub Form_Load()
Me!Text0 = Me.OpenArgs
End Sub
I gotovo. To je to. Mozda se pitas zasto OpenArgs ako vec mozemo da otvorimo formu pa da onda dodelimo vrednost polju Text0. Zato da pokazemo kako se radi sa OpenArgs, posto ima slucajeva kada se formi na otvaranju jednostavno mora poslati parametar (na primer nova vrednost nekog ID ili PK polja, kada kreiras novi rekord)
:-)