Mira: Aún no lo he probado, pero se supone que los objetos Excel creados en memoria son instancias COM, por lo que se requiere el uso de la clase Marshall para destruirlos.
La idea sería liberarlos de modo que los garbage collectors puedan limpiar la memoria. Algo así:
Código vb.net:
Ver originalSystem.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel)
El este caso se supone que estoy liberando los objetos en cada nivel (hoja, libro y aplicación).
Además de esto, yo estoy usando algunas veces un recurso algo rústico: capturo el objeto Process de Excel y luego directamente lo mato.