Hola, tal como lo expones, el código es correcto. Quiero imaginarme que sólo has puesto aquí como las utilizas y en tu código no vienen tal cual lo has copiado. ¿ Estan en procedimientos diferentes? ¿ Tomas los valores de Msh de las celdas correctas ?
Ten en cuenta que el primer elemento Row y Col del Msh es 0
Yo probaria a crear puntos de interrupción para depurar el código a fin que se detenga justo después de tomar las variables para detectar donde está fallando.
Saludos
COMO INSERTAR PUNTOS DE INTERRUPCION
Consultar este enlace que es para VBA de Excel pero es perfectamente válido
Depurar Codigo
Leer en
Capítulo 8 Depuración del Código para aquellos que no lo sepan es bastante instructivo.