Consiglio:
Non usare i vbCrLf: non servono a niente.

Di norma, quando si compone una query piuttosto articolata, è necessario verificarla PRIMA di darla in pasto al metodo Open del Recordset o Execute della Connection.


codice:
Debug.Print sSql 
Stop
e ti guardi il risultato nella finestra Immediate di VB.



Ma perchè non usi i Command e Parametri?
Perchè ti vuoi far male da solo?