Non so se ho capito bene, ma mi pare che ti occorra usare una stringa SQL che va 'costruita da codice VBA' che deve analizzare tutte le condizioni impostate, o meno, dall'utente sui vari campi che hai previsto.
In sostanza, dichiarata una variabile stringa, vi accodi solo le condizioni impostate tralasciando le altre.
La maschera dovrebbe essere slegata dalla tabella, in quanto lo scopo è quello di impostare parametri, esempio:
- se tu vuoi impostare un intevallo di date DAL... AL... è chiaro che devi usare due controlli in cui l'utente inserisca le date
- se vuoi fare una ricerca su un campo testo devi poter selezionare anche valori parziali utilizzando i caratteri jolly (* e ?)
Come dicevo sopra, la stringa SQL dovrà contenere solo le condizioni valorizzate.
Avrai una stringa SQL base:
Dim sql As String
sql = "SELECT <elenco_campi_da_mostrare> FROM tabella "
sql = sql & " WHERE <campo_PK> LIKE '*' "
a cui dovrai aggiungere le condizioni via via impostate
If Not ISNull(DataDal) then ' solo se è indicata la DataDal
sql = sql & " AND DataArrivo BETWEEN <DataDal> AND <DataAl> "
End If
If Nazione > "" then ' solo se è indicata la nazione
sql = sql & " AND Nazione = <nazione_selezionata> "
End If
...
e via così.