Si posono fare molte considerazioni... sicuramente scrivere una Public Function così, è poco pratica anzi è rigida e francamente... questa proprio non funzionerà
Public Function D_anno() As String
Variabile = CasellaCombinata
End Function
Eventualmente:
Public Function D_anno() As String
D_anno= CasellaCombinata
End Function
Rigida perchè richiede la Maschera che ospita il controllo aperta.
Rigida perchè se si volesse eseguire la Query da altre fonti... obbliga a scrivere un'altra funzione.
Quando si operano queste scelte sarebbe bene pensare sempre a come rendere accessibili da qualsiasi punto, sempre a prescindere.
Faccio un esempio che rende l'idea di come modificare quella Funzione:
Private sValue As String
Public Function D_anno(Optional Value as Variant) As String
If Not isMissing(Value) Then sValue=Value
D_anno=sValue
End Function
Questa funzione consente di valorizzare il "parametro" prima dell'esecuzione della query da qualsiasi parte del codice..., consente sia di scriverlo che di leggerlo, se si omette il Value diventa in lettura del valore precedente, se si passa il parametro si aggiorna il valore a quello passato...!
Prima di chiamare la Query:
Call D_Anno(25) ' questo aggiorna il valore che verrà poi usato nella Query a 25
Nella Query
SELECT * FROM T1 WHERE Anno=D_Anno()
e verranno filtrati i dati con D_Anno=25
Ovviamente è facile capire che una funzione scritta così può essere usata non solo per Anno ma per qualsiasi parametro... quindi magari invece di averne 150, D_anno/D_Mese/D_Nome/D_Cognome... si può ottimizzare...
Ecc... ci sono mille esempi...