Una sugerencia: si solo quieres elegir las sustancias candidatas (según entiendo yo) ¿Por qué no mostrar únicamente las que son candidatas para ese producto? Simplemente tendrías que añadirle una condición más a tu consulta origen de datos del cuadro combinado:
SELECT qrySUST.SUST, qrySUST.CAND
FROM qrySUST
WHERE (((qrySUST.CodTP)=[Form]![CodTP].[value])) AND qrySUST.CAND=-1
ORDER BY qrySUST.SUST;
Y para que se te actualice en cada registro, en el evento "Al entrar" o "Al recibir el enfoque" del cuadro combinado le pones el siguiente código: Me. CboSUSTenPROD. Requery
Para hacer lo que pides (el mensaje), sería una cosa así, suponiendo que tu cuadro combinado sea multivalor, como se desprende del enunciado:
En el evento "Después de actualizar" o "al perder el enfoque" o "al salir" de tu cuadro combinado, le pones este código (que tendrás que adaptar a los nombres que tu tengas):
Private Sub cboSUSTenPROD()
Dim miSQL As String
Dim rst As DAO.Recordset
Dim rstSust As DAO.Recordset2
Dim listaSust() As String
Dim i As Integer
Dim mensaje As String
Dim cuenta As Integer
If Not IsNull(Me.cboSUSTenPROD) Then
DoCmd.RunCommand acCmdSaveRecord
Set rst = CurrentDb.OpenRecordset("SELECT * FROM tblProductos WHERE TP=" & Me.TP)
Set rstSust = rst("Sust").Value
i = 1
'Coges todos los valores seleccionados y los pasas a una matriz
rstSust.MoveFirst
Do Until rstSust.EOF
ReDim Preserve listaSust(i)
listaSust(i) = rstSust!Value
i = i + 1
rstSust.MoveNext
Loop
'Miras si cada sustancia es candidata o no
For i = 1 To UBound(listaSust())
'Si es candidata, las vas encadenando, separando con comas, y cuentas las que son candidatas
If DLookup("CAND", "tblSUST", "SUST='" & listaSust(i) & "'") = True Then
mensaje = mensaje & listaSust(i) & ","
cuenta = cuenta + 1
End If
Next
'Terminas de construir el mensaje, si hubo candidatas
If Len(mensaje) > 0 Then
If cuenta = 1 Then
mensaje = "La sustancia " & Left(mensaje, Len(mensaje) - 1) & " es candidata"
Else
mensaje = "Las sustancias " & Left(mensaje, Len(mensaje) - 1) & " son candidatas"
End If
MsgBox mensaje
End If
rst.Close
Set rst = Nothing
Set rstSust = Nothing
End If
End Sub
Para que lo veas en acción, te adjunto un mini-ejemplo: http://www.filebig.net/files/ZuZsQ5RgUy
Un saludo