You can set the control source of your field to a function name.  That function can easily execute your SQL, and/or pass in a variable.  Here's my simple boiler plate for a function to execute a SQL statement into a recordset and return the first value.  In my world I'm usually including a very specific where clause, but you could certainly make any of this function more robust for your needs.
=fnName(sVariable, iVariable)
Public Function fnName( _
    sVariable as String, _
    iVariable as Integer _
    ) As String
On Error GoTo Err_fnName
    Dim con As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim sSQL As String
    sSQL = ""
    Set con = Access.CurrentProject.Connection
    Set rst = New ADODB.Recordset
    rst.Open sSQL, con, adOpenDynamic, adLockOptimistic
        If rst.BOF And rst.EOF Then
            'No records found
            'Do something!
        Else
            'Found a value, return it!
            fnName = rst(0)
        End If
    rst.Close
    Set rst = Nothing
    con.Close
    Set con = Nothing
Exit_fnName:
    Exit Function
Err_fnName:
    Select Case Err.Number
    Case Else
        Call ErrorLog(Err.Number, Err.Description, "fnName", "", Erl)
        GoTo Exit_fnName
    End Select
End Function