Valentín: Dado que no facilitas Nombres de tus Objetos, elegiré unos y tú los Cambias por los que tengas.
También voy a suponer que el SubFormulario está “Conectado” al Formulario por un Identificador, como Clave primaria en el Formulario y Secundaria en SubFormulario.
Para el ejemplo voy a imaginar la situación de que en un momento determinado, tú quieres saber, que cantidad tienes pendiente de pago a un Proveedor.
Contemplo todo el historial y si quieres una parte desde una Fecha o entre Fechas se deberían de poner en los Criterios
En el Form_Curren(Al actualizar registro) del “Formulario” principal pones éste código
Verás que sale un Nombre que es FuenteAlfa. Es el origen de Datos del SubFormulario (Tabla o Consulta)
Private Sub Form_Current()
Call CalculaNuevosValores
End Sub
Public Sub CalculaNuevosValores()
Dim CriterioUno As String, CriterioDos As String, Criterios As String, StrSQL As String
Dim Rst As DAO.Recordset
CriterioUno = “Pagado = False”
‘Puedes poner si quieres
‘CriterioUno = “Pagado = 0”
CriterioDos = “IdProveedor = “ & Me.IdProveedor
Criterios = CriterioUno & “ AND “ & CriterioDos
'Calculo la suma de los Montos en base a los criterios
StrSQL = "SELECT Sum([Monto]) AS Deuda"
StrSQL = StrSQL & " FROM [FuenteAlfa] WHERE " & Criterios
Set Rst = CurrentDb.OpenRecordset(StrSQL, dbOpenDynaset)
If Not (Rst.BOF And Rst.EOF) Then
Me.TxtDeuda = Rst!Deuda 'TxtDeuda es el cuadro de Texto en Formulario Principal
End If
If Not Rst Is Nothing Then
Rst.Close
Set Rst = Nothing
End If
End Sub 'CalculaNuevosValores
Voy a suponer que el CheckBox de pagado o no en el Subformulario se llama ChkPagado.
En el evento de ese Check box Despues de actualizar. Lógicamente el código debe estar en el SubFormulario
Private Sub ChkPagado_AfterUpdate()
Me.Parent.CalculaNuevosValores
End Sub
Como puedes apreciar éste último procedimiento puede ser Private, pero "CalculaNuevosValores" ha de ser Public
Creo no haberme olvidado nada, pero si tienes dificultades me comentas.
Mis saludos >> Jacinto