Excel se tilda y deja de funcionar

Seguramente ustedes tendrán la respuesta a esta duda.

Tengo un trabajo basado para administración, el cual solo muestra los userform y las hojas ocultas, a medida que las necesito se habilitan vy VBA.

El drama es que no se cual sera el motivo al iniciar el trabajo, el excel en ocasiones (ya muy seguidas) se cuelga, queda en no responde y debo forzar el cerrado.

Cuando se cuelga "tilda" traba todo, no deja cerrar solo si recurro al administrador de tareas.

¿Saben por qué es? ¿Algo en las macros que haga esto? ¿Tiene algo que ver que al abrir y cerrar varios userform esto complique? Un userfrom lo abro con show, y si vuelvo atrás o abro otro dejo el anterior con Hide.

Aguardo sus comentarios expertos!

Respuesta
2

Leí todo muy rápido, pero a primera vista puedo ver una discrepancia de conceptos. El evento Terminate y el método . Hide nunca estarán en concordancia.

El evento Terminate solo funciona cuando el objeto ha sido borrado de la memoria, para borrar un formulario de la memoria usas Unload o cierras por la X de la ventana. Al usar "Hide" solo alteras su visibilidad, no su existencia, por lo que el evento Terminate no se va a disparar ya que el formulario sigue existiendo pero invisible.

En general, yo no recomiendo usar .Hide nunca o casi nunca, prefiero siempre cerrar los formularios completamente con Unload. De esta forma tendrás un proyecto más limpio y liviano, la memoria asignada a Excel es limitada, muchos .Show y .Hide harán que tengas muchos objetos cargados en memoria, y podría ser causa de desbordamiento y bajo rendimiento.

-

Para demostrar esta teoría, crea un formulario y coloca dos botones, y el siguiente código en el modulo del formulario:

Private Sub CommandButton1_Click()
Me.Hide
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub UserForm_Terminate()
Debug.Print "la forma ha sido borrada de memoria"
End Sub

Andy M

2 respuestas más de otros expertos

Respuesta
2

[Hola

Es bastante complicado saber qué ocurre con los (pocos) datos que das. Posiblemente puede que sí sea el exceso de Show y Hide, aunque también creo que quizá usas On Error Resume Next (¡Lo que no es recomendado!) Y algún error se "enmascara" por eso, y quién sabe si hasta ya se corrompió el archivo.

Si usas "On Error Resume Next", borra todos, usa el archivo y comenta con detalle qué ocurre.

Abraham, veo que usted tiene razón, veo en varias parte el código que me menciona, lo quitaré para poder evaluarlo.

Muchas gracias por su tiempo y pronto respuesta.

abrazo

stimados, sigo con los problemas.

Les adjunto fotos desde que inició el formulario 1 hasta el final.

Lo que va haciendo es hide al userform1 y show al userform2 así en todo los casos.

Si se finaliza el formulario usa la misma función, igual para la selección del botón "volver", siempre uso hide y show.

Al ingresar y probar un solo meno no se tilda pero si debo cerrar y abrir varias veces el sistema queda tildado y debo forzar el cierre, ¿a qué se deberá? Ya probé usar en vez de hide "unload me", pero es lo mismo.

ad5 fotos de cómo están los códigos, los cuales creo que son muy básicos pero bo entiendo porque se congela.

[Hola

A primera vista tienes varios dilemas con la forma en que usar los eventos Terminate, parece que ahí está el dilema. Cuando cierras un Userform, se activa su evento "Terminate", por lo que no es necesario colocar en él un Unload o un Hide para el mismo Userform porque ¡Ya se está cerrando!

Ojo, veo más cosas erradas ahí, pero puedes comenzar con lo mencionado.

Respuesta
1

¿Ocurre con todos los archivos o nada más con ese archivo? Si es unicamente con ese archivo, es probable que la macro este provocando esa inconsistencia, si puede compartir su archivo para ver si es posible encontrar la causa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas