Esteban: Te cito el Procedimiento que has de usar adaptando los nombres a los que tu uses,
Private Sub BtnCultivos_Click()
Dim StrSQL As String,NombreForm As String
Dim Frm As Form
Dim Rst As DAO.Recordset
On Error GoTo BtnCultivos_Click_TratamientoErrores
'Aquí se ha de poner el Nombre que tenga el Formulario.
NombreForm = "FCultivos"
'Para evitar Errores miro si el formulario que voy a abrir tiene Datos detrás
'Apunte JTJ >> Aquí se ha de sustituir si no coinciden IdPaciente y TblCultivos
StrSQL = "SELECT IdPaciente FROM TblCultivos WHERE IdPaciente = " & Me.IdPaciente
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenSnapshot)
If Not (Rst.BOF And Rst.EOF) Then ' Si el Recordset tiene datos
'Si el Formulario está abierto lo cierro, antes de abrirlo
If CurrentProject.AllForms(NombreForm).IsLoaded Then DoCmd.Close acForm, NombreForm
'Abro el formulario NombreForm, pasandole como parámetro el Id del registro seleccionado
DoCmd.OpenForm FormName:=NombreForm, WindowMode:=acWindowNormal, WhereCondition:="IdPaciente = " & Me.IdPaciente
Else
MsgBox "Este Paciente no tiene datos de Cultivos Registrados" & vbCrLf & "Se abrirá el Formulario para añadirlos", vbInformation, "FALTAN DATOS DE CULTIVOS"
'Abro el Formulario con el Equivalente de NewRec.
DoCmd.OpenForm NombreForm, acNormal, , , acFormAdd, acWindowNormal
'Aquí se ha de sustituir FCultivos si no coincide el Nombre del Formulario
Set Frm = Forms!FCultivos.Form
With Frm
'Pongo todos los valores que le quiero adjudicar
.IdPaciente = Me.IdPaciente
.Campox = Me.CampoElQueSea
…..
End With
'Frm.Recalc
Set Frm = Nothing
End If
NombreForm = ""
Rst.Close
Set Rst = Nothing
BtnCultivos_Click_Salir:
On Error GoTo 0
Exit Sub
BtnCultivos_Click_TratamientoErrores:
MsgBox "Error " & Err.Number & " en Procedimiento.: BtnCultivos_Click de Documento VBA: Form_Evolucion (" & Err.Description & ")"
Resume BtnCultivos_Click_Salir
End Sub
Creo no olvidar nada fundamental. Un saludo >> Jacinto