Filters don't work that way. You don't want to reference the control in the filter. You want the value from the control.
Filters have to be strings similar to an SQL WHERE clause without the word WHERE. Your filter creation would look like
stFilter = "[myChosenField] = True" (for Boolean)
stFilter = "[myChosenField] = 1" (for numbers)
stFilter = "[myChosenField] = ""Value""" (for constant text)
stFilter = "[myChosenField] = """ & CStr([myControl]) & """" (for non-constant text)
stFilter = "[myChosenField] = " & CStr([myControl]) (for non-constant numbers)
where [myChosenField] is a field that is part of the recordsource of the thing you are filtering (not necessarily appearing under that name in the form with the given control on which you base the filter), and [myControl] is the control on the form that provides the filter value for the form or report you want to open. Depending on what is entered to that control, you might wish (for text) to make it Trim$([myControl])
And you might also wish to test Len(Nz([myControl],"")) which, if it is zero, means you have an empty control. I.e. no filtration has been defined.
I didn't look at it closely, but your syntax for actually opening the form with a filter looks OK. It is how you formed the filter string in the first place that was wrong.