Si lo que se necesita es verificar si todos los registros del subformulario sean del tipo (¿riesgo?) Igual a dos, se puede lograr de varias formas.
Una de ellas es la clásica DCount, esto es contar los elementos que cumplen (o no cumplen) una condición.
Si se espera que todos cumplan 'riesgo = 2' se cuentan aquellos cuyo riesgo sea diferente, la respuesta será un cero (0) si todos cumplen y cualquier valor diferente de cero si alguno no la cumple.
Tenemos una respuesta que se puede tratar como un Booleano (verdadero/falso, Si/No ...):
.- Es cero (=FALSE)
.- NO es cero (=TRUE).
En un subformulario se mostrarán los elementos de la tabla u origen de datos que tengan relación con el formulario principal (si es un subformulario independiente en más sencillo, pero no es lo natural).
Aplicándolo en la práctica:
Formulario_A: principal
Formulario_B : subformulario (tabla origen 'Gastos')
Campo de relación entre el Formulario_A y Formulario_B (su subformulario): Proveedor
Campo a evaluar en el subformulario (el Formulario_B) : Valor
Se desea hacer visible/invisible un objeto si el campo 'Valor' es superior a 50, (un cuadro de texto en el ejemplo): MSG_Aviso
La función:
DCount("*", "gastos", "Valor > 50 And Tipo = " & Me.Proveedor)
Creamos una subfunción que declaramos publica, para utilizarla desde donde la necesitemos (en el cambio de registro o si se le modifica un valor al subformulario)
Public Sub Refresca()
Me.MSG_Aviso.Visible = DCount("*", "gastos", "Valor > 50 And Tipo = " & Me.Proveedor)
End Sub
La utilizamos en el Formulario_A en su evento ‘al cambiar de registro’
Private Sub Form_Current()
Refresca
End Sub
Y en su subformulario (el Formulario_B) si se modifica un valor
Private Sub Valor_BeforeUpdate(Cancel As Integer)
Parent.Refresca
End Sub
Si no se permite modificar ningún dato en el formulario_B, se puede hacer privada la función o eliminarla y poner la acción directamente en el evento ‘al cambiar de registro (y nada en el subformulario) quedaría así:
Private Sub Form_Current()
Me.MSG_Aviso.Visible = DCount("*", "gastos", "Valor > 50 And Tipo = " & Me.Proveedor)
End Sub
Es un ejemplo que creo adaptable a la solicitud publicada y que (probablemente) sea más amplia de lo que se solicita, hay que verla como un método que será de utilidad para otros casos (compartir una función desde varios sitios).