Ma la funzione che hai postato non fa quello che dicevi inizialmente... anzi la funzione che usi è inutile come funzione basterebbe una SUB...
Se tu avessi usato una Functuon in modo corretto questa avrebbe dovuto restituire la stringa... cosa che non fai...
Oltretutto una Function o Sub come dovrebbe essere questa non deve avere riferimenti ad oggetti nella form altrimenti tolto lo scopo..., parlo di queste:
subfrm_registri.Form.Filter = sqlcmd
subfrm_registri.Form.FilterOn = True
A resri dovuto scrivere una funzione che restituiva il valore assegnando ad una variabile e poi usare la variabile da passare al parametro WHERE CONDITION di OpenReport.
Function Nomefunction() as string
.... tutti i tuoi codici di costruzione
Nomefunctuon=stringa SQL
End Function
Nel click
Dim sSQL AS Sring
sSQL= Nomefunction()
If len(sSQL)>0 Then
subfrm_registri.Form.Filter = sqlcmd
subfrm_registri.Form.FilterOn = True
End if
DoCmd.OpenReport stDocName, acPreview, , sSQL
....
Devi acquisire più basi tecniche per manipolare il codice... quello chenhai scritto non va proprio bene.