Hola!
Todo parece correcto, pero ¿puede ser que haya una marca sin modelos en la base de datos? Tal y como has definido el algoritmo, es estrictamente necesario que cada marca contenga al menos un modelo. ¿Puede ser que hayas hecho un OUTER JOIN en el procedimiento almacenado?
Un método rápido (y peligroso) si tienes poquitos datos (¡pero poquitos!), es poner un
On Error Resume Next, dejar que termine esa función y ver qué ha insertado en el treeview. Recuerda quitar el
On Error etc al terminar las pruebas, que luego puede ser un lío.
De todas formas, yo te recomendaría que llenases el treeview en dos pasos: uno leyendo sólo las marcas (usa la claúsula DISTINCT o UNIQUE en SQL) y después otro leyendo las marcas y los modelos. De esta manera, aunque requiera más código, es más rápido, ya que hace menos comprobaciones y menos propenso a errores, ya que todos los nodos padre existen antes de crear los hijos.