Credo tu abbia una grande ma grande confusione... alla quale tuttavia noi possiamo dare poco in quanto credo ci siano molti errori di fondo.
Io il codice lo avrei scritto così
Private Sub Comando17_Click()
Dim strSQL As String
strSQL = "([Q_ST_Ent].[entrata]>0) AND "
If Len(Trim(Me![CasellaCombinata0].Value) & vbNullstring) > 0 Then strSQL=strSQL & " Q_ST_Ent].[canale]=[fonte] AND "
If Len(Trim(Me![CasellaCombinata2].Value) & vbNullstring > 0 Then strSQL=strSQL & "[Q_ST_Ent].[mezzo]=[tramite] AND "
If Len(Trim(Me![CasellaCombinata4].Value) & vbNullstring) > 0 Then strSQL=strSQL & "year([Q_ST_Ent].[data_mov])=val([anno]) AND "
If Len(Trim(Me![CasellaCombinata6].Value) & vbNullstring) > 0 Then strSQL=strSQL & "[Q_ST_Ent].[dipartimento]=[dipartim] AND "
If Len(strSQL)>0 Then strSQL=Mid$(strSQL,1,Len(strSQL)-5)
DoCmd.OpenReport "R_Entrate", acViewPreview , , strSQL
End Sub
Nel tuo codice proposto ci sono gravi errori di dichiarazioni come ti dicevo e molta confusione non utile...!
La mia proposta è più pulita e semplice, vedi tu...
Mi rimane tuttavia un grosso dubbio sui CRITERI che mi sono limitato a COPIARE, solo a titolo di esempio:
[Q_ST_Ent].[mezzo]=[tramite]
da dove viene [tramite]....?