Hola, amigo.
Estuve revisando tu código (con respecto a la hoja xls que nos adjuntas) y encontré los sgtes problemas:
1. Sí al ejecutar dice "No existe hoja de EXCEL con ese Nombre".
Con el fin de saber si éste error era del sistema o de tu app le agregué "<<Err>>". Y al volver a ejecutar sale el mensaje con esta partícula.
Por lo tanto ((conclusión)) sí es algo en el código.
2. Para descubrir dónde estaba el error, escribí varios "WAIT WINDOW" ((como se ve en el adjunto mío)) y ví que es en el cuarto "EscribirCelda", el que tiene (13, 2, 2222.22) como parámetros.
Pero entonces pensé: ¿por qué los anteriores EscribirCelda no muestran error y el cuarto sí?
3. Quise verificar el controlador de errores que usas cómo funciona y descubro que cuando el error es el 1429, se da el mensaje de que no existe la hoja. Esto no no entiendo: ¿Por qué un programador hace ésto?
Con el fin de descrubrir el error real, agregué la línea sgte:
lcMensaje = loExcepcion.Message && HCM: agregado por HCano
abajo del case del que no estoy de acuerdo.
Al ejecutar me aperece el sgte error:
Error 1429: La celda o el gráfico que intenta modificar está protegidos y por lo tanto son de sólo lectura.
Este mensaje es muy claro. Pero.... ¿hay celdas protegidas?
4. Me interesaba conocer si había celdas protegidas en el xls; así que tenía que hacer visible el xls. Para ello en la definición de la clase Custom llamada EXCEL debí cambiar el la procedure AbrirPlanilla la sgte instrucción
.Visible = .f.
por la sgte:
.Visible = .T. && HCM: estaba .f.
Y al ejecutar nuevamente veo que no le puede poner a la celda (13,2) el valor 2222.22 .
Tengo entendido que la celda (13,2) es la B13, donde está el nombre de la cuenta "Caja Principal", la cual evidentemente debería estar protegida, ¿no lo sabías?. Veo que lo está, así como muchas otras.
----------------------------------------------------
CONCLUSION:
Para resolver tu problema, debes:
1. Utilizar un controlador de errores adecuado.
Si vas a utilizar la estructura TRY/CATCH, házlo de la forma correcta. El hecho de poner que ante el error 1429, el Mensaje es "No Existe Hoja de EXCEL con ese Nombre" no me convence; mejor dicho es un error de tu parte.
2. Utilizar la depuración de tus programas.
Yo utilicé WAIT WINDOW en cada instrucción para saber en dónde se sale de la "ruta normal" y pasa al "manejador de errores".
Una mejor forma es utilizar la Depuración de Errores standard de Fox/VFP; ¿la conoces o no?
Tip: SET DEBUG ON y SET STEP ON.
3. No mandar a "escribir" en una celda protegida.
¿Por qué estás mandando a escribir sobre una celda protegida?
Recomendación para el 3:
Para ésto te recomiendo:
a. No escribir sobre celdas protegidas (plop!!!).
b. Optimizar tu función EscribirCelda para que ---antes de escribir-- verifique si la celda está protegida, de manera que la misma función te advierta (con un MessageBox o con un 'wait window', ¿cierto?) que la celda está protegida y que no puede escribir en ella. De esta forma el servidor OLE no devuelve un error que te mata el programa (lo está matando, ¿cierto?).
¿Qué prefieres a ó b?
4. No abrir otro tema para preguntar "¿Cómo de revisa por automatización, si una celda de un xls está protegida?" ni tampoco "¿Para qué sirve